中易网

android项目里的R文件有什么用?注释写的意思是IDE生成的,不会写进apk里面?

答案:2  悬赏:0  
解决时间 2021-01-11 01:32
android项目里的R文件有什么用?注释写的意思是IDE生成的,不会写进apk里面?
最佳答案
R文件里面定义了R类,R类又包含了好几个内部类:drawable, layout, id等等,每个内部类中定义了一系列常量,每个常量标识一个资源:布局、字符串、图片等。
在编译打包生成APK后,是不会有R文件的。因为R文件中的所有常量全部写入了代码中。
如果你有所怀疑,可以用反编译软件看一下,是不是这样。追问R类对开发有影响吗?追答开发的时候当然有影响了,没有它程序都无法编译的。不过,R文件是系统维护的,你把它删除了也不太要紧。只要你的资源文件中没有错误,它能够自动生成,你每次Build时,它会优先生成,然后再开始编译。看一下Android程序编译过程图:



下面一张图,说明资源ID的作用:

追问也就是说,如果R文件里面没有内容,在它building的时候,会根据项目资源在内存中生成编译一个R.class?
我之所以会这样想,是因为资源值并没有写进硬盘里的R.java,编译之后R.java里面还是没有内容,程序正常运行。
如果编译器再编译的时候会在内存中生成编译一个R.class,那么磁盘里的R.java是给开发人员做资源索引的?
我的推测正确吗?追答R文件中定义的是res目录下资源的索引,当然并非所有该目录下的资源都有索引,比如某个layout文件中的某个TextView就可以不要索引。
有索引的资源在编译时可以得到优化,注意这个索引的定义是有规律可循的。
编译时会先生成R.java文件,至于你的电脑上没有是你的Android编程环境存在问题,R.java会继续编译成R.class
开发人员不关心R文件中是如何对资源进行索引的,只是Android编程模型中需要根据资源ID来获取资源对象。
R文件的存在是因为Android将控制及布局写在了xml文件中,R中的资源ID充当了从xml中的资源描述到内存中的资源对象之间的一个桥梁。想想看没有R文件中的资源ID,你如何获取一个布局中的一个button对象?
所以,你的结论“磁盘里的R.java是给开发人员做资源索引的“我也赞同。

全部回答
.R文件里的内容是系统自动生成的,你不用管。里面存的一般都是控件或布局的id,例如你在调用布局是都是R.layout.XX,调用控件R.id.XX,这里使用的都是整形的id,而不会调用控件本身。追问但是我语法无误,R类里面什么都没有。追答看看你的res文件夹中是不是哪个文件有错误,如果有错误就会不生成.R文件,如果无误的话重新编译一下试试。。。追问谢谢您能够抽出时间来帮助我。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
重庆到昆明做汽车要几个小时
查找资料 写出我国各个民族的一些具有代表性
假如企业出现经济纠纷名义上的法人有何责任
双龙汽车-柯兰多是全时四驱吗
锌包钢材料镀锌层的厚度取决于什么?
44千克等于多少斤
c本能直接曾成a本吗
闫学晶主演的电视剧中哪部最好看
赞美驴鱼的诗词
贵州有没有摩天抡?
80后90后买房7大建议 独立还贷未雨绸缪
眼睛受伤一般能评上几级伤残
最不走心男朋友是什么意思
宏图大道地铁到武汉站多长时间
在西双版纳州景洪市开体育彩票店 要怎么联系?
推荐资讯
第四题。老师问:为什么所填答案“visited”要
如何从油脂辨别低,中,高级沉香珠子
摧毁的意思是什么?摧毁的释义是什么啊?
外地邮政储蓄卡可以在上海打流了吗?
魔兽猎人提升GS
苹果Air配置双核i78G内存,Intel HD Graphics
牛狗羊在一个家庭会怎样
中国建设银行(承德县城东支行)地址在什么地方
尼康 35mm 1.8 还是微距头40mm 2.8 单机是D80
轩辕指的是谁他有一项发明和一间大事是什么
以后朋友圈,咱能不这么发吗
艾柱的三者区别
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?