Android native开发严重问题总结

本文用于总结开发过程中遇到的重要问题分析原因及其解决方案

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",
    },

和第二个问题类似。

未完待续

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值