美文网首页Android知识Android开发Android技术知识
Mac编译Android源码掉坑之旅,从MacOS、Docker

Mac编译Android源码掉坑之旅,从MacOS、Docker

作者: RDuwan | 来源:发表于2017-05-30 16:48 被阅读755次

    当你新换了一台mac电脑编译Android源码或者第一次编译Android源码,立刻就会体验到酸爽的各种坑。不管何种方式,在亲爱的祖国,去一个404的网站上下载70G左右的源码(可以选择清华大学和中科大的镜像),然后编译一次需要2-4小时并且需要不停修复环境错误,请保持120分的耐心

    Mac下编译Android源码的三种方式如下

    - 方式一、在Mac OSX 上编译android源码 掉坑指数:5星 操作方法: 链接

    掉坑来源:编译源码过程中,你的mac系统版本跟约定版本有一丁点差异,编译工具链有细微的不同就可能引发编译失败。你就会陷入各种不停修改各种配置错误的境地,甚至有些问题你处于吃螃蟹状态,就算你在google和stackoverflow上寻觅思路也很难找到线索,加上编译源码一次3-4小时的过程,有可能导致你进入崩溃或者放弃。

    - 方式二、利用Docker,并参考大神kylemanna的创造 掉坑指数:3.5星 操作方法:链接

    优势:借助Docker,我们可以不用担心编译环境问题;不论我们的开发机是什么系统,都可以使用Docker创建Ubuntu Image,并且直接在这个Ubuntu系统环境中创建编译所需要的工具链

    掉坑来源: kylemanna的思路不仅非常正确,而且还简化了源码下载过程。但是坑的地方是Docker在实际操作过程中,依然由于mac系统对docker支持的细节处理问题,还是会陷入到不停地填各种配置和工具的坑中,与第一种相比坑会少一些,但是一旦你的细节问题特别多,跟第一种方法的也差不多悲惨。

    方式三:Ubuntu14.04 掉坑指数:1.5星

    优势
    可能是东半球Android源码编译的最好方式

    我们就来详细说说掉坑指数最少方法所需要经历的过程。

    - 1 Mac OS 下安装ubuntu双系统,操作链接

    注意点:

    • a 准备好U盘,U盘在diskutil的命令执行前格式化成FAT32.
    • b mac分出一个安装ubuntu的分区出来,格式化成FAT32,在安装ubuntu的过程中格式化成ext4
    • c 2个必备操作,开机按alt键进入选择磁盘,开机按command+r进入工具模式。
    • d 安装The rEFInd Boot Manager方便操作。安装rEFInd需要关闭os x的安全保护。如下:
    重启 Mac,按住 Command+R 键直到 Apple logo 出现,进入 Recovery Mode
    点击 Utilities > Terminal
    在 Terminal 中输入 csrutil disable,之后回车
    重启 Mac
    
    - 2 解决ubuntu的wifi问题,正常情况下,你会碰到根本在ubuntu上找不到wifi的情况,请参考下面的链接
    - 3 如果我们编译一个比较新的android源码(Android7.0以上或者ASOP master),我们都需要jdk8,ubuntu14.04上默认使用的是openjdk7,我们需要把系统的默认jdk换成openjdk8,请参考下面的链接
    - 4 下载一些必须的依赖工具:
    sudo apt-get install git g++-multilib gcc-multilib 
    lib32ncurses5-dev lib32readline-gplv2-dev
     lib32z1-dev m4 libxml2-utils
    lzma
    

    !!!能安装的全安装,减少编译源码错误后根据提示来安装的次数

    - 5 Android官方编译参考链接。根据官方的编译方式,在我们亲爱的祖国,即使你搭梯子60-70G的源码也得让你非常下的巨不爽,so,推荐清华大学开源站链接 或者中科大开源站链接的镜像方式。
    - 6 以清华大学开源站为例子展示下载源码:
    • a 下载repo工具
    mkdir ~/bin
    PATH=~/bin:$PATH
    curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    chmod a+x ~/bin/repo
    
    • b1 传统初始化方法
    建立工作目录:
    mkdir WORKING_DIRECTORY
    cd WORKING_DIRECTORY
    
    初始化仓库:
    repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
    如果提示无法连接到 gerrit.googlesource.com,请参照git-repo的帮助页面的更新一节。
    
    如果需要某个特定的 Android 版本[参考官网的分支介绍](https://source.android.com/source/build-numbers#source-code-tags-and-builds)
    
    repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.0.1_r1
    同步源码树(以后只需执行这条命令来同步):
    
    repo sync
    
    • b2 建议方式:使用每月更新的初始化包同步aosp主干分支源代码编译
    wget https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
    tar xf aosp-latest.tar
    cd AOSP   # 解压得到的 AOSP 工程目录
    # 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
    repo sync # 正常同步一遍即可得到完整目录
    # 或 repo sync -l 仅checkout代码
    
    - 7 Fuxxxxxing Jack:在编译过程中可能会出现jack权限不够,jackserver无法启动等各种问题
    • 解决办法1:(很可能导致jack启动不起来等:有更好办法的同学请告诉我)
    0 请修改~/.jackserver的权限
    1. 修改 $HOME/.jack-server/config.properties 
    这一行:set jack.server.max-service=1
    2. export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 
    -XX:+TieredCompilation -Xmx2G"
    aosp目录/prebuilts/sdk/tools/jack-admin kill-server
    aosp目录/prebuilts/sdk/tools/jack-admin start-server
    
    • 解决办法2:干掉jack!!!{降低编译速度但是靠谱 无赖选择}
    在build/core/configure_local_jack.mk中关闭那蛋疼的jack 
    把此行变为:
    LOCAL_JACK_ENABLED := #$(strip $(LOCAL_JACK_ENABLED))
    
    - 8 执行AOSP编译过程
    Clean up
    $ make clobber
    Set up environment
    $ source build/envsetup.sh
    Choose a target
    $ lunch aosp_angler-userdebug (输入lunch 然后根据提示来选择,真机nexus6p的代号为angler)
    Build the code
    $ make -j4 (根据cpu的核心线程数来选择-j4 -j8 -j16等等)
    [提示有缺少的工具 比如m4 则apt-get安装后再次执行 
    !!!所以在第四步安装的依赖工具越多越好]
    
    - 9 运行编译源码
    • a 虚拟机运行
      $ emulator
    • b 刷机安装,在aosp源码目录下:在lunch步骤我选择了lunch aosp_angler-userdebug,所以可以顺利刷入nexus6P
    adb reboot bootloader
    fastboot flashall -w
    

    相关文章

      网友评论

        本文标题:Mac编译Android源码掉坑之旅,从MacOS、Docker

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