AOSP 源码环境设置:
1.MacPro 10.13.6(本人),Xcode 8.1,mac sdk 10.11
(注意事项:Xcode 最好使用8.x,若是9.x或以上请降级,否则会很折腾,至少目前是。
Xcode降级方式:(参考:https://www.jianshu.com/p/bfa10b5c4234)
(1)下载8.x版本的Xcode,官网各个版本下载 https://developer.apple.com/download/more/
(2)j解压下载Xcode后替换掉/Applications目录下已有的Xcode版本
(3)依次执行以下删除操作后重启电脑:
/Library/Preferences/com.apple.dt.Xcode.plist
~/Library/Preferences/com.apple.dt.Xcode.plist
~/Library/Caches/com.apple.dt.Xcode
~/Library/Application Support/Xcode
~/Library/Developer
)
2.安装最新java版本java1.8及以上,如未安装则按以下命令安装:
brew cask info java # 查看java最新版本相关信息
brew cask install java # 安装java最新版本
或 选择安装指定版本:
brew tap caskroom/versions
brew cask info java8
brew cask install java8
3.创建大小写敏感的磁盘映像
shell命令,映像大小稳妥起见最好设置160g以上,以避免在编译时出现映像空间不足的情况
hdiutil create -type SPARSE -fs ‘Case-sensitive Journaled HFS+’ -size 160g ~/AndroidSourceCode/android.dmg
可通过如下命令调整映像大小:
hdiutil resize -size
装在卸载映像方式:
hdiutil attach ~/AndroidSourceCode/android.dmg.sparseimage -mount point /Volumes/android; # 装载
hdiutil detach /Volumes/android # 卸载
为了方便装载及卸载映像,可以把上述代码写进.bashrc或.bash_profile的文件中:
# mount the android file image
function mountAndroid { hdiutil attach ~/AndroidSourceCode/android.dmg.sparseimage -mountpoint /Volumes/android; }
# unmount the android file image
function unmountAndroid { hdiutil detach /Volumes/android; }
4.下载源码
(1)执行如下命令:
mkdir ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
如果repo下载失败,则将上述地址改为:https://aosp.tuna.tsinghua.edu.cn/git-repo
(2)repo下载完后,打开repo文件将其中的:
REPO_URL = ‘https://gerrit.googlesource.com/git-repo’
替换为:REPO_URL = ‘https://aosp.tuna.tsinghua.edu.cn/git-repo’
(3) 执行命令
mountAndroid
cd /Volumes/android
创建工作目录
mkdir AOSP
cd AOSP
(4)初始化仓库(可能会报错,见p1)
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
如果需要某个特定的 Android 版本请点击查询(https://source.android.com/setup/start/build-numbers):
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.1.0_r53
(5)同步源码树(以后只需执行这条命令来同步)
repo sync
(6) 耐心等待...
5.同步完成后,准备编译:
(1)为了确保新安装的二进制文件在解压后会被适当考虑在内,请使用以下命令删除所有以前编译操作的已有输出:
make clobber
(2)设置环境
source build/envsetup.sh
(3) 选择目标编译版本
lunch
lunch后在列出的选项中选择目标编译版本,输入数字序号即可,我选择1。
(4)编译源码
make -j20
在执行以上过程过程中可能会报错,以下是搜集的部分错误信息:
problems:
p1.使用清华大学镜像地址初始化时报错:
$ repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
错误:dyld: Library not loaded: /opt/local/lib/libreadline.6.dylib
解决办法:
将/usr/local/opt/readline/lib/目录下的libreadline.7.0.dylib(是具体版本而定) 拷贝一份,重新命名为libreadline.6.dylib 并拷贝到 /opt/local/lib/ 目录下
p2.找不到对应的MacOSX.sdk,Could not find a supported mac sdk: [“10.10” “10.11” “10.12”]
解决方案:
查看/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs中的sdk版本(若没有则去下载 https://github.com/phracker/MacOSX-SDKs/releases,
下载后解压到SDKs目录中。
.tar.xz 解压方式:
cd 目标文件目录
tar -jxvf MacOSX10.XX.sdk.tar.xz
)
然后在 build/soong/cc/config/x86_darwin_host.go 中
修改内容如下:
darwinSupportedSdkVersions = []string{
"10.10",
"10.11",
"10.12",//添加SDKs中的版本
}
p3.bison问题
[ 0% 310/89583] //external/selinux/ch...eckpolicy yacc policy_parse.y [darwin FAILED: out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.c out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.h BISON_PKGDATADIR=external/bison/data prebuilts/misc/darwin-x86/bison/bison -d --defines=out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.h -o out/soong/.intermediates/external/selinux/checkpolicy/checkpolicy/darwin_x86_64/gen/yacc/external/selinux/checkpolicy/policy_parse.c external/selinux/checkpolicy/policy_parse.y [ 0% 317/89583] //system/core/bootstat:bootstat clang++ bootstat.cpp ninja: build stopped: subcommand failed. 12:58:42 ninja failed with: exit status 1
或类似上面的信息。
解决方案:
Patch [bison fix](https://android-review.googlesource.com/c/platform/external/bison/+/517740) for High Sierra and build bison:
1. cd /Volumes/AOSP/external/bison
2. git cherry-pick c0c852bd6fe462b148475476d9124fd740eba160
3. mm
Replace prebuilt bison binary with patched binary
1. cp /Volumes/AOSP/out/host/darwin-x86/bin/bison /Volumes/AOSP/prebuilts/misc/darwin-x86/bison/Build
2. make -j20
如果mm命令无法执行,需要回去执行以下命令
1. source build/envsetup.sh
2. lunch 之后回到external/bison目录
3. mm
p4.JVM的OOM错误
解决方案:执行命令
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server
6.导入源码到 Android Studio
(1). 编译 idegen
idegen位于 developement/tools/idegen
如果没生成则执行命令生成idegen
进入AOSP源码目录
#初始化命令工具
source build/envsetup.sh
#编译 idegen 模块,生成idegen.jar
mmm development/tools/idegen/
#生成针对 Android 开发工具的配置文件
sudo ./development/tools/idegen/idegen.sh
在执行完上述指令后,会在源码路径下生成下面三个文件
android.ipr:工程相关的设置,比如编译器配置、入口,相关的libraries等。
android.iml:描述了modules,比如modules的路径,依赖关系等。
android.iws:包含了一些个人工作区的设置。
(2)导入源码
打开android studio 接着,选择 File -> open 选中 android.ipr 文件,打开即可
由于 Android 的系统源码非常庞大,一次性导入 Android Studio 的话需要加载非常长的时间,请耐心等待即可。
如果导入过程中发现反复出现 scanning files to index… 则在左侧目录树中找到gen目录,右键(或2指点击) 选择Mark Directory as->Mark as Resource Root 即可
(3)加载完后,接下来进行project及moudle设置,具体详情见:https://www.linuxidc.com/Linux/2015-04/116459.htm
(4) 打开模拟器即可开始调试源码了