1. 程式人生 > >Android系統原始碼編譯 unsupported reloc 43 和 make update-api

Android系統原始碼編譯 unsupported reloc 43 和 make update-api

Android系統原始碼編譯 unsupported reloc 43 和 make update-api

最近初次接觸到Android系統原始碼的編譯工作,公司內使用的開發板是RK3288平臺的。眾所周知,Android是一個開源、開放的系統平臺,國內的眾多所謂的智慧系統好多都是基於Android平臺裁剪定製而來的。

無可厚非,Android的開放性卻也帶來的一些副作用,各類修改版的Android系統在使用和開發過程中,就會出現各種不同的適配問題,最讓開發者頭疼。

1、Android原始碼編譯環境

根據google官方的要求,推薦使用ubuntu系統平臺、openJDK作為java環境,然後新增相關依賴,基本上都可以配置成功。此處提供兩個參考文章:

2、unsupported reloc 43

在編譯RK3288系統原始碼時候,使用sudo ./mk.sh -s不久,便會出現failed提示編譯失敗;分析問題需要注意的事項:

  • 要使用對應與Android平臺的相應openjdk,比如4.4的要使用openjdk6,而5.1的就需要openjdk7.

  • 再看一下當前使用的jdk是否是需要的版本,也許安裝了多個版本的jdk

    sudo update-alternatives --config java  //選擇序號回車即可  
    sudo update-alternatives
    --config javac //選擇序號回車即可 sudo update-alternatives --config javap //選擇序號回車即可
  • 修改HOST_x86_common.mk

    cd SourcePath/build/core/clang/
    sudo vim ./HOST_x86_common.mk
    
    # 在如下文件中新增 -B$($(clang_2nd_arch_prefix)HOST_TOOLCHAIN_FOR_CLANG)/x86_64-linux/bin \
    
    
    ifeq ($(HOST_OS),darwin)
    
    # nothing required here yet
    
    endif
    
    ifeq ($(HOST_OS),linux)
    CLANG_CONFIG_x86_LINUX_HOST_EXTRA_ASFLAGS := \
    --gcc-toolchain=$(
    $(clang_2nd_arch_prefix)HOST_TOOLCHAIN_FOR_CLANG) \
    --sysroot=$($(clang_2nd_arch_prefix)HOST_TOOLCHAIN_FOR_CLANG)/sysroot \ -B$($(clang_2nd_arch_prefix)HOST_TOOLCHAIN_FOR_CLANG)/x86_64-linux/bin \ -no-integrated-as CLANG_CONFIG_x86_LINUX_HOST_EXTRA_CFLAGS := \ --gcc-toolchain=$($(clang_2nd_arch_prefix)HOST_TOOLCHAIN_FOR_CLANG) \ -no-integrated-as

    對於Android7.0以下的,需要保留-no-integrated-as這句指令。

注:一般情況修改如上HOST_x86_common.mk檔案即可解決此問題,有時候又不行,那麼可以在修改以下兩個檔案:

  • Android.common_build.mk

    
    # 找到Android.common_build.mk檔案,搜尋到 ifneq ($(WITHOUT_HOST_CLANG,true))這句話
    
    cd SourcePath/art/build/
    sudo vim Android.common_build.mk
    
    ## 修改 ifneq ($(WITHOUT_HOST_CLANG,true))中的truefalse
    
    
    # Host.
    
    ART_HOST_CLANG := false
    ifneq ($(WITHOUT_HOST_CLANG),false)
    
    # By default, host builds use clang for better warnings.
    
    ART_HOST_CLANG := true
    endif
  • 替換ld檔案

    
    # 替換原始碼中的ld檔案為Ubuntu系統本身的ld.gold
    
    sudo cp usr/bin/ld.gold SourcePath/prebuilts/gcc/linux-x86/host/x86-linux-glibc2.11-4.6/x86_64-linux/bin/ld

    注意:以上用SourcePath代之你的原始碼所在的根目錄

如此在編譯時候,又會報出failed,javadoc @hide之類的錯誤,提示要麼@hide新增好多註解,要麼就make update-api,若是提示javadoc檔案比較少的話,可以逐一新增@hide註解,但是太多的話,我選擇了make update-api命令。

若是不先處理掉unsupported reloc 43這個錯誤,那麼javadoc這個錯誤,怎麼也處理不好,至少我遇到的情況是這樣的。

希望這點小小筆記,記錄個人編譯過程踩過的坑的同時,能夠幫助其他朋友免去這個坑的困擾。