Android找不到so,实际上apk中有的

解决apk中有.so,实际运行时找不到的问题

排查方向:

  • ①、.so安装位置是否实际存在文件(context.getApplicationInfo().nativeLibraryDir
  • ②、当前ARM架构适配配置或者匹配(armeabi-v7a, arm64-v8a, x86_64, ...
  • ③、加载方式是否正确[System.loadLibrary("so_name_but_no_'lib'_prefix")/System.load("so_absolute_path")]
  • ④、Android版本(Android 31+),AGP版本(AGP 4.2.0+)参考下方配置 ↓↓↓
  • ⑤、android:extractNativeLibs=true是否配置(或者DSL选项useLegacyPackaging=true
  • ⑥、库文件没有访问权限
  1. Android .so存储位置
    可以通过如下方式获取so文件的加载位置
String so_path = context.getApplicationInfo().nativeLibraryDir; //查看加载 .so 的位置

举个栗子
系统应用:/system/lib/xxx[/vendor/lib (三方OEM厂商)] 或者 system/app/xxx/lib

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三方应用: data/app/[package-name]/lib
注意:package-name可能会是一串随机数字,可以通过如下adb命令行根据包名查看app的安装位置:

adb shell
pm list package -f |grep com.axxxx

在这里插入图片描述
您可以通过如下代码查找.so文件所在的目录,参考自:

https://blog.csdn.net/wangbaochu/article/details/47805921

    /**
     * The function use to find so path for compatible android system
     * Android OS >= 2.3
     */
    public static String findLibrary1(Context context, String libName) {
   
   
        String result = null;
        ClassLoader classLoader = (context.getClassLoader());
        if (classLoader != null) {
   
   
            try {
   
   
                Method findLibraryMethod = classLoader.getClass().getMethod("findLibrary", new Class<?>[] {
   
    String.class });   
                if (findLibraryMethod != null) {
   
   
                    Object objPath = findLibraryMethod.invoke
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值