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 這些文字 ,
     當然這個是我遇到的問題的解決辦法,網上有很多都不一樣,這個要看個人當時是什麼情況,多試幾次  

找到問題的根源,就能夠解決

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章