解决动态调用其他APK中的类so加载失败问题
来源:互联网 发布:有没有微信埋雷软件 编辑:程序博客网 时间:2024/04/29 04:03
在一个APK中去加载并调用另一个已安装的APK中类,为了方便描述,调用的APK成为主A,被调用的的B,B中的类需要加载so,B独立运行时so能加载成功,但由A加载调用B时会提示so加载失败,进一步分析是在loadLibrary的时候so查找路径为空,而B自己独立运行时查找路径会包括/data/data/B包名/lib,由此为突破口,发现使用PathLoader加载B中的类时可以传入libraryPath路径,于是传入/data/data/B包名/lib,问题解决
2 被调用类
报错如下图:
import com.test.app.jar.ITest;import dalvik.system.PathClassLoader;import android.os.Bundle;import android.app.Activity;import android.content.Context;public class MainActivity extends Activity { private Context mContext; private ITest mItest; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext = MainActivity.this; Context context; try { context = mContext.createPackageContext("com.test.appb", Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE); String path = context.getApplicationInfo().sourceDir; // error // PathClassLoader loader = new PathClassLoader(path, // mContext.getClassLoader()); // success PathClassLoader loader = new PathClassLoader(path, "/data/data/com.test.appb/lib", mContext.getClassLoader()); Class<ITest> reflect = (Class<ITest>) loader .loadClass("com.test.appb.BeCalledClass"); mItest = (ITest) reflect.newInstance(); if (mItest != null) { mItest.init(mContext); } } catch (Exception e) { e.printStackTrace(); } }}
2 被调用类
package com.test.appb;import android.content.Context;import android.util.Log;import com.test.app.jar.ITest;public class BeCalledClass implements ITest { @Override public void init(Context context) { Log.d("YJS", "ready loadLibrary"); System.loadLibrary("test"); }}
报错如下图:
传入B的lib目录:
PathClassLoader loader = new PathClassLoader(path,"/data/data/com.test.appb/lib", mContext.getClassLoader());ClassLoader的LibraryDirectories中就加入了
/data/data/com.test.appb/lib从而能够加载成功
测试工程下载
0 0
- 解决动态调用其他APK中的类so加载失败问题
- java动态加载指定的类或者jar包反射调用其方法-涉及其他jar中的类就报ClassNotFound问题分析及解决思路
- java动态加载指定的类或者jar包反射调用其方法-涉及其他jar中的类就报ClassNotFound问题分析及解决思路
- so 动态加载---解决sdk过大问题
- Android 加载其他Apk中的类方法
- Android 加载其他Apk中的资源文件
- apk调用so库的问题
- apk调用so库的问题
- android 反射调用其他apk中的方法
- Android DexClassLoader调用其他apk中的函数
- android 反射调用其他apk中的方法
- 解决Linux加载失败问题
- 插件加载带有动态库so的apk处理
- c++ 加载so动态库中的资源
- Android 动态加载其他APK中API的方法
- Android Jni调用so库,加载库失败分析
- libevent-1.4.so.2动态链接库加载失败
- Android动态加载——加载未安装APK中的类&加载已安装APK中的类和资源
- centos下 升级git
- 爬虫入门--按关键字爬取网络图片
- 天纵智能软件快速开发平台商业智能(BI)插件
- Apache Mina
- 重载重写重定义
- 解决动态调用其他APK中的类so加载失败问题
- 支付清算体系例子-下
- Android自定义线程池的编程实战
- 深度卷积网络CNN与图像语义分割
- Android通用流行框架
- mysql创建用户并赋予数据库权限
- ofstream文件输出流把二进制数据写入文件
- Python正则search模块
- oracle查询两个表相同字段的区别