2017-06-29 47 views
4

看起來輸出文件夾中的apk文件的classes.dex與已安裝的應用程序不同。Android Studio是否壓縮classes.dex文件?

我使用classes.dex文件的一些安全問題,所以通常我解壓縮最終的apk文件,並得到classes.dex文件的信息。但是當我在運行時讀取classes.dex文件時,文件大小是如此不同。 (8MB vs 46KB)

應用程序本身運行良好。有人說Proguard使classes.dex文件更輕,但我關閉了Proguard。 (useProguard false,minifyEnabled false在build.gradle)

有什麼我可以嘗試嗎?先謝謝你。

一句話總結: 的app/build/outputs/apk/app.apk文件由Android Studio構建的classes.dex不同於classes.dex,我可以從Android設備的實際應用程序安裝位置找到。

+0

你的問題不清楚。你想達到什麼目的? – Abhi

+0

@Abhi我添加了總結:)謝謝 – wtkim

回答

1

實際上,android studio會執行轉換,並且您使用'compress'的術語在構建時默認情況下發生。

Android應用程序的編譯過程與其他Java應用程序非常不同。但是,它開始以同樣的方式:你的Java源代碼文件使用javac命令編譯成.class文件:conversion_to_class_file

.class文件包含標準的Oracle JVM的Java字節碼。但Android設備不使用這種字節碼格式。相反,Android有自己獨特的字節碼格式,稱爲Dalvik。 Dalvik字節碼與Oracle JVM字節碼一樣,是理論處理器的機器碼指令。

編譯過程需要將.class文件和任何.jar庫轉換爲包含Dalvik字節碼的單個classes.dex文件。這是通過dx命令完成的: 這是生成classes.dex文件的方式。

conversion_to_dex_file

classes.dex文件,並從應用程序的資源,如圖像和佈局,然後被壓縮成一個zip文件一樣被稱爲Android Package的或.apk文件。這與Android的資產打包工具或aapt完成:

conversion_to_apk_file

你proguard的規則,在構建過程中,有利於

  • 收縮 - 檢測和刪除未使用的類,字段,方法,和屬性。
  • 優化 - 分析和優化方法的字節碼。
  • 混淆 - 使用短無意義的名稱重命名剩餘的類,字段和方法。

希望它能在一定程度上幫助你。
如果您想了解更多關於如何Android應用是建立和運行, Read this.