基於SnapDragonBoard410c源碼編譯問題

當我們從高通的網站上面拉取最新的410c代碼時我們可能會遇到以下幾種問題我總結了下分爲以下集中問題主要的問題是由於ubuntu 系統和內存導致,代碼無法通過編譯。

一.clang: error: linker command failed with exit code

解決方法一般是將art/build/Android.common_build.mk文件ifneq ($(WITHOUT_HOST_CLANG),true)改爲ifeq ($(WITHOUT_HOST_CLANG),false)

二.編譯L時回報錯:recipe commences before first targe

gnu make 3.8.1是爲android編譯修改過或者是優化過的, 所以新版本的ubuntu上用的是更高版本的gnu make , 所以導致在編譯時出問題。

三.出現AssertionError錯誤

解決辦法如下:

export JACK_JAR=./out/host/linux-x86/framework/jack.jar

./out/host/linux/x86/bin/jack-admin stop-server

./out/host/linux/x86/bin/jack-admin start-server

四.針對android 選擇user版本進行編譯的時候,會出現proguard錯誤,我們需要知道的事情

1.proguard是做什麼的,他的作用是將java代碼進行混淆的工具
2.因爲proguard是混淆工具,所以android的mk文件也對其支持爲兩種方式:
1.指定不需要混淆的native方法與變量的proguard.flags文件
如:LOCAL_PROGUARD_FLAG_FILES := proguard.flags
2.制定編譯的工程,不要使用代碼混淆的工具進行代碼混淆
如:LOCAL_PROGUARD_ENABLED := disabled
3.不設置,默認使用LOCAL_PROGUARD_ENABLED := full.即將該工程代碼全部混淆
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
在Android項目中用到JNI,當用了proguard後,發現native方法找不到很多變量,原來是被produard優化掉了。所以,在JNI應用中該慎用progurad啊。
解決辦法:
1、在Android.mk中加入一行:
LOCAL_PROGUARD_FLAGS := -include $(LOCAL_PATH)/proguard.flags
2、創建proguard.flag文件,裏面寫入不需要proguard優化的類和方法。例如:
-keep class oms.miracle.mobiletv.broadcast.ServiceContext {
*;
}
五.frameworks/policies/base/PolicyConfig.mk:22: * No module defined for the given PRODUCT_POLICY (android.policy_phone). Stop.

在build/tools/findleaves.sh中的第89行, 

這一句find "${@:0:$nargs}" $findargs -type f -name "$filename" -print | 

改爲find "${@:1:$nargs-1}" $findargs -type f -name "$filename" -print | 

六..frameworks/base/tools/aidl/AST.cpp:10: error: ‘fprintf’ was not declared in this scope的錯誤

下載gcc-4.3和g++-4.3 

apt-get install gcc-4.3 g++-4.3 

  因爲ubuntu 9.10自帶到是gcc 4.4,因此需要重新下載gcc 4.3,最後設置gcc軟連接到gcc 4.3 

進入/usr/bin 

cd /usr/bin 

建個軟連接 

ln -s gcc-4.3 gcc 

ln -s g++-4.3 g++ 

然後進入android目錄下,執行make,就可以了。 

主線代碼則沒有此問題 7.在模擬器上運行編譯好的android

  編譯好android之後,emulator在~/android/out/host/linux-x86/bin 下,ramdisk.img,system.img和userdata.img則在~/android/out/target/product /generic下

$ cd ~/android/out/host/linux-x86/bin

增加環境變量

$ emacs ~/.bashrc.bashrc中新增環境變量,如下

#java 程序開發/運行的一些環境變量

export ANDROID_PRODUCT_OUT=~/android/out/target/product/g eneric

ANDROID_PRODUCT_OUT_BIN=~/android/out/host/linux-x 86/bin

export PATH=${PATH}:${ANDROID_PRODUCT_OUT_BIN}:${ANDROID_ PRODUCT_OUT};

最後,同步這些變化:

$ source ~/.bashrc

$ cd ~/android/out/target/product/generic

  $ emulator -system system.img -data userdata.img -ramdisk ramdisk.img
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章