Android动态加载Jar

定义接口, 把实现接口的部分打包成jar 在

将打包好的jar拷贝到SDK安装目录android-sdk-windows\platform-tools下,DOS进入这个目录,执行命名:

dx --dex --output=test.jar update.jar

核心加载代码


@SuppressLint("NewApi")

private void executeLoadDex() {
// sd中创建的动态加载新文件夹
// public static final String DYNAMIC_FOLDER_PATH = new StringBuilder(
// Environment.getExternalStorageDirectory().getAbsolutePath()).append(File.separator).append("MCC_DYNAMIC")
// .toString();
// // 动态加载jar名称
// public static final String DYNAMICLOAD_JAR_NAME = "update.jar";

File optimizedDexOutputPath = new File(
Constant.DYNAMIC_FOLDER_PATH + File.separator + Constant.DYNAMICLOAD_JAR_NAME);


if (optimizedDexOutputPath.exists()) {
WLog.i("optimizedDexOutputPath.exists()");
/**
* 定义DexClassLoader //第一个参数:是dex压缩文件的路径 //第二个参数:是dex解压缩后存放的目录
* //第三个参数:是C/C++依赖的本地库文件目录,可以为null //第四个参数:是上一级的类加载器
*/
File dexOutputDir = Utils.getContext().getDir("dex", 0);
DexClassLoader cl = new DexClassLoader(optimizedDexOutputPath.getAbsolutePath(),
dexOutputDir.getAbsolutePath(), null, getClassLoader());


try {
Class<?> libClass = cl.loadClass("com.example.javasdk.dynamic.JarILoaderimpl");
WLog.i("optimizedDexOutputPath.exists()" + libClass);
ILoader lib = (ILoader) libClass.newInstance();
Toast.makeText(Utils.getContext(), "CoreService" + lib.sayHi(), Toast.LENGTH_SHORT).show();
WLog.i("CoreService  executeLoadDex lib.startAllTask()");
// lib.startAllTask();
} catch (Exception e) {
WLog.e("CoreServiceException" + e.toString());
e.printStackTrace();
}
}
}     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值