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
修改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=$(
對於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))中的true 為false # 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
這個錯誤,怎麼也處理不好,至少我遇到的情況是這樣的。
希望這點小小筆記,記錄個人編譯過程踩過的坑的同時,能夠幫助其他朋友免去這個坑的困擾。