资讯专栏INFORMATION COLUMN

Mac下编译Android源码,并导入IntelliJ IDEA进行源码阅读

lingdududu / 3092人阅读

摘要:本文使用清华大学镜像下载源码,具体步骤参考清华大学镜像提供的教程。

macOS High Sierra 版本 10.13.4

Xcode 9.3

aosp分支:android-8.1.0_r20

准备编译环境

具体参考官方文档

安装 jdk8u45 or newer

安装xcode命令行

xcode-select --install

安装编译需要用到的其他包

使用Homebrew安装(官方文档使用的是MacPorts)

brew install gmake libsdl git gnupg

_NOTE_: gmake 可以不用安装,使用xcode自带的就可以

设置可以同时打开的文件数限制,避免编译时超出限制

在 ~/.bash_profile 添加如下语句

# set the number of open files to be 1024
ulimit -S -n 1024

创建区分大小写的APFS宗卷

官方文档创建的是区分大小写HFS+磁盘镜像,我们这边使用区分大小写的APFS卷宗

1. 打开磁盘工具按下图步骤操作:

2. 设置宗卷大小

具体大小根据自己情况设定,配额大小最好不要小于200G

下载源码

具体参考官方文档-下载源码。
本文使用清华大学aosp镜像下载源码,具体步骤参考清华大学aosp镜像提供的教程。

下载repo

mkdir ~/bin
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod +x ~/bin/repo

在~/.bash_profile中将刚才创建的~/bin目录添加进PATH

export PATH=~/bin:$PATH

建立工作目录

mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY

初始化仓库

指定master分支

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest

若要指定android版本,如下:

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

同步源码树

repo sync 或者 repo sync -j4 # 指定并发数
NOTE: repo sync有时会失败,可能要运行多次,才能同步完源码,可以使用以下循环脚本:

#!/usr/bin/env bash
repo sync -j4
while [ $? -ne 0 ]
do
    repo sync -j4
done
编译源码

具体参考官方文档-编译源码

source build/envsetup.sh
lunch aosp_x86_64-eng # 或者直接运行lunch, 在出现的选项中选择编译目标
make -j8 # 根据cpu核心数(物理线程)选择并发数,公式:并发数=cpu核心数(物理线程) x 2

编译过程比较漫长,在我的机子上大概用了2个多小时

编译遇到的问题

mac sdk10.13 不支持编译,如下:

internal error: Could not find a supported mac sdk: ["10.10" "10.11" "10.12"]

[44/44] bootstrap out/soong/.minibootstrap/build.ninja.in
[4/4] out/soong/.bootstrap/bin/minibp out/soong/.bootstrap/build.ninja
[860/861] glob external/clang/utils/TableGen/Android.bp
[54/54] out/soong/.bootstrap/bin/soong_build out/soong/build.ninja
FAILED: out/soong/build.ninja
out/soong/.bootstrap/bin/soong_build -t -b out/soong -d out/soong/build.ninja.d -o out/soong/build.ninja Android.bp
internal error: Could not find a supported mac sdk: ["10.10" "10.11" "10.12"]
ninja: build stopped: subcommand failed.
20:24:32 soong failed with: exit status 1

解决方法
修改AOSP/build/soong/cc/config/x86_darwin_host.go文件,添加10.13支持,如下

darwinSupportedSdkVersions = []string{
    "10.10",
    "10.11",
    "10.12",
    "10.13", // 添加mac sdk 10.13
}

遇到bison错误

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

解决方法
bison打补丁,重新编译(Patch bison fix for High Sierra and build bison:):

cd AOSP/external/bison
git cherry-pick c0c852bd6fe462b148475476d9124fd740eba160
mm
cp AOSP/out/host/darwin-x86/bin/bison AOSP/prebuilts/misc/darwin-x86/bison/
将源码导入IntelliJ IDEA 导入IDEA前 - 配置

运行如下命令,生成IDE工程信息文件 android.iprandroid.iml

source build/envsetup.sh # 在新终端下需要执行这一步
mmma development/tools/idegen
development/tools/idegen/idegen.sh

由于aosp工程很大,在导入IDEA前需要先修改配置:

修改VM内存大小
打开IDEA 菜单栏 Help > Edit Custom VM Options,添加

-Xms1g 
-Xmx5g

修改文件大小限制,打开区分大小写选项

打开IDEA 菜单栏 Help -> Edit custom properties, 添加

idea.max.intellisense.filesize=100000
idea.case.sensitive.fs=true

NOTE: 重启IDEA使配置生效

用IDEA找到AOSP目录下的android.ipr文件,打开AOSP工程,耐心等待,索引需要一定时间

导入IDEA后 - 配置

创建SDK 1.8 (No Libraries),确保代码跳转到是aosp源码,而不是系统安装的JDK,如下

NOTE 注意要删掉Classpath里面所有的jar

删除Modules中的dependencies,只保留1.8 (No Libraries)

将生成的资源文件ID目录out/target/common/R添加进源码目录,避免R资源索引找不到,如图:

最后 Synchronize 整个工程同步下(打开IDEA菜单 File -> Synchronize),稍稍等待后就可以愉快的阅读Android源码了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69461.html

相关文章

  • IntelliJ IDEA 超实用使用技巧分享

    摘要:超实用使用技巧分享长篇前言工欲善其事必先利其器最近受部门的邀请,给入职新人统一培训,发现有很多新人虽然日常开发使用的是,但是还是很多好用的技巧没有用到,只是用到一些基本的功能,蛮浪费这个优秀的。 IDEA 超实用使用技巧分享(长篇) showImg(https://segmentfault.com/img/remote/1460000019977268?w=1280&h=800); 前...

    fevin 评论0 收藏0
  • [转载]使用IntelliJ IDEA开发SpringMVC网站(一)开发环境

    摘要:最近在做某在线教育平台网站的开发,按师兄的建议要用来搞。现在把开发过程中的一些相关经验贴出来。事先声明,请确保和都已经安装好。对于不使用的开发者,可以直接建一个简单的项目。使用的话,请按照图进行操作。 访问GitHub下载最新源码:https://github.com/gaussic/Sp... 文章已针对IDEA 2016做了一定的更新,部分更新较为重要,请重新阅读文章并下载最新源码...

    Ali_ 评论0 收藏0
  • Spring源码导入IDEA

    摘要:项目环境源码地址可以下载压缩包解压到相应文件夹,或者用荡下来,导入步骤在项目的根目录下使用进行预编译这期间要下载一下依赖,时间稍微有点长视网速情况而定,要耐心等待一下。 项目环境 Jdk1.8 、Gradle5.0、IntelliJ IDEA 2018.2.3 Steps spring源码GitHub地址可以下载压缩包解压到相应文件夹,或者用git荡下来,导入步骤: 在项目的根目录...

    inapt 评论0 收藏0
  • [转载]使用IntelliJ IDEA开发SpringMVC网站(二)框架配置

    摘要:为了能够处理中文的请求,再配置一个,以避免请求中文出现乱码情况至此,配置完毕。一般为一些基本的,用于进行相应的页面显示,用于处理网站的请求。现在,需要配置来运行该项目。 摘要讲解如何配置SpringMVC框架xml,以及如何在Tomcat中运行转载请注明出处:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生)。 注:此文承接上一文:使用IntelliJ IDEA开发Sprin...

    baukh789 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<