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));
}
}
CLASSPATH是个啥
CLASSPATH直译过来是类路径,是Java环境配置中要设置的一个环境变量,就是.class文件的路径,表示JVM从哪里去寻找要运行的class文件,CLASSPATH = D:\java表示执行java命令时去D:\java目录中去找需要被执行的class文件并运行。