源码编译之前请先下载源码 下载方法参照:https://blog.csdn.net/bgc525725278/article/details/84547775
1、进入下载的源码目录(确认当前分支是你的目标分支),输入如下命令:
source build/envsetup.sh
2、选择编译的room类型,输入如下命令:
lunch
说明:所有编译目标都采用 BUILD-BUILDTYPE
形式,其中 BUILD
是表示特定功能组合的代号
BUILDTYPE
是以下类型之一:
三者具体差异Google也在官方文档中给出了说明:https://source.android.com/source/building
模拟器一般选eng
,调试功能全开。
调试真机的话选userdebug
。
发行最终版本用user
。
官方给出了一份自己出厂设备的代号和编译配置选项
根据需要选择不同的版本进行编译。在模拟器上运行可以直接:lunch aosp_arm-eng
3、开始编译,输入如下命令:
make -j8
注:使用make
命令来编译代码,为了提高编译速度,GNU Make 可以借助 -jN 参数处理并行任务,通常使用的任务数 N 介于编译时所用计算机上硬件线程数的 1-2 倍之间 使用命令:
cat /proc/cpuinfo | grep processor
N=cpu个数×2
4、坐等编译完成
5、启动模拟器
emulator
1、error while loading shared libraries: libncurses.so.5
解决方法:sudo ln -s /lib/x86_64-linux-gnu/libncurses.so.6 /usr/lib/libncurses.so.5
2、找不到java,javac,javah,javap等命令
解决方法:
sudo ln -s /home/jdk/bin/jar /bin/jar
sudo ln -s /home/jdk/bin/java /bin/java
sudo ln -s /home/jdk/bin/javac /bin/javac
sudo ln -s /home/jdk/bin/javah /bin/javah
sudo ln -s /home/jdk/bin/javadoc /bin/javadoc
sudo ln -s /home/jdk/bin/javap /bin/javap
3、make: *** [build/core/binary.mk:576: out/host/linux-x86/obj32/EXECUTABLES/aidl_intermediate/aidl_language_l.cpp] 已放弃 (core dumped)
make: *** 正在等待未完成的任务....
解决方法:export LC_ALL=C
4、libnativehelper/JniInvocation.cpp:45: error: unsupported reloc 43
解决方法:cp /usr/bin/ld.gold prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/x86_64-linux/bin/ld
5、android源码编译之后emulator: ERROR: No initial system image for this configuration
问题原因是由于没有编译成功
解决方法:重新编译
6、build/core/main.mk:518: hardware/qcom/sdm845/Android.mk: 没有那个文件或目录
原因:分支中代码checkout的有问题,重新切分之
repo forall -c git reset --hard
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-7.0.0_r1 //自己的目标分支
repo sync