一次过还是挺开心的,记录下编译过程
环境:ubuntu-16.04 amd64,源码是Android-6.0.0_r1
1、环境配置
1 | sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 \ |
安装 open JDK7
Ubuntu16.04没有open JDK7的源,增加个仓库源
1 | sudo add-apt-repository ppa:openjdk-r/ppa |
安装后环境变量已经配置好,java -version查看
有些工具需要JDX8才能运行,比如jadx,可以使用下面的命令切换java版本
1 | sudo update-alternatives --config java |
2、获得Android源码
使用repo下载文件很大,因为aosp文件夹下的.repo文件是仓库,.repo以外的文件才是需要的源码文件,.repo很大,使用repo下载的源码有几十个G。可以直接下载别人打包好的镜像文件
https://pan.baidu.com/s/1JYOgTrF6xe3cNwmzxmE5Yw
这样android-6.0.0_r1的大小为4G多
谷歌官方repo和教程
https://source.android.com/setup/build/downloading
当然也可以使用清华的repo镜像
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
下载下来是7z压缩文件,需要额外的软件解压
1 | sudo apt-get install p7zip-full |
解压后修改art/build/Android.common_build.mk,修改内容如下
1 | # Host. |
否则会报unsupported reloc…的错误
If it still not works,try this in your android root path:
cp /usr/bin/ld.gold prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/x86_64-linux/bin/ld
3、编译
在源码根目录下:
1 | make clobber |
通过lunch选择编译目标,这里编译aosp_arm-eng,选择1
1 | lunch |
开始编译
1 | make -j8 |
编译好的文件在out/target/product/generic
启动模拟器
1 | emulator -memory 512 -cache-size 2028 |
若有多个版本
1 | source build/envsetup.sh |
编译单独的模块
1 | mmm art/runtime |
重新打包系统镜像
1 | make snod |
emulator启动参数
-memory size
-cache-size size
https://developer.android.com/studio/run/emulator-commandline?hl=zh-cn
真正使用的命令
1 | out/host/linux-x86/bin/emulator -sysdir out/target/product/generic/ -system out/target/product/generic/system.img -ramdisk out/target/product/generic/ramdisk.img -data out/target/product/generic/userdata.img -kernel /home/hzh/oldhome/learn/goldfish/arch/arm/boot/zImage -scale 1.0 -memory 512 -partition-size 1024 |
关闭ubuntu节能模式
1 | sudo pm-powersave false |