android 用dx.bat 转换class 为dex

用android sdk里面的dx.bat转换class文件为dex文件

今天在看热更新的时候,实践的时候遇到的问题,转换class文件时出现的问题,所以写个笔记,记录当时出现的错误

1、首先建立一个class 的类(这个类就是需要转换的文件)
在这里插入图片描述

2、运行项目,运行之后在build文件夹下找到该类的class文件
我们看到的,写的都是java为后缀名的文件,运行android 项目之后会在build文件夹下生成相对于的class文件。我们要编译的正式class文件
在这里插入图片描述

最开始的时候是没有找到这个目录,在网上也搜索过答案,但说的都是很模糊,并没有找到相对于的文件夹,后来就一个一个的翻,结果找到了这个文件。可能是由于android studio版本的不同吧,我现在用的版本是 3.2的

3、复制这个文件夹, 记住 一定是要复制 你的类所在的目录的所有文件夹
在这里插入图片描述
所以从com这个文件夹开始复制,复制到你电脑的任何地方,自己得到就行,我是复制到的E盘下面的test文件夹,然后把其他不要的文件删除了,只留下需要转换的文件,如下:
在这里插入图片描述

4、打开dx ,目录是在android 的sdk里面 我的dx的目录 D:\Sdk\build-tools\28.0.3
在这里插入图片描述

复制当前目录,然后在dos窗口 跳转到当前的目录 (如果配置了DEX的环境变量,则不需要当前的操作)

5、配置DEX的环境变量
在这里插入图片描述
还有一步操作
在path 里面配置 D:\Sdk\build-tools\28.0.3
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190116163801617.png
dx.bat 这个运行程序在任何版本都有,所以你只需要找一个版本配置就行了,在dos窗口 可以输入dx 测试一下
在这里插入图片描述

6、转换文件
由于第一次操作,所以出现了一些不明白的问题
第一次尝试:
直接打开dos命令输入:

	 dx --dex --output=E:\test\com\example\mywork\Bugs.dex  E:\test\com\example\mywork\Bugs.class

然后出问题了

 	class name (com/example/mywork/Bugs) does not match path (E:/test/com/example/mywork/Bugs/Bugs.class)
	...while parsing E:/test/com/example/mywork/Bugs/Bugs.class
	1 error; aborting

提示路径不匹配,在网上查找,搜索问题后 没有找到解决的办法。
然后就开始了第二次尝试:

 	dx --dex --output=E:\test\com\example\mywork\Bugs.dex E:\test\com\example\mywork\Bugs

同样的错误

第三次: 把文件换了一个地方,结果还是同样的问题

 dx --dex --output=C:\Users\Admin\Desktop\com\example\mywork\patch.dex C:\Users\Admin\Desktop\com\example\mywork\Bugs.class

第四次:

	 dx --dex --output=E:\test\com\example\mywork\Bugs.dex  E:\test\com\example\mywork\Bugs

看到别人写的文档上没有后缀名,所以我就把后缀名去掉了,最后日志变得不一样了

	java.lang.RuntimeException: E:\test\com\example\mywork\Bugs: file not found
       at com.android.dex.util.FileUtils.readFile(FileUtils.java:51)
       at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:168)
       at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:143)
       at com.android.dx.command.dexer.Main.processOne(Main.java:678)
       at com.android.dx.command.dexer.Main.processAllFiles(Main.java:575)
       at com.android.dx.command.dexer.Main.runMonoDex(Main.java:310)
       at com.android.dx.command.dexer.Main.runDx(Main.java:288)
       at com.android.dx.command.dexer.Main.main(Main.java:244)
       at com.android.dx.command.Main.main(Main.java:95)

好吧,直接提示文件找不到了。 但是我的文件确实在那里

第N次尝试 :切换到E:test目录下

 	dx --dex --output =E:\test\ptach.dex  com\example\mywork\Bugs.class

对了,得到想要的dex文件了

在这里插入图片描述

在这里插入图片描述 终于成功了!

总结一下 命令输出的问题


 	 1、复制这个文件在项目的所有文件夹  也就是从com这个文件夹开始复制
 	 2、配置dx环境变量,这个看个人不配置,可以直接在dos窗口 跳转到SDK里面去直接运行dx命令(没有测试过,暂时不发表意见)
	 3、dx --dex --output =E:\test\ptach.dex  com\example\mywork\Bugs.class   
	 这句话的意思: dx --dex --output = 直接复制   E:\test\ptach.dex
	 这个目录是你转换后文件的存放位置+这个文件的名称     
	 com\example\mywork\Bugs.class  这句话  前面的提示就是没有明白错误日志是什么意思。  
     错误的日志是说  你这个文件一定要在com.example.mywork 这个目录下面,
     意思就是后面那句一定是必须要有com\example\mywork\Bugs.class 这些文字 ,
     当然这个是我遇到的问题的解决办法,网上有很多都不一样,这个要看个人当时是什么情况,多试几次  

找到问题的根源,就能够解决

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值