Android系统源码的编译

1.下载源码

具体可以参考知乎中的该篇文章:Android国内源码下载——亲测成功
关键操作为打开repo修改REPO_URL为国内可访问的源,修改如下:

REPO_URL = 'https://gerrit-googlesource.lug.ustc.edu.cn/git-repo'

2.初始化编译环境

初始化一个特定的终端, 使其可执行诸如 mm、 mmm 这类编译 Android 专用的命令,进入Android源代码根目录,运行如下命令:

source build/envsetup.sh

3.选择编译目标

使用 lunch 命令设置编译目标, 指定编译一个用于安卓虚拟器(sdk)并且包含调试信息(eng)的目标:

lunch sdk-eng

4.编译 Android 源码

make -j4

5.编译过程可能出现的错误

如果顺利,经过上述操作后,编译2个多小时即可成功; 但编译过程中往往会出现许多意想不到的错误,下面将列出我遇到过的编译过程中常见问题汇总:

  • 问题1: You are attempting to build with the incorrect version of java. The correct version is: 1.7.x
    解决方法: 需要安装JDK,且必须为OpenJDK;Ubuntu16.04的安装源已经默认没有openjdk7了,所以要自己手动添加仓库,如下:
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-7-jdk 
  • 问题2: error 5: Added public field android.Manifest.permission.BACKUP…..
    update-api
    解决方法:进入 源码目录
make update-api
make -j4 //重新编译即可
  • 问题3: /bin/bash: gperf: 未找到命令
    解决方法: 安装gperf
sudo apt-get install gperf
  • *问题4: build/core/host_shared_library_internal.mk:51: recipe for target ‘out/host/linux-x86/obj/lib/libart.so’ failed
    解决方法:clang编译器导致的问题,目前可行的修改方法art/build/Android.common_build.mk ,中将host 默认编辑器使用clang关掉,找到WITHOUT_HOST_CLANG关闭clang即可;
    但在不报这个错误的情况下,尽量不要把clang关闭。
# Host.
 ART_HOST_CLANG := false
 ifneq ($(WITHOUT_HOST_CLANG),true)
   # By default, host builds use clang for better warnings.
  ART_HOST_CLANG := false
 endif
  • 问题5: recipe for target ‘out/host/linux-x86/obj32/lib/libc++.so’ failed
    这里写图片描述
    解决方法:进入AndroidSrc根目录
cp /usr/bin/ld.gold prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/x86_64-linux/bin/ld
make update-api
make -j4
  • 问题6: /usr/include/features.h:367:12: fatal error: ‘sys/cdefs.h’ file not found # include
apt-get install libc6-dev-i386
make -j4
  • 问题7: make: *** 正在等待未完成的任务…
    make: * [out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex] Error 41
    make: * 正在等待未完成的任务….
    DroidDoc took 26 sec. to write docs to out/target/common/docs/system-api-stubs
    DroidDoc took 27 sec. to write docs to out/target/common/docs/api-stubs

    make failed to build some targets (02:09:42 (hh:mm:ss))

    解决方法:it is OK to exe “make -j4” again

  • 问题8: collect2: error: ld terminated with signal 9 [Killed]
    解决方法:android在后面的编译阶段内存占用量很高,如果没有设置swap交换分区,或者分区太小都会导致上述错误 ,如下所示;然后 free -m 命令查看下交换分区有没分配成功
           接着再重新编译android源码,经过很长时间libwebviewchromium.so这个文件终于可以成功生成了

dd if=/dev/zero of=/opt/other/swapfile bs=1024 count=1536K
mkswap /opt/other/swapfile
swapon /opt/other/swapfile
swapon -s
  • 问题9: mkimage” command not found - U-Boot images will not be built
sudo apt-get install u-boot-tools

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值