MacPro 10.13.6 编译 android-8.1.0_r53

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 g ~/AndroidSourceCode/android.dmg.sparseimage

装在卸载映像方式:

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) 打开模拟器即可开始调试源码了

 

你可能感兴趣的:(android,AOSP,MacPro10.13.6,android)