zoukankan      html  css  js  c++  java
  • MacOS Sierra10.12.4编译Android7.1.1源代码必须跳的坑

    简单介绍

    下载Android7.1.1源代码花费了两天,编译整个源代码相同花费了2天,期间遇到无数个坑。

    如今编译源代码,一旦中间遇到错误,则要又一次開始。

    本文记录编译过程遇到的问题及解决方式,如有编译源代码需求的能够參考本文先把这些坑跳过然后再编译,Mac环境为10.12.4.

    编译步骤

    直接參考官方指导就可以https://source.android.com/source/initializing.html
    这些步骤当中暗含深坑,以下将一一讲解.

    问题1–Mac上大写和小写不敏感

    在Mac上默认是大写和小写不敏感的。即你新建个a目录和A目录。两者会觉得是一个目录,不让其创建第二个A
    因为不舍得在笔记本上开40G空间。我是在移动硬盘上建了个50G的dmg,然后挂载到/Volumes/android路径下。

    能够按官方网档用命令建dmg,也能够用自带的磁盘工具来完毕。打开磁盘工具,然后点击文件–新建:
    http://o9tod1tda.bkt.clouddn.com/16-7-5/Jietu20170408-235325.jpg
    接着把格式选成Mac OS扩展(区分大写和小写,日志式)
    http://o9tod1tda.bkt.clouddn.com/16-7-5/Jietu20170408-235412.jpg
    建好符合格式要求的dmg后,把源代码复制到/Volumes/android就能够了.

    问题2–JDK版本号问题

    编译前请检查JDK版本号,看官网上的说明:

    Java Development Kit (JDK)
    
    Please note, since there are no available supported OpenJDK 8 packages for Ubuntu 14.04, the Ubuntu 15.04 packages must be installed manually. See JDK for Ubuntu LTS 14.04 for precise instructions.
    
    The master branch of Android in AOSP: Ubuntu - OpenJDK 8, Mac OS - jdk 8u45 or newer
    Android 5.x (Lollipop) - Android 6.0 (Marshmallow): Ubuntu - OpenJDK 7, Mac OS - jdk-7u71-macosx-x64.dmg
    Android 2.3.x (Gingerbread) - Android 4.4.x (KitKat): Ubuntu - Java JDK 6, Mac OS - Java JDK 6
    Android 1.5 (Cupcake) - Android 2.2.x (Froyo): Ubuntu - Java JDK 5

    在Mac OS上须要jdk 8u45之后的版本号。假设版本号低于这个,将会报一个错。我索性安装的最新的,直接1.8.0_112

    ~ echo $JAVA_HOME
    /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home

    问题3–fatal error: linux/netfilter/xt_DSCP.h: No such file or directory

    具体报错信息例如以下:

    In file included from out/target/product/generic/obj/STATIC_LIBRARIES/libext4_intermediates/libipt_ECN.c:11:0:
    external/iptables/extensions/../include/linux/netfilter_ipv4/ipt_ECN.h:13:37: fatal error: linux/netfilter/xt_DSCP.h: No such file or directory
     #include <linux/netfilter/xt_DSCP.h>
                                         ^
    compilation terminated.
    make: *** [out/target/product/generic/obj/STATIC_LIBRARIES/libext4_intermediates/libipt_ECN.o] Error 1
    make: *** Waiting for unfinished jobs....

    解决方法,在相应目录下新建xt_DSCP.h文件:

     /* based on ipt_FTOS.c (C) 2000 by Matthew G. Marsh <mgm@paktronix.com>
     * This software is distributed under GNU GPL v2, 1991
     *
     * See RFC2474 for a description of the DSCP field within the IP Header.
     *
     * xt_DSCP.h,v 1.7 2002/03/14 12:03:13 laforge Exp
    */
    #ifndef _XT_DSCP_TARGET_H
    #define _XT_DSCP_TARGET_H
    #include <linux/netfilter/xt_dscp.h>
    #include <linux/types.h>
    
    /* target info */
    struct xt_DSCP_info {
            __u8 dscp;
    };
    
    struct xt_tos_target_info {
            __u8 tos_value;
            __u8 tos_mask;
    };
    
    #endif /* _XT_DSCP_TARGET_H */

    问题4–Unsupported curl

    问题详情:

    Unsupported curl, please use a curl not based on SecureTransport
    Jack server installation not found
    Unsupported curl, please use a curl not based on SecureTransport
    Unsupported curl, please use a curl not based on SecureTransport
    [ 27% 12844/46181] host Java: bouncycastle-host (out/host/common/obj/JAVA_LIBRARIES/bouncycastle-host_intermediates/classes)

    须要又一次装curl:You need install a curl compiled with openssl
    http://curl.haxx.se/download.html下载。然后:

    ./configure --prefix=/usr/local/curl --with-ssl=/usr/local/Cellar/openssl/1.0.2d_1
    make && make install

    然后将/usr/local/curl/bin加入到PATH,通过一下验证是否安装好curl:

    $ curl --version
    curl 7.46.0 (x86_64-apple-darwin15.2.0) libcurl/7.46.0 OpenSSL/1.0.2d zlib/1.2.5
    Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp 
    Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets 

    问题5–jack-admin Out of memory error

    假设是默认设置的话。一定会遇到这个问题,具体log:

    FAILED:Jack server failed to (re)start, try 'jack-diagnose' or see Jack server log
    No Jack server running. Try 'jack-admin start-server'
    ……
    ninja: build stopped: subcommand failed.
    make[1]: *** [ninja_wrapper] Error 1

    參考http://blog.csdn.net/luvzhan/article/details/53282968,解决方法编辑prebuilts/sdk/tools/jack-admin文件,在JACK_SERVER_COMMAND=“…… -cp ……” -cp前加入-Xmx7000m,(7000m为内存大小的一半左右,依据所用的主机配置而定)。
    切记:之后再编译前一定要手动开启jack-admin start-server
    也能够參考官网里的一段:

    If you experience Jack compilations failing on Out of memory error.:
    
    You can improve the situation by reducing the number of jack simultaneous compilations by editing your $HOME/.jack-server/config.properties and changing jack.server.max-service to a lower value and then restarting the server.
    If this is not enough, you may change the arguments used to start the server jvm and force a greater maximum Java heap size (“-Xmx”):
    
    Stop the server using jack-admin stop-server, then:
    If you start the server manually:
    JACK_SERVER_VM_ARGUMENTS="-Xmx2g -Dfile.encoding=UTF-8 -XX:+TieredCompilation" jack-admin start-server
    If you use the jack server in the android tree then
    export ANDROID_JACK_VM_ARGS="-Xmx2g -Dfile.encoding=UTF-8 -XX:+TieredCompilation"
    and restart your build command.

    其实这里是一个意思。我建议直接改动jack-admin文件.

    问题6–error: 'syscall' is deprecated

    MacOSX10.11之后的平台上编译源代码会遇到这个问题,解决方法是从https://github.com/phracker/MacOSX-SDKs下载MacOSX10.11,
    解压复制到/Applications/XCode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs。为了避免下次升级的时候再被删除,能够放到一个自己的目录(/Users/xu/work/git/MacOSX-SDKs/),再给它创建一个软链接:

    sudo ln -s /Users/xu/work/git/MacOSX-SDKs/MacOSX10.11.sdk /Applications/XCode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk

    然后确保AOSP源代码下build/core/combo/mac_version.mk文件里

    mac_sdk_versions_supported := 10.9 10.10 10.11

    后面不要写10.12.

    问题7–不要忘了下载驱动

    假设你想将编译后的镜像安装到手机,编译源代码前不要忘了下载驱动:https://developers.google.com/android/blobs-previewhttps://developers.google.com/android/drivers#angler下载。

    编译核心命令

    1. 手动开启jack-admin(尽量手动开启)
    $ jack-admin kill-server
    
    $ jack-admin start-server
    1. 清空make clobber
    2. 设置环境source build/envsetup.sh
    3. 选择targetlunch
    4. 開始编译make -j4

    參考

    1. http://blog.csdn.net/sinat_26227857/article/details/44078703
    2. 问题4解决方法
    3. 问题5 官网jack-admin
    4. 问题5 csdn博客
    5. 问题6
  • 相关阅读:
    《人月神话》阅读笔记02
    学习进度条-4
    课堂作业3
    MySql 8.0及对应驱动包匹配注意点
    关于Ubuntu中Could not get lock /var/lib/dpkg/lock解决方案
    STM32之ADC配置,ADC_Mode模式理解
    STM32串口中断的方式发送
    RTC 与RCC 之间的关系
    stm32 MDK5软件仿真之查看io口输出
    STM32 PWM学习
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/7373178.html
Copyright © 2011-2022 走看看