Mac上下载编译Android 6.0源码详细记录

第一步:
使用命令创建一个后缀为.dmg.dmg.sparseimage的镜像文件
$ hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 80g ~/android.dmg

如果要扩容
$ hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage

android官方提供有mount和umount的function,将它们paste到’~/.bash_profile‘,如下
# mount the android file image /Volumes/你自己命名的镜像文件
function mountAndroid() { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }

# unmount the android file image
function umountAndroid() { hdiutil detach /Volumes/android; }

最后再Terminal里输入以下命令更新启动文件
$ source ~/.bash_profile


第二步:
安装其他软件,利用macport下载。首先要安装macport
$ POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg

第三步:
在Mac OS中,默认限制的同时打开的文件数量很少,不能满足编译过程中的高并发需要,因此,在~/.bash_profile中添加下面的命令:
# set the number of open files to be 1024
ulimit -S -n 1024

第四步:
下载repo
下载Repo之前,需要创建一个bin文件,并且将路径写入到path中:
$ mkdir ~/bin
$ PATH=~/bin:$PATH
然后在命令行中输入下面的命令,下载Repo,并且修改属性
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
可以将Repo中的下载地址改为清华大学tuna镜像源,这样就不用挂着VPN下载了。编辑Repo,修改REPO_URL后的地址:
REPO_URL = 'https://gerrit-googlesource.lug.ustc.edu.cn/git-repo'

第五步:
下载源码
双击第一步生成镜像文件,然后可以重命名为AOSP,然后进入镜像文件
cd /Volumes/AOSP/
创建源码目录:
mkdir android-6.0.1
cd android-6.0.1

根据你的Nexus设备,选择代码分支:Source Code Tags and Builds ,我的是Nexus 7,支持Nexus 7的最新分支是android-6.0.1_r59。执行repo init
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.1_r59
完成后,执行下面的命令,
repo sync

由于下载源码的时间太长,中途可能会出现中断情况,虽然repo同步是支持断点续传,但是不知道什么时候会断开,这一点很麻烦,所以可以写一个shell脚本来开启同步。
可以打开sublime text命名新建一个aospdown.sh,然后拷贝到android-6.0.1,运行./aospdown.sh,等待下载
#!/bin/bash
PATH=~/bin:$PATH
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.1_r59
repo sync
while [ $? = 1 ]; do
echo "================sync failed, re-sync again ====="
sleep 3
repo sync
done

下载完成后可以,完成后可以删除.repo/文件
$ rm -rf .repo/


下载驱动

把你对应的机型的驱动都下载下来,然后解压到android-6.0.1  根目录。以nexus 7的6.0.1为例,解压过来之后分别是三个sh文件extract-asus-flo.sh、extract-broadcom-flo.shextract-qcom-flo.sh 。分别都执行以下,就会在根目录生成vendor目录,里面就是需要编译的驱动文件。
例如:
$ ./extract-broadcom-flo.sh

The license for this software will now be displayed.
You must agree to this license before using this software.

Press Enter to view the licensels
回车后查看license,翻到license最后,输入I ACCEPT后回车,这时会将驱动文件释放到vendor目录。
依次将驱动搞定之后,按照前面的步骤再次编译。


编译部分
兼容处理
如果你和我一样,使用的是Mac OS 的EI Capitan系统,在编译之前,需要做一些兼容性处理。
打开build/core/combo/mac_version.mk文件,在mac_sdk_versions_supported变量后添加版本号10.11:
mac_sdk_versions_supported := 10.6 10.7 10.8 10.9 10.11 10.12
然后在源码根目录下调用下面的命令:
$ source build/envsetup.sh
根据你的刷机的设备选择设备
$lunch

You're building on Darwin

Lunch menu... pick a combo:
    1. aosp_arm-eng
    2. aosp_arm64-eng
    3. aosp_mips-eng
    4. aosp_mips64-eng
    5. aosp_x86-eng
    6. aosp_x86_64-eng
    7. aosp_deb-userdebug
    8. aosp_flo-userdebug
    9. full_fugu-userdebug
    10. aosp_fugu-userdebug
    11. mini_emulator_arm64-userdebug
    12. m_e_arm-userdebug
    13. mini_emulator_mips-userdebug
    14. mini_emulator_x86-userdebug
    15. mini_emulator_x86_64-userdebug
    16. aosp_flounder-userdebug
    17. aosp_angler-userdebug
    18. aosp_bullhead-userdebug
    19. aosp_hammerhead-userdebug
    20. aosp_hammerhead_fp-userdebug
    21. aosp_shamu-userdebug
可以在根据下面的网址选择
类型                      用途

user                    权限少,用于刷机使用

userdebug               和“user”类似,但可以root,并且可以调试

eng                     具有开发配置,并且有额外的调试工具
再然后
make -j4
#-jN,N这个数字可以跟你的CPU实际情况而定。
开始编译源代码,这个过程需要一个半小时左右,最后源代码编译成功,整个源代码的大小为40多G,那个.repo文件夹在编译之前可以删除(因为占用的空间比较大,下载完源代码后就没有很大用处了),编译过程中可能会失败,不过不用担心,再次编译的时候会接着编译,而不会从头开始编译
出现如下内容,表示编译成功
Created filesystem with 1438/98304 inodes and 101492/393216 blocks
Install system fs image: out/target/product/generic/system.img
out/target/product/generic/system.img+ maxsize=1644333504 blocksize=2112 total=1610612736 reserve=16610880 **make completed successfully (xx:xx (mm:ss))**



开始刷机
又折腾了一遍之后,我们再次fastboot刷刷刷。
#手机连上电脑的情况下
adb reboot bootloader
#cd 到源码编译输出的目录
fastboot -w flashall
刷完收工,进入全新的Android M吧。


选择编译目标
通过lunch指令设置编译目标,所谓的编译目标就是生成的镜像要运行在什么样的设备上.这里我们设置的编译目标是aosp_arm64-eng,因此执行指令:
lunch aosp_arm64-eng





下载源码遇到的问题一:
这个error信息忘了详细记录了,就是某个./repo/projects/.............下面报错了,把报错的文件夹删掉,repo sync
error:
………………………………………………………………………...
Traceback (most recent call last):
  File "/Volumes/aosp/android-6.0.1/.repo/repo/main.py", line 531, in <module>
    _Main(sys.argv[1:])
…………………………….
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd4 in position 578: ordinal not in range(128)
解决办法:根据error的提示,删除./repo/projects/...相应下的git就行了,然后再repo sync


编译源码遇到的问题二:
build/core/combo/mac_version.mk:39: * Can not find SDK 10.12 at /Developer/SDKs/MacOSX10.6.sdk
build/core/combo/mac_version.mk:40: *****************************************************
build/core/combo/mac_version.mk:41: *** Stop..  Stop.
配置mac_sdk_versions_supported里添加10.12

编译源码遇到的问题三:
system/core/libcutils/threads.c:38:10: error: 'syscall' is deprecated: first deprecated in OS X 10.12 - syscall(2) is unsupported; please switch to a supported interface. For SYS_kdebug_trace use kdebug_signpost(). [-Werror,-Wdeprecated-declarations]
return syscall(SYS_thread_selfid);
^
host C: libcutils <= system/core/libcutils/iosched_policy.c
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/unistd.h:733:6: note: 'syscall' has been explicitly marked deprecated here
int syscall(int, ...);
MacOSX-SDKs下载地址: https://github.com/phracker/MacOSX-SDKs
删除10.12,下载MacOSX10.11.sdk,解压拷贝到/Applications/XCode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
然后确保AOSP源码下build/core/combo/mac_version.mk文件中
mac_sdk_versions_supported := 10.9 10.10 10.11
后面不要写10.12。

编译源码遇到的问题四:
找不到com.sun.javadoc.ClassDoc
external/doclava/src/com/google/doclava/ClassInfo.java:20:
error: package com.sun.javadoc does not exist import com.sun.javadoc.ClassDoc;external/doclava/src/com/google/doclava/apicheck/XmlApiFile.java:80:
error: cannot find symbol ClassDoc classDoc = null; ^
symbol: class ClassDoc location: class XmlApiFile Note: Some input files use unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. 163 errors
make: *** [out/host/common/obj/JAVA_LIBRARIES/doclava_intermediates/javalib.jar] Error 41
在bash_profile里添加
export ANDROID_JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home








猜你喜欢

转载自blog.csdn.net/u010232308/article/details/53978556
今日推荐