日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android 用dx.bat 转换class 为dex

發布時間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

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

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

總結

以上是生活随笔為你收集整理的android 用dx.bat 转换class 为dex的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。