1g内存编译android,Mac OS10.14编译Android9.0源码

作为一个Android开发者没有编译过Android源码怎么能行,如果还没编译过那就赶紧看看下面的内容。

一、设置 Mac OS 编译环境

创建区分大小写的磁盘映像

Mac OS 默认会在不区分大小写的文件系统中运行。Git 并不支持此类文件系统,而且此类文件系统会导致某些 Git 命令(例如 git status)的行为出现异常。因此,建议在区分大小写的文件系统中对 AOSP 源文件进行操作。

1、shell命令创建

可以通过 shell 使用以下命令创建磁盘映像:

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

这将创建一个 .dmg(也可能是 .dmg.sparseimage)文件,该文件在装载后可用作具有 Android 开发所需格式的存储卷。

如果以后需要更大的存储卷,还可以使用以下命令来调整稀疏映像的大小:

hdiutil resize -size g ~/android.dmg.sparseimage

要载磁盘映像,请运行以下命令:

hdiutil attach ~/android.dmg -mountpoint /Volumes/android

要卸载磁盘映像,请运行以下命令:

hdiutil detach /Volumes/android

装载 android 存储卷后,您将在其中开展所有工作。您可以像对待外接式存储盘一样将其弹出(卸载)。

2、磁盘工具创建

e4d5a81003c0

image1.png

e4d5a81003c0

image2.png

设置文件描述符数量上限

在 Mac OS 中,可同时打开的文件描述符的默认数量上限太低,在高度并行的编译流程中,可能会超出此上限。

要提高此上限,请将下列行添加到 ~/.bash_profile 中:

# set the number of open files to be 1024

ulimit -S -n 1024

二、下载Android源码

1、安装 Repo

Repo 是一款工具,可让您在 Android 环境中更轻松地使用 Git

1.要安装 Repo,请执行以下操作:

确保主目录下有一个 bin/ 目录,并且该目录包含在路径中:

mkdir ~/bin

PATH=~/bin:$PATH

2.下载 Repo 工具,并确保它可执行:

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

chmod a+x ~/bin/repo

2、初始化 Repo 客户端

运行 repo init 以获取最新版本的 Repo 及其最近的所有错误更正内容。您必须为清单指定一个网址,该网址用于指定 Android 源代码中包含的各个代码库将位于工作目录中的什么位置。

repo init -u https://android.googlesource.com/platform/manifest

要对“master”以外的分支进行校验,请使用 -b 来指定相应分支。要查看分支列表,请参阅源代码标记和版本。

repo init -u https://android.googlesource.com/platform/manifest -b android-9.0.0_r42

三、下载 Android 源代码

要将 Android 源代码树从默认清单中指定的代码库下载到工作目录,请运行以下命令:

repo sync

四、编译 Android

1、设置环境

使用 envsetup.sh 脚本初始化环境。

source build/envsetup.sh

. build/envsetup.sh

2、选择目标

使用 lunch 选择要编译的目标。确切的配置可作为参数进行传递。例如,以下命令表示针对模拟器进行完整编译,并且启用所有调试功能.

lunch aosp_arm-eng

如果在没有参数的情况下运行,则 lunch 会提示您从菜单中选择目标。要了解所有现有设备的编译配置,请参阅选择设备编译系统一文。

所有编译目标都采用 BUILD-BUILDTYPE 形式,其中 BUILD 是表示特定功能组合的代号。BUILDTYPE 是以下类型之一

user 权限受限;适用于生产环境

userdebug 与“user”类似,但具有 root 权限和调试功能;是进行调试时的首选编译类型

eng 具有额外调试工具的开发配置

五、编译代码

请使用 make 进行所有编译。make 可以使用 -jN 参数处理并行任务。如果您未提供 -j 参数,编译系统便会自动选择其认为对您的系统最佳的并行任务计数。

编译完成后out/target/product/generic 目录生成了三个重要的镜像文件: system.img、userdata.img、ramdisk.img:

system.img:系统镜像,里面包含了Android系统主要的目录和文件,通过init.c进行解析并mount挂载到/system目录下。

userdata.img:用户镜像,是Android系统中存放用户数据的,通过init.c进行解析并mount挂载到/data目录下。

ramdisk.img:根文件系统镜像,包含一些启动Android系统的重要文件,比如init.rc。

六、启动模拟器

source build/envsetup.sh

lunch aosp_x86_64-eng

emulator -partition-size 2562 -memory 2048

七、Android源码导入Android Studio

1、由于Android太大了,所以我们需要给IDE更多的内存:

在Help > Edit Custom VM 中添加:

-Xms1g

-Xmx5g

这两个参数的意思是初始堆内存为1G,最大堆内存为5G,

2、AndroidStudio的类大小配置,在Help -> Edit custom properties中添加:

idea.max.intellisense.filesize=100000

这个参数是定义AS默认的类大小的,默认值是2500,会导致太大的Java文件不能被识别,把这个数调大了之后,就可以导入更大的Java文件。

配置完成后重启IDE

3、源码导入

首先我们还是要执行一遍上述的source build/envsetup.sh 命令和 lunch 命令,当然,如果终端没有关闭的话,可以省略这一步,

然后执行

mmm development/tools/idegen

编译生成idegen.jar,生成完idegen.jar之后,就可以使用命令来扫描生成ipr文件了:

sudo ./development/tools/idegen/idegen.sh

此时在根目录下,就已经生成了android.ipr、android.iml,可以将整个源代码导入AS。

(可选)设置模块过滤

有些不想导入AS的模块,可以通过在android.iml中加入excludeFolder,达到过滤效果。

...

八、编译中遇到的问题

ninja: build stopped: subcommand failed.

14:03:54 ninja failed with: exit status 1

https://github.com/phracker/MacOSX-SDKs/releases

下载sdk 12.0版本,解压,然后copy到

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值