Mac OS10.14编译Android9.0源码

作者: 小村医 | 来源:发表于2019-06-23 17:36 被阅读9次

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

    先介绍一下Android源码有关的一些网址:
    源码官网:https://source.android.com/
    搭建编译环境:https://source.android.com/source/initializing.html
    下载源代码:https://source.android.com/source/downloading.html
    编译 Android:https://source.android.com/setup/build/building
    Android镜像:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

    一、设置 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 <new-size-you-want>g ~/android.dmg.sparseimage
    
    • 要载磁盘映像,请运行以下命令:
    hdiutil attach ~/android.dmg -mountpoint /Volumes/android
    
    • 要卸载磁盘映像,请运行以下命令:
    hdiutil detach /Volumes/android
    

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

    2、磁盘工具创建

    image1.png 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,达到过滤效果。

    <excludeFolder url="file://$MODULE_DIR$/.repo"/>
    <excludeFolder url="file://$MODULE_DIR$/abi"/>
    <excludeFolder url="file://$MODULE_DIR$/frameworks/base/docs"/>
    <excludeFolder url="file://$MODULE_DIR$/art"/>
    <excludeFolder url="file://$MODULE_DIR$/bionic"/>
    <excludeFolder url="file://$MODULE_DIR$/bootable"/>
    <excludeFolder url="file://$MODULE_DIR$/out"/>
    <excludeFolder url="file://$MODULE_DIR$/pdk"/>
    <excludeFolder url="file://$MODULE_DIR$/prebuilts"/>
    <excludeFolder url="file://$MODULE_DIR$/sdk"/>
    <excludeFolder url="file://$MODULE_DIR$/system"/>
    <excludeFolder url="file://$MODULE_DIR$/tools"/>
    <excludeFolder url="file://$MODULE_DIR$/trusty"/>
    <excludeFolder url="file://$MODULE_DIR$/vendor"/>
    ...
    

    八、编译中遇到的问题

    
    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

    相关文章

      网友评论

        本文标题:Mac OS10.14编译Android9.0源码

        本文链接:https://www.haomeiwen.com/subject/smziqctx.html