基于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

猜你喜欢

转载自blog.csdn.net/u013763766/article/details/79071701