在尝试编译一个cm13的rom刷到小米3W上,编译过程中遇到一些问题,在这里记录一下解决方法。
问题一
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:2.10:get (default-cli) on project standalone-pom: Couldn't download artifact: Could not transfer artifact org.cyanogenmod:gello:apk:40 from/to central (https://maven.cyanogenmod.org/artifactory/gello_prebuilds): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
[ERROR] org.cyanogenmod:gello:apk:40
[ERROR]
[ERROR] from the specified remote repositories:
[ERROR] central (https://repo.maven.apache.org/maven2, releases=true, snapshots=false),
[ERROR] central (https://maven.cyanogenmod.org/artifactory/gello_prebuilds, releases=true, snapshots=true)
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
- 问题分析
问题是由于请求不到maven.cyanogenmod.org的证书,导致无法正常下载Gello的apk包。gello是cm自己定制的一个浏览器程序。前段时间CyanogenMod关闭的原有的域名服务器,启用新的域名lineageos.org,但是maven.lineageos.org并不能访问。尝试了网上很多人提到的挂代理, 或者手动下载证书的方式,都不能用。 - 解决方法
法1:
可以跳过gello的编译,gello编译的mk文件位置在源码的
vendor/cm/gello/
直接在源码根路径下执行
mv vendor/cm/gello/Android.mk vendor/cm/gello/Android.mk.bak
再进行编译,就没有报错了,不过这样会导致的一个问题就是新的rom里面没有gello浏览器。
法2:
参考新的LineageOS源码中gello的mk文件,写一个新的mk
https://github.com/LineageOS/android_vendor_cm/blob/cm-14.1/gello/Android.mk
问题二
make: * No rule to make target /home/pavle/android/dirty/out/target/product/cancro/obj/lib/libtime_genoff.so', needed by/home/pavle/android/dirty/out/target/product/cancro/obj/SHARED_LIBRARIES/libandroid_runtime_intermediates/LINKED/libandroid_runtime.so'. Stop. make: * Waiting for unfinished jobs....
- 问题分析
在进行Extract proprietary blobs的操作时,proprietary-files.txt里是有这个libtime_genoff.so的,所以这里不需要再进行编译操作。 - 解决方法
拷贝libtime_genoff.so到out/target/product/cancro/obj/lib路径下,重新编译即可。
问题三
JarJar: /home/buildbot/android/out/target/common/obj/JAVA_LIBRARIES/core-libart_intermediates/classes-jarjar.jar
/home/buildbot/android/out/host/linux-x86/bin/jack-admin: line 27: USER: unbound variable
make: *** [/home/buildbot/android/out/host/linux-x86/framework/jack.jar] Error 1
make: *** Deleting file `/home/buildbot/android/out/host/linux-x86/framework/jack.jar'
make: *** Waiting for unfinished jobs....
这个问题是由于在docker环境下,没有设置USER环境变量。
- 解决方法
export USER=$(whoami)
参考:
Android building no rule to make lib
docker编译android-6.0.0_r25