本文用于总结开发过程中遇到的重要问题分析原因及其解决方案
1、libnativeloader.so" is not accessible for the namespace “classloader-namespace”
原因:安卓高版本中将会限制三方APP访问非NDK公开so库,即不能访问system/lib/lib64下面的私有so库。
两种情况的解决方案:
第一:若是系统system app,该问题的产生原因是app是通过install的,这样不可行,必须将该模块在编译产品后的system/app路径下的该APP文件夹push到系统中的system/app下,重启机器即可。
第二:若是三方APP那么则必须将缺少的so库及其依赖的其它so库都需要拿到,并且用AS打包到APK中
2、signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr -------- Abort message: ‘ubsan: mul-overflow’
#02 pc 000000000000d668 XXX (__ubsan_handle_mul_overflow_minimal_abort+24) (BuildId: 3d2f6d1a0e11ba15fd977f46ff9feab5)
该问题产生原因是:Google对安卓7.0及以上高版本使用了整数溢出排错功能,即 Clang 的 UndefinedBehaviorSanitizer (UBSan) 有符号和无符号整数溢出排错程序,以增强媒体框架。
官方链接:整数溢出排错功能
解决方案:
在Android.bp中添加
sanitize: {
integer_overflow: false,
diag: {
integer_overflow: false,
},
// blacklist: "modulename_blacklist.txt",
},
当然你也可以给自己的模块添加指定的黑名单
3、signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
Line 118: 07-15 16:36:58.983 2380 2380 F DEBUG : #00 pc 00000000000830f0 /apex/com.android.runtime/lib64/bionic/libc.so (abort+160) (BuildId: 21847aa9757f000b0461310a9f5e6e51)
Line 119: 07-15 16:36:58.983 2380 2380 F DEBUG : #01 pc 000000000000d068 /system/bin/LiveStreamer (__cfi_check_fail+24) (BuildId: ae00c237c39a3a67b3647960ced510d4)
Line 119: 07-15 16:36:58.983 2380 2380 F DEBUG : #01 pc 000000000000d068 /system/bin/LiveStreamer (__cfi_check_fail+24) (BuildId: ae00c237c39a3a67b3647960ced510d4)
Line 120: 07-15 16:36:58.983 2380 2380 F DEBUG : #02 pc 000000000000f280 /system/bin/LiveStreamer (__cfi_check+4736) (BuildId: ae00c237c39a3a67b3647960ced510d4)
Line 120: 07-15 16:36:58.983 2380 2380 F DEBUG : #02 pc 000000000000f280 /system/bin/LiveStreamer (__cfi_check+4736) (BuildId: ae00c237c39a3a67b3647960ced510d4)
Line 121: 07-15 16:36:58.983 2380 2380 F DEBUG : #03 pc 0000000000012640 /system/bin/LiveStreamer (AlarmHandler::handleTimeout()+148) (BuildId: ae00c237c39a3a67b3647960ced510d4)
原因:Google在 Android 8.1 中增加了CFI【控制流完整性】安全策略,在 Android 9 中默认启用的
官方:控制流完整性 (CFI)
解决方案:
Android.bp中
sanitize: {
cfi: false,
diag: {
cfi: false,
},
// blacklist: "cfi_blacklist.txt",
},
和第二个问题类似。
未完待续