1.新建Android工程,封装功能java类。
2.选中需要导出的文件夹,右键选中“Export”->"Java(Jar file)"导出jar文件。hello.jar
3.使用dx工具将jar包转换为android 字节码。
命令:dx --dex --output=xx.jar hello.jar
然后把xx.jar放到mnt/sdcard/ 或者其他路径
假如:hello.jar 定义如下:
package com.example.test;
public class Plug {
public int add(int a,int b){
return a+b;
}
public String test(){
return "carter";
}
}
4.使用
private void useDexClassLoader() {
String dexPath = "/mnt/sdcard/xx.jar";
String dexOutputDir = "/data/data/"+getPackageName();
Log.v(TAG, "dexOutputDir="+dexOutputDir);
DexClassLoader pathClassLoader = new DexClassLoader(dexPath, dexOutputDir, null, this
.getClass().getClassLoader());
// dexPath 目标jar或apk的路径 ; dexOutputDirdex 文件路径 ;null 目标类中使用的c/c++库存放的路径
// ; 第四个参数 父装载类
try {
Class class1 = pathClassLoader.loadClass("com.example.test.Plug"); //xx.jar包名+类名
Object object = class1.newInstance();
Class[] params = new Class[2];
params[0] = Integer.TYPE;
params[1] = Integer.TYPE;
Method action = class1.getMethod("add", params);
Integer ret = (Integer) action.invoke(object, 12, 13);
Log.v(TAG, "method : " + action.getName() + ", return :" + ret);
action = class1.getMethod("test");
String aa = (String) action.invoke(object);
Log.v(TAG, "method : " + action.getName() + ", return :" + aa);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
5.这样就实现了从网络下载jar,然后不通过adb install -r 来更新apk了,这种方式适合广告类的插件,因为可以在后台动态加载,不需要弹出更新安装的对话框
android 动态加载sdcard jar的方法
猜你喜欢
转载自zhaweijin.iteye.com/blog/2344707
今日推荐
周排行