android动态加载jar包
来源:互联网 发布:移动网络机顶盒价格表 编辑:程序博客网 时间:2024/05/02 00:43
很多时候我们一些业务逻辑放在jar包中,需要时,在程序中动态加载。
Android中动态加载jar包用的是DexClassLoader类。
DexClassLoader 可以加载jar、dex、apk等类型的文件,即使没安装,也可以加载。
下面来说下实现方法:
一 先写个测试类,然后将这个测试类生成test.jar包
public class TestJar {
public static void exec(){
android.util.Log.e("TestJar", "*** entry TestJar exec");
}
}
二 将生成的jar文件拷贝到android安装目录的platform-tools目录下,执行
dx --dex --output=test.jar testdex.jar
这样做的目的是:将.class的jar编译成Android虚拟机能加载的.dex的jar包。
三 将testdex.jar拷贝到手机上
四 在主程序中加载刚才jar包
String sFileDir = context.getFilesDir().getAbsolutePath() + "/TestJar.jar";
DexClassLoader dexClassLoader = new DexClassLoader(sFileDir,context.getFilesDir().getAbsolutePath(), null, context.getClassLoader());
Class TestJarClazz = null;
try {
TestJarClazz = dexClassLoader.loadClass("com.example.mylibrary.TestJar");
Method method = libProvierClazz.getMethod("exec", new Class[ 0 ]);
if (method != null){
method.setAccessible(true);
method.invoke(null, new Object[]{});
}
} catch (Exception e) {
e.printStackTrace();
}
这样就实现了动态加载jar的目的。
有个问题,如果jar中要调用的函数,需要传入在jar中定义的接口,如下面这样:
public interface ICallBack {
void onCallBack(String sCallBack);
}
public static void addListener(ICallBack pCallBack){
if (pCallBack != null){
pCallBack.onCallBack("test");
}
}
如果要调用jar中的这个函数,该如何实现呢? 见下一篇文章。
Android中动态加载jar包用的是DexClassLoader类。
DexClassLoader 可以加载jar、dex、apk等类型的文件,即使没安装,也可以加载。
下面来说下实现方法:
一 先写个测试类,然后将这个测试类生成test.jar包
public class TestJar {
public static void exec(){
android.util.Log.e("TestJar", "*** entry TestJar exec");
}
}
二 将生成的jar文件拷贝到android安装目录的platform-tools目录下,执行
dx --dex --output=test.jar testdex.jar
这样做的目的是:将.class的jar编译成Android虚拟机能加载的.dex的jar包。
三 将testdex.jar拷贝到手机上
四 在主程序中加载刚才jar包
String sFileDir = context.getFilesDir().getAbsolutePath() + "/TestJar.jar";
DexClassLoader dexClassLoader = new DexClassLoader(sFileDir,context.getFilesDir().getAbsolutePath(), null, context.getClassLoader());
Class TestJarClazz = null;
try {
TestJarClazz = dexClassLoader.loadClass("com.example.mylibrary.TestJar");
Method method = libProvierClazz.getMethod("exec", new Class[ 0 ]);
if (method != null){
method.setAccessible(true);
method.invoke(null, new Object[]{});
}
} catch (Exception e) {
e.printStackTrace();
}
这样就实现了动态加载jar的目的。
有个问题,如果jar中要调用的函数,需要传入在jar中定义的接口,如下面这样:
public interface ICallBack {
void onCallBack(String sCallBack);
}
public static void addListener(ICallBack pCallBack){
if (pCallBack != null){
pCallBack.onCallBack("test");
}
}
如果要调用jar中的这个函数,该如何实现呢? 见下一篇文章。
0 0
- android动态加载jar包
- android动态加载jar包
- Android如何动态加载jar包
- 深入浅出Android动态加载jar包技术
- android动态加载jar包中的图片
- 深入浅出Android动态加载jar包技术
- java动态加载jar包
- java动态加载jar包
- java动态加载jar包
- JAVA动态加载JAR包
- Java 动态加载jar包
- android 动态加载jar
- android动态加载jar
- Android动态加载jar
- android动态加载jar
- android动态加载jar
- Android动态加载Jar
- Android动态加载JAR包的实现方法
- RotateAnimation类:旋转变化动画类,自定义控件通过rotateAnimation实现特效
- hibernate configration 双向关联
- 2015-电气-李杰
- MFC 以及多线程初探
- Google 2016 面试题2 | 不构造树的情况下验证先序遍历
- android动态加载jar包
- APP接口设计安全问题
- VB作业
- 记录---ORACLE 中的 ROW_NUMBER() OVER() 分析函数的用法
- 整理何凯明去雾算法代码优化
- 使用 Docker 搭建 Java Web 运行环境
- Google 2016 面试题 | 数组补丁
- 那一年我在学USB的PCB走线
- 显卡