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

 

更多相关文章

  1. Android源码(7) --- Binder(1) Linux IPC 机制
  2. Android关于buildToolVersion与CompileSdkVersion的区别和关系
  3. [Android]如何在Android(安卓)studio中增加一个selector资源(用于
  4. Android(安卓)PreferenceActivity源码分析与使用总结
  5. android 源码分享
  6. Android(安卓)Framework 源码之旅 —— 正识Binder
  7. android使用groovy环境配置及所遇问题
  8. Android(安卓)系统名字、版本、API level的对应关系
  9. andorid 源码使用

随机推荐

  1. Android开罐头———外部存储与内部存储
  2. Android(安卓)自定义数字选择器,可以根据
  3. adb 5037 端口占用解决
  4. 谷歌官方MVP例子分析
  5. Android圆形图片或者圆角图片的快速实现
  6. Android多窗口的实现 - 开源
  7. android Sqlite3 相同sql 在命令行和数据
  8. Android插入USB设备,自动弹出提示运行apk
  9. 基于 SQLite 开发Android(安卓)studio 的
  10. Flutter 新闻客户端 - 09 详情页展示、分