【android相关】【问题解决】R.java文件丢失
在进行android开发过程中,有时候,我们会遇到gen文件中R.java丢失的现象。重新build,或者clean工程,close并重新打开Project,但有时也没解决。
这可能是由于不小心把xml文件写错了,或者在编辑xml或者其他文件时候点击了run,或者clear过项目等...,反正,你会发现gen下面的R.java的文件找不到了。
其实,只要xml文件有问题,系统就不会给自动生成R.java文件,因为系统需要参照每个xml里的数据来生成R.java。
当然,如果项目较大,而layou下xml文件有较多的情况下一个一个看也比较麻烦,这时候,尝试选择刷新项目,并eclipse-->Project-->clean,这个时候,Project中可能就会出现红色的错误信息,根据这个去逐个解决之后,一般就可以了。
然后,对着工程点击鼠标右键 选择 Build Project,R.java 文件又回来。这样R.xx.xxx 就能 X 的出来了; 如果还没出来,那么可以尝试从别的工程中拷贝一份R文件过来 然后string.xml里随便改动一下 即可更新R文件; 不过要注意,多检查工程,像文件的命名之类,比如我就曾犯过错误,把layout下的文件命名为haoBooks_Content.xml,结果一直不对,需要全部小写就可以了。
这里记得这个原则:资源的命名规则是不允许有大写字母出现的。另外也不允许下划线_出现。
那么,我们来看看这个文件到底是做什么的。
R.java这个文件是会自动生成的,它记录了一些系统的资源信息,不需要我们自己手动去编辑。
package com.example.haoactivity02; public final class R { public static final class attr { } public static final class dimen { /** Default screen margins, per the Android Design guidelines. Customize dimensions originally defined in res/values/dimens.xml (such as screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here. */ public static final int activity_horizontal_margin=0x7f040000; public static final int activity_vertical_margin=0x7f040001; } public static final class drawable { public static final int ic_launcher=0x7f020000; } public static final class id { public static final int action_settings=0x7f080006; public static final int haobook_content_TextView01=0x7f080005; public static final int haobooks_Text01=0x7f080000; public static final int haobooks_Text02=0x7f080003; public static final int haobooks_button01=0x7f080001; public static final int haobooks_button02=0x7f080002; public static final int haobooks_button03=0x7f080004; } public static final class layout { public static final int activity_hao_books=0x7f030000; public static final int haobooks_content=0x7f030001; } public static final class menu { public static final int hao_books=0x7f070000; } public static final class string { public static final int action_settings=0x7f050001; public static final int app_name=0x7f050000; public static final int haobook_002=0x7f050003; public static final int haobook_content_TextView01=0x7f050002; public static final int haobooks_Text01=0x7f050004; public static final int haobooks_Text02=0x7f050007; public static final int haobooks_button01=0x7f050005; public static final int haobooks_button02=0x7f050006; public static final int haobooks_button03=0x7f050008; } public static final class style { public static final int AppBaseTheme=0x7f060000; /** Application theme. All customizations that are NOT specific to a particular API-level can go here. */ public static final int AppTheme=0x7f060001; } }
R.java文件中默认有attr、dimen、drawable、id、layout、menu、string、style等静态内部类,每个静态内部类分别对应着一种资源,如layout静态内部类对应layout中的界面文件,其中每个静态内部类中的静态常量分别定义一条资源标识符,比如public static final int activity_hao_books=0x7f030000;对应的是layout目录下的activity_hao_books.xml文件。
attr 是控件的属性,一般在res/attr.xml中定义,控件可以使用这里面的资源。目前未定义,所以为空;
dimen 是屏幕属性,记录屏幕水平还是垂直对齐的一些属性;
drawable其实对应了res下的图片文件:ic_launcher.png,不同详述的同名的ic_launcher.png文件在drawable内部类总只有一个icon属性。如果我们在【drawable-*dpi】目录下再添加一幅图片,则内部类中会自动的添加一个icon属性。
id 是需要找的控件的标示符号,我们常会写findViewById(××××),也就是在找这个ID;
layout 里面一般是main.xml,是布局相关文件;
添加资源的命名规则:资源文件只能以小写字母和下划线做首字母,随后的名字中只能出现 [a-z0-9_.] 这些字符,否则R.java文件不会自动更新,并且eclipse会提示错误。
理解了R.java文件中内容的来源,即当开发者在res/目录中任何一个子目录中添加相应类型的文件之后,ADT会在R.java文件中相应的匿名内部类中国自动生成一条静态int类型的常量,对添加的文件进行索引。如果在layout目录下再添加一个新的界面,那么在public static final class layout中也会添加相应的静态int常量。相反当我们在res目录下删除任何一个文件,其在R.java中对应的记录会被ADT自动删除。
R.java文件按除了有自动标示资源的索引功能之外,还有另外一个主要的功能,如果res目录中的某个资源在应用中没有被使用到,在该应用被编译的时候系统就不会把对应的资源编译到该应用的APK包中,这样可以节省Android手机的资源。
对android的基础性文件解释,这个文章有写:http://blog.sina.com.cn/s/blog_b98d87830101c7ee.html,其实刚开始接触的话,看看还是有一定帮助。
相关文章
- 安卓 android studio 报错 The specified Android SDK Build Tools version (27.0.3) is ignored, as it is below the minimum supported version (28.0.3) for Android Gradle
- [Android Pro] java.lang.IllegalStateException: Fragment(XXFragment) not attached to Activity异常
- JAVA Eclipse 创建android xml看不到预览怎么办
- Android开发之旅:android架构
- Android API之android.view.View.MeasureSpec
- macos:安装java 17.0.6(android studio报错:Unable to locate a Java Runtime.)
- Delphi XE之路(8)xe5 android 手机上使用sqlite
- Android应用开发提高系列(3)——《Effective Java 中文版》读书笔记
- Atitit。Js调用后台语言 java c# php swing android swt的方法大总结
- Atitti.java android反编译解决方案-----虚拟机方案
- Android使用协程(Coroutine)优雅的处理多个接口同时请求(网络并发请求)
- Android完美获取状态栏高度、标题栏高度、编辑区域高度的获取
- Android 编译之android.bp详解
- Android-【报错】java.lang.ClassCastException: .MainActivity cannot be cast to java.lang.Runnable
- Android【报错】Failed to resolve: com.android.support:appcompat-v7:28.0.0-alpha【报错】
- Android kotlin 系列讲解(基础篇) kotlin与java的基础语法写法不同
- Android的kotlin的报错提示:java.lang.ArrayIndexOutOfBoundsException: length=0; index=-1
- Java main方法_解释Java中的main方法,及其作用_一个java文件中可包含多个main方法
- 【Java用法】java 8两个List集合取交集、并集、差集、去重并集
- 详解jvm之java类加载机制和类加载器(ClassLoader) 深入理解Java类加载器(ClassLoader) 如何自定义类加载器 深入说明双亲委派 双亲委派模型的破坏者-线程上下文类加载器
- 【Android 安全】DEX 加密 ( Java 工具开发 | 解压 apk 文件 | 加密生成 dex 文件 | 打包未签名 apk 文件 | 文件解压缩相关代码 )
- 【Android 安全】DEX 加密 ( Java 工具开发 | 加密解密算法 API | 编译代理 Application 依赖库 | 解压依赖库 aar 文件 )
- Android开源框架Afinal第一篇——揭开圣女的面纱
- 【Android进阶】5、Android 的断点调试、LogCat 与 Android Lint
- Android 把java文件从一个目录到另一个目录下的父类文件提示:红色波浪线
- 【java】Java 接口(Interface)