整体步骤如下
1.编写代码编译jar,转换成成dex文件
2.将dex文件放在指定文件目录
3.DexClassLoader 合并 dex文件
4.DexClassLoader 找到新的类并使用
java编写逻辑代码生成jar
简单的代码:
package com.test.huruwo;
public class Test {
public static String test() {
return "鎴戞槸琚悎骞剁殑dex";
}
}
buid生成jar文件
jar转换成dex
进入sdk/build-tools/27.0.3目录 输入命令以下命令
dx --dex --output jar.dex dex.jar
jar.dex是输出文件名,dex.jar是需要转换的jar包的名字
转换完成 复制dex文件到系统根目录下
DexClassLoader合并dex生成新的
private Context mContext;private volatile ClassLoader mLoader = null;
private String INTERCEPTORPATH = "/storage/emulated/0/ui.dex";
XposedHelpers.findAndHookMethod(Application.class, "attach",
Context.class,
new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
mContext = (Context) param.args[0];
mLoader = mContext.getClassLoader();
File dexOutputDir = mContext.getDir("dex", 0);
// 定义DexClassLoader
// 第一个参数:是dex压缩文件的路径
// 第二个参数:是dex解压缩后存放的目录
// 第三个参数:是C/C++依赖的本地库文件目录,可以为null
// 第四个参数:是上一级的类加载器
DexClassLoader mDexClassLoader = new DexClassLoader(INTERCEPTORPATH, dexOutputDir.getAbsolutePath(), null, mLoader);
//寻找合并的class
Class findCls = mDexClassLoader.loadClass("com.test.huruwo.Test");
if(findCls!=null){
LogXUtils.e(XposedHelpers.callStaticMethod(findCls,"test").toString());
}else {
LogXUtils.e("未找到合并的dex");
}
}
});
测试打印合并结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ON8UfnCd-1635837812411)(en-resource://database/1006:1)]