好记性不如烂笔头,好多手写在笔记本上的知识点、技巧都因为记录载体的丢失而丢失了,(来回搬家,东西不好带),用网络做一个备份应该会比较合适,这个系列挺多挺杂的,好多都是不知道什么时候从哪个地方摘抄下来的,权当知识点回顾了,那么下面就开始吧
该文章中的编译不是同一个环境下的,甚至编译的不是一个类型的代码,所以有些问题的解决方案可能有所不同,仅供参考
jar not found
make: ** ERROR 127
解决方案1:
cd /usr/bin
sudo ln -s -f /usr/lib/jvm/jdk1.6.0_30/bin/jar
tip:我的jdk是安装在/usr/lib/jvm/jdk1.6.0_30/目录下的,根据安装目录自己更换
如果提示javah:commond not found,于是照葫芦画瓢,输入命令
cd /usr/bin
sudo ln -s -f /usr/lib/jvm/jdk1.6.0_30/bin/javah
需要注意的是:该方法仅仅修改了jdk1.6.0_30版本的jar,如果是1.7或者是其他版本的需要进行对应的操作
解决方案2:
这个问题主要是在配置的环境路径下没有找到对应的命令,首先我们进入编译环境配置的文档一般为.bashrc(在配置编译环境的时候会有要求,根据自身情况进行修改)在其中进行编译环境配置的时候,对jdk的路径有进行export,需要我们进行确认路径是否正确
/bin/bash: gperf: command not found
make: *** [out/target/product/sp9820e_xtc/obj/GYP/shared_intermediates/blink/ColorData.cpp] Error 127
解决方案
sudo apt-get install gperf
make: *** No rule to make target `out/target/common/obj/JAVA_LIBRARIES/android-support-test_intermediates/javalib.jar', needed by `out/target/common/obj/APPS/ImsCommonTests_intermediates/classes-full-debug.jar'. Stop.
解决方案1
该报错是编译Android代码出现的,删除生成的out目录,重新编译(不是make clean,因为可能是.mk文件的问题,直接清除效果不明显)
解决方案2
修改相关Android.mk(我不会,网上摘了一段方法在下面,可以参考,不建议直接使用)
于是将libcore下的Android.mk文件进行了梳理,发现与JAVA_LIBRARIES以及sqlite同时相关的编译语句是用于测试的,
现在并不需要测试,其中一部分语句如下:
ifeq ($(LIBCORE_SKIP_TESTS),)
#Make the core-tests library.
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(test_src_files)
LOCAL_JAVA_RESOURCE_DIRS := $(test_resource_dirs)
LOCAL_NO_STANDARD_LIBRARIES := true
LOCAL_JAVA_LIBRARIES := core-libart okhttp core-junit bouncycastle
LOCAL_STATIC_JAVA_LIBRARIES := core-tests-support sqlite-jdbc mockwebserver nist-pkix-tests
LOCAL_JAVACFLAGS := $(local_javac_flags)
LOCAL_MODULE := core-tests
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/JavaLibrary.mk
include $(BUILD_STATIC_JAVA_LIBRARY)
endif
于是在libcore\JavaLibraby.mk文件的开头加入了一句export LIBCORE_SKIP_TESTS := false
加入位置摘抄:
The Java files and their associated resources.
common_core_src_files := $(call all-main-java-files-under,dalvik dex dom json luni xml)
core_resource_dirs := $(call all-core-resource-dirs,main)
test_resource_dirs := $(call all-core-resource-dirs,test)
test_src_files := $(call all-test-java-files-under,dalvik dom harmony-tests json luni xml)
#///*** 修改在这里
export LIBCORE_SKIP_TESTS := false
#///*** 修改完毕
ifeq ($(EMMA_INSTRUMENT),true)
ifneq ($(EMMA_INSTRUMENT_STATIC),true)
再次mmm libcore,编译成功!
FAILED: out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex
/bin/bash out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex.rsp
Out of memory error (version 1.3-rc7 'Douarn' (445000 d7be3910514558d6715ce455ce0861ae2f56925a by [email protected])).
解决方案1
顺序执行如下三条命令
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server
然后继续编译即可,ps:此方法仅只适用一次,第二次编译需要重新执行一次
永久修改,参考方案2
解决方案2
vi prebuilts/sdk/tools/jack-admin
1.找到如下语句:
JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME"
2.将上述语句修改为:
JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx4096m -cp $LAUNCHER_JAR $LAUNCHER_NAME"
主要是添加了-Xmx4096m参数,接下来在源码目录下执行如下命令重启jack-admin服务:
./prebuilts/sdk/tools/jack-admin stop-server
./prebuilts/sdk/tools/jack-admin start-server
再重新make就可以了。