Android編譯文件——R文件


R文件:

  當 Android 應用程序被編譯,會自動生成一個 R 類,其中包含了所有 res/ 目錄下資源的 ID。包括布局文件layout,資源文件,圖片(values下所有文件)等。

  在寫java代碼需要用這些資源的時候,你可以使用 R 類,通過子類+資源名或者直接使用資源 ID 來訪問資源。

  R.java文件是活動的Java文件,如MainActivity.java的和資源如strings.xml之間的膠水

class文件:

  能夠被JVM識別、加載並執行的文件格式

class文件的結構:

  1.  8位字節的二進制流文件
  2.  各個數據緊密排列,無間隙,減少了文件體積,加快加載速度
  3.  每個類或者接口單獨占據一個class文件,每個類單獨管理,沒有交叉

  查看:使用010Editor可以查看class文件的詳細信息(注意需要安裝模板)

dex文件:

  能夠被DVM或者Art虛擬機執行並且加載的文件格式。

  dex文件的結構:

  1. 8位字節的二進制流文件
  2. 各個數據緊密排列,無間隙,減少了文件體積,加快加載速度
  3. 整個工程的類信息都存放在一個dex文件中(不考慮dex分包的情況下)

  查看:使用010Editor


 

R.java文件中資源ID的含義:

  資源:layout、string、drawable、raw、style、theme等等

  這些資源都會被賦予獨一無二的ID即資源索引來方便系統訪問。這些資源索引由Android的工具AAPT(Android Asset Packing Tool)生成的八位十六進制整數型。 

            

        分配resource id的主要邏輯實現是在framework/base/tools/aapt/Resource.cpp 和 ResourceTable.cpp

  這些資源會在編譯過程中被打包進APK中(res文件夾)或者被打包成獨立的資源APK包。

  添加資源的命名規則:資源文件只能以小寫字母和下划線做首字母,隨后的名字中只能出現 [a-z0-9_.] 這些字符,否則R.java文件不會自動更新。

 

使用:

  .java代碼:R.xxx(類型).xxx(id)

  XML代碼:通過@xxx即可得到

 

重新編譯生成R文件:

  生成smali文件夾->生成R文件->編譯R.java文件->生成的R文件的jar->生成 dex文件->生成smali文件->替換smali文件->編譯apk,簽名安裝測試

 

class文件與dex文件的比較:

  本質上都是一樣的,都是二進制流文件格式,dex文件是從class文件演變而來的
    class文件存在冗余信息,dex文件則去掉了冗余,並且整合了整個工程的類信息。

 

class文件的作用:class文件的作用是記錄一個類文件的所有信息。

  例如記住了當前類的引用this、父類super等等。class文件記錄的信息往往比java文件多。

dex文件的作用:dex文件的作用是記錄整個工程(通常是一個Android工程)的所有類文件的信息。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM