dex文件生成、打包、加载

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 基础 - 反射

CLASSPATH是个啥

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

4、dex文件结构

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值