美文网首页
mac10.12 编译 android-7.0 源码

mac10.12 编译 android-7.0 源码

作者: lesliefang | 来源:发表于2018-03-29 20:49 被阅读285次

    下载源码

    你可以从 google 或 清华的镜像进行同步,android 源码非常大(20 - 50 G)通常都要同步好几天,而且中间还不断出错断开。

    当然你也可以下载或拷贝别人下载好的源码,这样不好的地方是不能同步最新的代码了。如果你下载的源码中有 .repo 文件夹应该也是可以同步最新代码的。

    我从百度网盘 https://pan.baidu.com/s/1ngsZs 下载了 android-7.0.0_r1 源码, 7zip 压缩后 6.73G。

    推荐用 https://github.com/iikira/BaiduPCS-Go 工具下载,我下载时能达到 7M/s , 20 分钟就下载完了。

    编译环境准备

    主要参考官网 https://source.android.google.cn/setup/build/initializing

    mac 文件系统是大小写不敏感的,可能导致编译出错,所以第一步新建一个大写小敏感的磁盘。
    hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 100g ~/android.dmg
    

    源码是 23G, 编译后是 60G, 所以建议新建磁盘至少 80G
    这条命令会在用户主目录下面生成 android.dmg 镜像文件

    new disk image.png

    双击 android.dmg.sparseimage 挂载这个磁盘,把原代码拷贝到新建的磁盘中

    安装依赖
    • JDK1.8 (android7.0 ~ android8.0 需要 JDK1.8)
    • Xcode
    • Xcode command line tools (通过 xcode-select --install 命令安装)
    • 安装 MacPorts, 从这里下载相应版本 https://www.macports.org/install.php
    • 用 MacPort 安装其它依赖库
    POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg
    
    设置最大打开文件数
    ulimit -S -n 1024
    

    编译

    source build/envsetup.sh
    报错
    WARNING: Only bash is supported, use of other shell would lead to erroneous results
    

    直接切换到 bash, 输入 bash 命令

    执行 lunch 
    make -j8   # 开启 8 线程编译
    报错找不到 SDK
    2018-03-28 21:46:59.877 xcodebuild[31923:2630108] Failed to load plugin at: /Users/lesliefang/Library/Application Support/Developer/Shared/Xcode/Plug-ins/Unity4XC.xcplugin, skipping.  Reason for failure: *** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]
    build/core/combo/mac_version.mk:26: none of the installed SDKs (ac_sdk_versions_installed) match supported versions (10.8 10.9 10.10 10.11), trying 10.8
    build/core/combo/mac_version.mk:36: no SDK 10.8 at /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk, trying legacy dir
    build/core/combo/mac_version.mk:40: *****************************************************
    build/core/combo/mac_version.mk:41: * Can not find SDK 10.8 at /Developer/SDKs/MacOSX10.8.sdk
    build/core/combo/mac_version.mk:42: *****************************************************
    build/core/combo/mac_version.mk:43: *** Stop..  Stop.
    

    build/core/combo/mac_version.mk 中配置的 SDK 是

    mac_sdk_versions_supported :=  10.8 10.9 10.10 10.11
    

    而我系统中只有 10.12
    Xcode SDK 路径是

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

    从这里 https://github.com/phracker/MacOSX-SDKs/releases 下载 10.11 扔到 SDK 目录里面就行了

    sdk.png

    继续 make ,编译到 45%报错,内存不足,坑爹啊。所以这里大家务必提前设置

    [ 45% 14861/32771] Building with Jack: out/target/common/ob...VA_LIBRARIES/framework_intermediates/with-local/classes.dex
    FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex.rsp
    Out of memory error (version 1.2-rc4 'Carnac' (298900 f95d7bdecfceb327f9d201a1348397ed8a843843 by android-jack-team@google.com)).
    GC overhead limit exceeded.
    Try increasing heap size with java option '-Xmx<size>'.
    Warning: This may have produced partial or corrupted output.
    [ 45% 14861/32771] Building with Jack: out/target/common/obj/JAVA_LIBRARIES/colorpicker_intermediates/classes.jack
    ninja: build stopped: subcommand failed.
    make: *** [ninja_wrapper] Error 1
    

    我们对prebuilts/sdk/tools/jack-admin文件进行如下修改:
    1.找到如下语句:

    JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME"

    2.将上述语句修改为:

    JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx4096m -cp $LAUNCHER_JAR $LAUNCHER_NAME"

    主要是添加了-Xmx4096m参数,接下来在源码目录下执行如下命令重启jack-admin服务:

    ./prebuilts/sdk/tools/jack-admin stop-server
    ./prebuilts/sdk/tools/jack-admin start-server

    重启完jack-admin服务后,此时再重新执行编译命令就能编译通过ninja了

    compile.png

    编译了1小时18分 编译成功

    执行 emulator 命令启动模拟器
    emualtor.png

    模拟器特别卡,要有耐心

    怎么没有编译 Linux 内核??? prebuilts/qemu-kernel 下面有编译好的内核镜像, 我编译的 target 是 aosp_arm_eng, 不带任何参数启动模拟器使用的内核镜像就是 prebuilts/qemu-kernel/arm/kernel-qemu

    如果你有 Nexus 或 Pixel 手机就可以把 ROM 刷到手机里面了

    android源码编译后在 out/target/product/generic 下生成
    system.img, ramdisk.img,userdata.img 镜像文件。

    • ramdisk.img 是emulator的文件系统
    • system.img 包括了主要的包, 库等文件
    • userdata.img 包括了一些用户数据

    emulator加载这3个镜像文件后, 会把 system 和 userdata 分别加载到 ramdisk 文件系统中的 system 和 userdata 目录下

    接下来我们就可以学习修改 framework 层代码并编译测试了。

    相关文章

      网友评论

          本文标题:mac10.12 编译 android-7.0 源码

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