美文网首页Android...
Mac 10.14 编译Android 8.0源码

Mac 10.14 编译Android 8.0源码

作者: violet小咔咔 | 来源:发表于2019-08-24 16:19 被阅读0次

    编译安卓8.0源码,直接开涮就是了。
    我的系统环境:
    Mac10.14.5
    Mac SDK版本:10.11
    make版本3.81
    编译安卓版本:android 8.0.0-r31

    大纲

    1、如何下载安卓源码
    2、如何编译安卓源码
    看着简单,实际上坑是无比的多,现在就为了减少小伙伴们浪费宝贵时间,这里根据mac当前最新版系统给大家来个安卓8.0源码编译的预热。

    1、如何下载安卓源码

    一、安装repo:
    确保您的主目录中有一个 bin/ 目录,并且它包含在您的路径中:

    mkdir ~/bin
    PATH=~/bin:$PATH
    

    二、下载 Repo 启动器,并确保它可执行:

    curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    chmod a+x ~/bin/repo
    

    三、初始化 Repo 客户端 ,挑选一个空目录来安置你的repo工作文件

    mkdir filePackageName
    cd filePackageName
    

    四、运行 repo init 可以获取最新版本的资源,这里如果你需要获取指定版本的资源,需要后面跟上指定的版本号。
    https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds
    点击查看安卓版本列表。

    repo init
    // 指定版本资源,请使用 -b 指定此分支
    repo init -u https://android.googlesource.com/platform/manifest -b android-8.0.0_r31
    // -u 是指定从什么源下载资源,如果google服务受限,这里你可以使用清华源,具体清华源的只需要把-u后面的地址换成清华源的地址就OK。
    repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.0.0_r31
    

    五、要将 Android 源代码树从默认清单中指定的代码库下载到工作目录

    repo sync
    

    这里就是漫长的同步过程。
    sync同步完成后,我们就完成了安卓源码的下载。这里有两个坑:

    • 安卓源码资源较大
    • 因为墙的关系,只能使用第三方镜像,可能受服务稳定性因素影响
      这里插一句嘴,通过谷歌没有拉代码提示time out 的另外一种原因还可能是无权限,需要对谷歌账号授权。https://android.googlesource.com/new-password
      点击此地址按照提示完成授权即可。

    2、如何编译源码

    这里由于笔者没有Ubuntu,穷的只有单位的mac,这里尴尬只会mac环境配置请见谅。
    一、创建文件系统
    可以通过 shell 使用以下命令创建文件系统:

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

    如果后期觉得这个内存小了,可以随时动态命令修改,但是需要先卸载路径

    //卸载挂载文件
    hdiutil detach /Volumes/android
    //重新设置大小
    hdiutil resize -size 150g ~/android.dmg.sparseimage
    //重新挂载关联,之前笔者是在Code根目录下创建的android.dmg
    hdiutil attach ~/Code/android.dmg -mountpoint /Volumes/android
    

    这里有一个坑,笔者在重置大小重启设备后依然没有生效,重复2次操作后才生效。如何验证是否生效。

    // 查看盘符大小
    df -h
    
    df-h命令.png

    二、安装 Xcode 命令行工具
    常规命令如下:

    xcode-select --install
    

    但是大伙在新版xcode会发报错,Mac最新场景下安装Xcode时已经没有Command Line了,需要单独安装。根据提示在使用命令xcode-select --install 安装时最后结果是不能安装该软件。
    解决方案:
    Developer Apple上手动下载对应的Command Line Tools 安装即可。
    三、安装 MacPortsHomebrew 以进行软件包管理。
    如果使用 MacPorts:

    POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg bison
    

    如果使用 Homebrew:

    brew install git gnupg2 bison gmake libsdl
    

    java jdk这些基础依赖小伙伴们肯定有了,就忽略了啊。
    三、设置文件描述符数量上限
    在 macOS 中,可同时打开的文件描述符的默认数量上限太低,在高度并行的编译流程中,可能会超出此上限。要提高此上限,请将下列行添加到 ~/.bash_profile 中:

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

    哈哈,此时此刻激不激动,我们要编译了。这里建议大家全部采用mac 自己的bash 不要用zsh或者其他第三方bash,容易出现莫名其妙的问题,笔者就是被这些莫名其妙的问题搞了一天,最终切回系统bash完美解决.
    四、编译前的最后一道准备,清除数据

    make clobber
    

    这里很多人会遇到下面两个坑:

    • 找不到jdk,这个在根目录的.bash_profile文件中添加
    export ANDROID_JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
    

    第二个问题是找不到对应的MacOSX.sdk,比如找不到MacOSX10.12.sdk,你需要到 https://github.com/phracker/MacOSX-SDKs/releases 下载需要的版本,我这里下载的是MacOSX10.12.sdk,解压复制到如下目录

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

    接下来会碰到第三个问题,log如下如下,可能每个人显示的都不一样的,注意看是否有external/bison/这些log。参考build aosp on Mac OS 10.13 failed来解决

    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
    
        1. make  -j12
    

    如果mm命令无法执行,需要回去执行以下命令

    1. source build/envsetup.sh
    2. lunch 之后回到external/bison目录
    3. mm
    

    五、设置环境

    source build/envsetup.sh
    

    六、lunch
    这里在设备列表里面根据想要刷机的设备自己选择就好了,一般不选择就默认是1.这里建议啊如果是在自己模拟器上跑就是选x86如果是在其他真机中,大部分都是arm.
    七、编译代码

    make -jN
    // 示例:我的电脑是6核心。就是6*2=12
    make -j12
    

    -jN 表示编译并行任务数,这个示电脑情况而定,一般取cpu数的1~2倍就可以
    如果你按照我的设置都设置过,那你遇到的坑,在上面找不到的就一个了,内存不足的坑,哈哈。
    我这里是用Mac SDK10.11编译,如果您的设备SDK不想换就是10.12或者更高版本请参考https://www.jianshu.com/p/1513fc9e1a74
    至此,安卓编译8.0源码篇结束,接下来会抽空写如何debug、查阅、完成安卓源码写入设备。

    相关文章

      网友评论

        本文标题:Mac 10.14 编译Android 8.0源码

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