前言
13年的时候做过一年Android rom开发,不过当时在公司的ubuntu开发环境都是老员工搭建好的,repo Android源代码,编译都很顺畅没有遇到什么问题。很早之前的一个周末闲来无事用windows台式机装了ubuntu,准备再编译一次Android6.0源代码。不料真是一路的坑,故有这篇填坑记给大伙参考。
开始
电脑配置:海尔 i5 8G内存,GTX750单显
系统:win7 + ubuntu 16.04 双系统
流程参考:https://source.android.com/source/downloading#using-authentication
-
win7装ubuntu16.04就不顺利,偶尔进入ubuntu直接黑屏。
解决办法:网上都说显卡的问题,应该进入bios禁用双显卡,这个一般都是针对笔记本。我的是台式机,启动双系统时迅速选择ubuntu可以进入,进去后软件更新》附加驱动》选择显卡驱动,比如我的是nvidia选择这个:
repo sync同步代码出错: error: Exited sync due to fetch errors
由于我是用ss搭建了完美的翻墙网络,google什么的毫无鸭梨,直接用官方地址拉取代码:
repo init -u https://android.googlesource.com/a/platform/manifest
repo sync
报错:error: Exited sync due to fetch errors
google官网给出解决办法:
点击 密码生成器,进入:
按照他的提示执行以下命令,然后重新执行同步代码,一切OK然后是漫长的等待。
大概需要30小时左右,13G的源代码就下载下来了。如果你不具备翻墙环境可以用一些国内的代理仓库,效果我就不清楚了。
- 执行make命令编译源代码,报错:error: unsupported reloc 43
//开启8条线程编译源代码
make -j8
这个是ubuntu 16.04编译Android源码的bug,编译之前我们应改一个配置:
在android源码文件下art/build/Android.common_build.mk这个文件中找到
# Host.
ART_HOST_CLANG := false
ifneq ($(WITHOUT_HOST_CLANG),true)
# By default, host builds use clang for better warnings.
ART_HOST_CLANG := true
endif
后面两个true改为false,这个设置对Android5.0和5.1无效还是编不过,对6.0可以,其他版本未做测试。so建议装ubuntu 14.04
不限于这个报错,很多其他报错你也可以尝试这个修改。
路径错误,把源码路径修改为英文即可。
报错:Cannot launch Jack Server
解决办法:把$HOME/.jack中的配置文件中的SERVER=true设成false,不用jack
可能还有其他一些我记录下来,只能靠不断google不断找答案尝试。请记住每次报错导致编译停止,重新开始前执行下clean:
make clean
最后大概需要3-4小时左右,make成功执行然后在这个目录:
./out/target/product/generic 生成4个img文件代表编译sucsess:
-system system.img
-data userdata.img
-ramdisk ramdisk.img
安装genymotion后一直连不上adb
解决办法:进入genymotion发开调试开关,在型号选择界面settings 》adb 中配置SDK路径,重启genymotion执行adb指令提示 ADB server didn't ACK, 5037端口被占用
解决办法: 有两个原因,一是其他软件占用5037端口,二是重复安装了adb组件
第一步,netstat -ap | grep 5037 查找哪些进程占用了5037端口
第二步,cd proc/ 接着执行:ls -ail 这个里面存放所有进程,进程PID为文件夹名称
第三步,根据第一步占用PID 查找对应进程文件路径,exe 表示路径
第四步,kill pid 杀掉可疑进程,重新设置sdk环境,重启adb
- 准备导入源码到android studio前执行: mmm development/tools/idegen/ 报错 /bin/bash: jar: 未找到命令
解决办法:在编译android环境时,java -version 命令明明能够正确表示java已经安装成功,环境设置正确。但是,在编译android时,检查java版本却通不过去:提示/bin/bash: java: command not found 问题,
重装jdk几次仍是出现这种问题,没办法只好做个软链接了。
sudo ln -s /jdk1.6.0_21/bin/jar /bin/jar
sudo ln -s /jdk1.6.0_21/bin/java /bin/java
sudo ln -s /jdk1.6.0_21/bin/javac /bin/javac
sudo ln -s /jdk1.6.0_21/bin/javah /bin/javah
sudo ln -s /jdk1.6.0_21/bin/javadoc /bin/javadoc
后记
由于台式机ubuntu太卡了,打算把源代码copy到mac mini上,不了中途移动硬盘卡死导致部分文件丢失,不过还好frameworks和packages都是完整考过来了:
刚已经把源码的关键部分上传到网盘,有需要的朋友自取:
frameworks(Android核心代码):
链接:https://pan.baidu.com/s/1nwyOmJB 密码:huxw
packages (Android 内置app,系统servcie,provider等):
链接:https://pan.baidu.com/s/1kWVwtqn 密码:hh2c