Mac下Android源码下载与编译


正文:

       本来我是打算借用公司服务器进行android原生源码的编译,不过由于没有root权限,软件方面不能自己想装啥就装啥,更配备不了VPN,所以还是自己先在自己机器上编一波,后面再拷贝过去。

       经过参考了网上很多篇介绍说明,我整理了一下,主要是针对一台完全没有配置过的mac系统,因为坑爹的我发现网上很多文章介绍只介绍了一半,大多都是直接下载就开编了。我下载的是android6.0的编译源码,机器从零开始。mac系统本身就是基于unix系统,原来就配备有

步骤1:下载Xcode,在mac上编译Android源码需要依赖MacOSX10.xx.SDK,这个到APP STORE下载就好。

步骤2:配备javajdk。这个要看你编译的android源码需要的是哪一版本的,通常使用jdk1.7或者1.8就可以了。不过需要注意的是在mac10.10系统以后安装jdk1.7和1.8会有装不进去的情况,这里需要对安装包进行重新打包一下。具体操作方法可参考以下链接:http://blog.csdn.net/daiyelang/article/details/42779645

步骤3:创建磁盘环境。

Step 1. 创建一个大小写敏感的磁盘镜像

$ sudo hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 80g ~/android.dmg

当然,你可能觉得80g不够用,就自己给大点,只要不超过镜像文件所在磁盘的剩余空间就行,还有点就是镜像文件在磁盘上占的空间大小是你向镜像文件里放置的文件的实际大小,而不是上面定义的80g,这个最大空间的大小将来还能更改,所以不必担心弄太大占了空间,如果通过上面已经创建了,你可以通过下面重新设置镜像大小

$ sudo hdiutil resize -size    <new-size-you-want>g  ~/android.dmg.sparseimage

Step 2. 加载分区

$ sudo hdiutil attach ~/android.dmg.sparseimage -mountpoint /Volumes/android

步骤4:设置文件描述符限制

Mac 系统下默认只能同时打开 1024 个文件,而在进行Android源码编译时有可能会超出这个限制,因此需要解除这个限制。在~/.bash_profile中添加以下内容:

ulimit -S -n 1024

步骤5:下载repo文件并修改repo路径

下载repo文件之前,可以先创建一个bin文件夹,用于存放repo脚本。

$ mkdir ~/bin

$ PATH=~/bin:$PATH

然后在命令行中输入下面的命令,下载Repo,并且修改属性:

$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

$ chmod a+x ~/bin/repo

当然啦,通过上面的路径下载是需要VPN的,我们也可以使用清华tuna的镜像源进行下载,那就不用挂VPN啦。编辑repo文件,修改REPO_URL地址为

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

步骤6:下载源码

终于到了激动人心的下载源码的时刻了,双击第一步生成镜像文件,然后可以重命名为AOSP,然后进入镜像文件

cd /Volumes/AOSP/

创建源码目录:

mkdir android-6.0.1

cd android-6.0.1

根据你的Nexus设备,选择代码分支:Source Code Tags and Builds,我的是Nexus 6,支持Nexus 6的分支有android-6.0.1_r06。执行repo init

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.1_r06

完成后,执行下面的命令,

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/

步骤7:下载驱动

下载驱动地址

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

好啦好啦,至此android源码已经下载完毕,可以开始编译了。

编译部分

如果你和我一样,使用的是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

接下来就可以开编啦,至于选择的机型,可以根据这个去找,

https://source.android.com/source/running.html#selecting-device-build


当然了,编译过程还会遇到一些问题,也是需要继续配置的。在这里我在网上整理了一下,大致有如下几个问题。

下载源码遇到的问题一:

这个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

_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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容