dex文件是Android系统的可执行文件,包含应用程序的全部操作指令以及运行时数据
1、gradle下的打包class文件jar包
task makeReleaseJar(type: Jar, dependsOn: ['assembleRelease']){archiveName = 'monkey.jar'from ('build/intermediates/javac/release/classes', './build/tmp/kotlin-classes/release','classes/rxjava-2.2.2', 'classes/fastjson-1.2.73',"classes/kotlin-stdlib-1.8.22","classes/kotlin-stdlib-common-1.8.22","classes/annotations-13.0","classes/kotlin-reflect-1.7.10","classes/uiautomator-2.2.0")destinationDir = file('build/libs')
}
2、class转化为dex
使用d8命令
d8 --output XXXX/xxx.jar XXXX/XXX.jar
可以得到dex文件的jar包
3、dex文件加载
String path = "/data/local/tmp/monkey.jar";// 加载内部代码try {DexFile dex = new DexFile(path);Enumeration<String> classNames = dex.entries();while (classNames.hasMoreElements()) {String className = classNames.nextElement();try {if(!TextUtils.isEmpty(className)) {Logger.out.println(TAG, String.format("Scan class for %s", className));Class childClazz = Class.forName(className);classes.add(childClazz);}// 不要影响类扫描} catch (ClassNotFoundException e) {Logger.err.println(TAG, String.format("Can't get class instance of %s", className));}}
Java 基础 - 反射