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