代码之家  ›  专栏  ›  技术社区  ›  Marc.2377

构建Android时忽略make-j(jobs)选项(默认为所有内核)

  •  0
  • Marc.2377  · 技术社区  · 7 年前

    我正在构建Android-x86(the nougat-x86 分支)使用此命令序列:

    repo init -u git://git.osdn.net/gitroot/android-x86/manifest -b nougat-x86
    
    repo sync --no-tags --no-clone-bundle
    
    virtualenv2 venv
    
    . venv/bin/activate
    
    . build/envsetup.sh
    
    lunch android_x86_64-userdebug
    
    export ANDROID_JACK_VM_ARGS="-Xmx4g -XX:+TieredCompilation -Dfile.encoding=UTF-8"
    export JACK_SERVER_VM_ARGUMENT=$ANDROID_JACK_VM_ARGS
    export SERVER_NB_COMPILE=1
    export USE_CCACHE=1
    
    LANG=C LC_ALL=C make -j2 iso_img
    

    请注意,我是如何使用option指定两个make作业的 -j2

    clang / clang++ / javac

    这会导致生成失败:

    超出GC开销限制
    尝试使用java选项“Xmx”增加堆大小
    警告:这可能产生了部分或损坏的输出。

    make:**[ninja_包装器]错误1

    make未能构建某些目标


    如何执行 确保我的CPU和RAM没有达到最大值的选项?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Marc.2377    7 年前

    原因:杰克服务器是邪恶的。

    以下解决了ram不足的问题:

    ./prebuilts/sdk/tools/jack-admin kill-server
    rm -rf ~/.jack*    
    export ANDROID_JACK_VM_ARGS="-Xmx4g -XX:+TieredCompilation -Dfile.encoding=UTF-8"
    export SERVER_NB_COMPILE=2
    export JACK_SERVER_VM_ARGUMENT=$ANDROID_JACK_VM_ARGS
    ./prebuilts/sdk/tools/jack-admin install-server prebuilts/sdk/tools/jack-launcher.jar prebuilts/sdk/tools/jack-server-4.*.ALPHA.jar
    ./prebuilts/sdk/tools/jack-admin start-server
    

    the FUCK JACK! project issue #2 PR 5


    不明显的是,构建失败不是因为机器内存不足,而是因为JACK服务器内存不足。事实上,错误消息说。。。

    增加的 使用java选项“Xmx”的堆大小

    (我的重点)。

    此网页位于 http://www.2net.co.uk/blog/jack-server.html 解释。。。

    已安装,忽略交换空间。在16 GiB机器上,超过3 GiB:

    $ java -XshowSettings 2>&1  | grep Heap
        Max. Heap Size (Estimated): 3.47G
    

    $ java -XshowSettings 2>&1  | grep Heap
        Max. Heap Size (Estimated): 1.71G
    

    事实证明,jack服务器需要大约3 GiB来构建一个典型的


    现在

    https://android.googlesource.com/platform/prebuilts/sdk/+/master/tools/README-jack-server.md )说

    配置。属性文件

    它包含Jack服务器配置属性。对的修改 重启服务器后会考虑这些设置。

    jack.server.max-service=<number> 同时插孔的最大数量

    如果您的计算机在编译过程中没有响应:

    通过编辑您的 $HOME/.jack-server/config.properties jack.server。将最大服务设置为较低的值,然后重新启动


    TL;博士:

    jack.server.max-service=2 在里面 $HOME/.jack服务器/config.properties 然后重新启动JACK服务器。