1. 程式人生 > >Linux下編譯Android原始碼問題彙總

Linux下編譯Android原始碼問題彙總

前言

        本人最近在研究Android原始碼編譯,現將編譯過程中遇到問題彙總於此。

環境

        系統:CentOS 7 x86_64         源    :中科大映象源(詳見這裡

問題彙總

(1)Increase Java heap size

  1. including ./tools/external/fat32lib/Android.mk ...  
  2. Starting build with ninja  
  3. ninja: Entering directory `.'  
  4. [  0% 1/21542] Ensure Jack server is installed and started  
  5. Jack server already installed in "/home/smile/.jack-server"  
  6. Server is already running  
  7. [  0% 2/21542] Building with Jack: out/target/common/obj/JAVA_LIBRARIES/core-all_intermediates/with-local/classes.dex  
  8. FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/core-all_intermediates/with-local/classes.dex.rsp  
  9. Java heap space  
  10. Try increasing heap size with java option '-Xmx<size>'  
  11. Warning: This may have produced partial or corrupted output.  
  12. ninja: build stopped: subcommand failed.  
  13. build/core/ninja.mk:146: recipe for target 'ninja_wrapper' failed  
  14. make: *** [ninja_wrapper] Error 1  
  15. #### make failed to build some targets (08:25 (mm:ss)) ####  
逛了一下stackoverflow找到了問題的解決方法(詳見這裡),在make之前進行heap size配置:
  1. export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m"  
  2. out/host/linux-x86/bin/jack-admin kill-server  
  3. out/host/linux-x86/bin/jack-admin start-server  

(2)找不到標頭檔案

        此類問題本人是通過修改該目錄下的Android.mk檔案,新增標頭檔案路徑解決的,但似乎不是最佳方式,如有更佳的解決方法,麻煩評論告知,謝謝!

(3)原始碼檔案問題

        這個問題好奇怪,本人覺得repo checkout下來的原始碼怎麼會有問題呢?但就遇到過一次奇怪的錯誤,然後開啟錯誤的源頭一看,比較納悶:
  1. ./prebuilts/clang/host/linux-x86/clang-2690385/lib64/clang/3.8/include/avx512vlintrin.h  
  2. static __inline__ __m256i __DEFAULT_FN_ATTRS  
  3. _mm256_permutex2var_epi64 (__m256i __A, __m256i __I, __m256i __B) {  
  4.    return (__m256i) __builtin_ia32_vpermt2varq256_mask ((__v4di) __I  
  5.                     /* idx */ ,  
  6.                     (__v4di) __A,  
  7.                     " (__v4di) __B,    //就是這裡多了一個“"”  
  8.                     (__mmask8) -1);  
  9. }  
        把“ " ”去掉之後就可以編譯通過了。但我還是認為checkout下來的原始碼應該都是經過嚴格核查的,所以如果有知道緣由的朋友麻煩告知一下,謝謝!