Android编译问题集锦
一些lib库找不到
1.libncurses.so5问题
Starting build with ninja
ninja: Entering directory `.'
[ 0% 6/4247] target SharedLib: libdl (out/target/product/petrel-p1/obj/SHARED_LIBRARIES/libdl_intermediates/LINKED/libdl.so)
FAILED: /bin/bash -c "prebuilts/clang/host/linux-x86/clang-2690385/bin/clang++ -nostdlib -Wl,-soname,libdl.so -Wl,--gc-sections -shared -Lout/target/product/petrel-p1/obj/lib out/target/product/petrel-p1/obj/lib/crtbegin_so.o out/target/product/petrel-p1/obj/SHARED_LIBRARIES/libdl_intermediates/libdl.o -Wl,--whole-archive -Wl,--no-whole-archive out/target/product/petrel-p1/obj/STATIC_LIBRARIES/libcompiler_rt-extras_intermediates/libcompiler_rt-extras.a prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/../lib/gcc/arm-linux-androideabi/4.9/../../../../arm-linux-androideabi/lib/libatomic.a prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/../lib/gcc/arm-linux-androideabi/4.9/libgcc.a -o out/target/product/petrel-p1/obj/SHARED_LIBRARIES/libdl_intermediates/LINKED/libdl.so -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--build-id=md5 -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--icf=safe -Wl,--hash-style=gnu -Wl,--no-undefined-version -Wl,--no-fix-cortex-a8 -target arm-linux-androideabi -Bprebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/arm-linux-androideabi/bin -Wl,--exclude-libs=libgcc.a -Wl,--version-script=bionic/libdl/libdl.arm.map out/target/product/petrel-p1/obj/lib/crtend_so.o"
prebuilts/clang/host/linux-x86/clang-2690385/bin/clang++: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
[ 0% 6/4247] Docs droiddoc: out/target/common/docs/test-api-stubs
DroidDoc took 9 sec. to write docs to out/target/common/docs/test-api-stubs
ninja: build stopped: subcommand failed.
make: *** [build/core/ninja.mk:149: ninja_wrapper] Error 1
解决方式:
(1)先执行
sudo apt-get install libncurses*
(2)根据显示的库列表安装
jack服务问题
查看问题:
(1)在安卓源代码下的prebuilts/sdk/tools下运行./jack-admin jack-dump 后(大概)反正主要就是运行jack-dump)
(2)按照提示打开一个jack-report.xxx.zip文件,发现其中提示。
譬如:
20:13:50.282: SEVERE: com.android.jack.launcher.ServerLauncher: Server 1 Exception
com.android.jack.server.api.v01.ServerException: './config.properties' must have permission rw------- but have rw-rw-r--
at com.android.jack.server.JackServerImpl.run(JackServerImpl.java:65)
at com.android.jack.launcher.ServerLauncher$3.run(ServerLauncher.java:391)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: './config.properties' must have permission rw------- but have rw-rw-r--
at com.android.jack.server.JackHttpServer.checkAccess(JackHttpServer.java:696)
at com.android.jack.server.JackHttpServer.loadConfig(JackHttpServer.java:513)
at com.android.jack.server.JackHttpServer.<init>(JackHttpServer.java:379)
at com.android.jack.server.JackServerImpl.run(JackServerImpl.java:61)
... 2 more
则根据对应的提示修改权限!
解决方式
1.方式一
修改通信端口,一般这种用于解决多用户的情况。
修改~/.jack-server/config.properties文件
#Fri May 18 14:48:45 CST 2018
jack.server.idle=180
jack.server.max-service.by-mem=1\=2147483648\:2\=3221225472\:3\=4294967296
jack.server.shutdown=21600
jack.server.time-out=7200
jack.server.max-jars-size=104857600
jack.server.service.port=8396 #改其它没有在用的
jack.server.admin.port=8397。 #改其它没有在用的
jack.server.config.version=4
jack.server.max-service=4
jack.server.deep-idle=900
修改~/.jack-settings文件
# Server settings
SERVER_HOST=127.0.0.1
SERVER_PORT_SERVICE=8396 #和config.properties保持一致
SERVER_PORT_ADMIN=8397 #和config.properties保持一致
# Internal, do not touch
SETTING_VERSION=4
2.方式二
停止服务,并删除jack,然后重新编译
./jack-admin kill-server
./jack-admin uninstall-server
3.方式三
解决方式:修改JVM的内存大小,如下修改文件的内容
修改prebuilts/sdk/tools/jack-admin 文件,变量JACK_SERVER_VM_ARGUMENTS,添加参数 -Xmx4096M
JACK_SERVER_VM_ARGUMENTS=”${JACK_SERVER_VM_ARGUMENTS:=-Dfile.encoding=UTF-8 -XX:+TieredCompilation -mx4096M}”
4.方式四
(1)将系统默认的openjdk更改为oracle的jdk
解压jdk-8u261-linux-x64.tar.gz到主目录,然后
在.bashrc中添加
export JAVA_HOME=~/jdk1.8.0_261
export CLASSPATH=.:$JAVA_HOME/lib/
export PATH=$JAVA_HOME/bin:$PATH
export ANDROID_JAVA_TOOLCHAIN=$JAVA_HOME/bin
export LC_ALL=C
(2)需要执行source build/envsetup.sh后再最后执行source .bashrc