在Eclipse中为Android开发:R.java不重新生成
我发现我的R.java从不更新,因此它不包含有关我的新资源的信息,所以我决定删除它,并认为Eclipse会生成一个新的资源。 但是这没有发生,我现在没有R.java。 我怎样才能再生一个?
我正在使用Windows 7。
从其中一个评论:“做项目 – > 清洁是什么导致了我的问题。清洗删除R.java …并由于某种原因插件不重新生成的文件。
本网站build议:
如果你运行一个干净的项目,它应该重新生成所有生成的Java文件,即R.
…和…
在Eclipse中,在“项目”菜单下,是一个自动生成的选项。 这将帮助您每次修改时都生成R.java文件。 Clean …选项也在Project下。
这个网站提出了另一个解
我发现这种情况发生在一个破碎的布局上,一切都炸了。 放松一下,就像你第一次学习C编程时的那个错误,你忘记了一个分号,就会产生一百个错误。 许多恐慌,按下所有的button,使事情变得更糟。
解
- 确保
R.
链接的内容不被破坏。 修复您的XML文件中的所有错误 。 如果ADK中的任何内容被破坏,R
将不会再生。 - 如果你以某种方式碰到东西,并在你的活动中创build了
import android.R
, 请将其删除 。 - 运行项目 – >清理 。 这将删除并重新生成R和BuildConfig。
- 确保Project – > Build Automatically被打勾。 如果没有,则通过
Menu -> Project -> Build Project
手动Menu -> Project -> Build Project
。 - 等待几秒钟,错误消失。
- 如果不起作用,请删除/ gen /文件夹中的所有内容
- 如果仍然不起作用,请尝试右键单击您的项目 – > Android工具 – >修复项目属性 。
- 检查你的* .properties文件(在你的应用程序文件夹的根文件夹中),并确保其中的链接没有损坏。
- 右键单击您的项目>属性> Android 。 查看页面右侧的Project Build Target和Library部分。 您的构build目标应该与AndroidManifest.xml中的目标匹配。 所以如果它在AndroidManifest中被设置为17,那么确保Target Name是Android 4.2。 如果你的图书馆在参考下有一个X,删除并重新添加图书馆,直到有一个绿色的勾号。 如果您移动了一些文件和文件夹,可能会发生这种情况。
如果R不能再生,该怎么办
这通常发生在你有一个破损的XML文件。
- 检查XML文件中的错误,主要在
/res/
文件夹中 - 常见的地方是
/layout/
和/values/
,特别是如果你最近改变了其中的一个 - 检查
AndroidManifest.xml
。 我发现我经常更改一个string,并忘记从AndroidManifest.xml
更改string名称。 - 检查是否安装了
Android SDK Build-tools
。 窗口 – > Android SDKpipe理器 – >工具 – > Android SDK构build工具 - 确保在更新
Android SDK Tools
,还要更新Android SDK Platform-tools
和Android ADK Build-tools
。 如果它们不匹配,构build会失败。 - 如果找不到问题,请右键单击/ gen / – >从本地历史logging恢复… – >打勾R.java – >单击还原 。 即使不解决问题,也会清除额外的错误,使问题更容易find。
我遇到过同样的问题。 当我检查出来,我发现布局下的XML资源的名称没有正确的命名约定。 它有一些大写字母。 所以我重新命名了它,使所有的字母小写和魔法工作。
R.class突然失踪的一个原因是XML文件中存在错误。 例如,当你在myCoolLayout.xml这样的名字中添加一个大写字母的XML文件,这个名字是不允许的。 或者当你有引用不指向现有的文件等
在Eclipse中,只需使用Project – > clean来清理项目。 R.java将被自动(重新)创build。
如果由于某种原因无法正常工作: 请确保您的layout.xml文件不包含错误。 Eclipse在这里似乎有点儿错误:有时它不标记XML或者包浏览器中的错误。 在这种情况下:使用“清洁”后,看看“控制台”或“问题”的看法。 所有的错误应该显示在那里。 修复它们,并重做一个干净的。
注意:修复由于丢失的R文件而导致的错误并不是必要的! 只需修复XML文件和其他项目错误,并使用干净!
快速解决:
清单中的包名称必须与/src
文件夹中的包名称相同, /gen
文件夹包将自动复制。
详细观察:
观察/gen
文件夹中的软件包名称。 在我的情况下,它是不同于/src
文件夹中的。
清单中引用的包是/gen
文件夹的包。
我试图添加一个名为/src
文件夹的包到/gen
文件夹,看看会发生什么,但是这并没有解决问题。 然后我继续删除与/src
文件夹的软件包名称不同的软件包名称。 这个名称不对应于/src
文件夹的软件包,只要我删除它就重新创build。
由于清单中的软件包引用对应于正在被无意中重新创build并且与/src
文件夹中的软件包不对应的软件包引用,因此系统会提示用package = "oldPackage"
重命名package = "srcFolderPackage"
。
我有同样的问题,我终于find了问题:在strings.xml中,我没有保留当创build一个新的Android时默认存在的行<string name="app_name">program-name</string>
项目。 我以为它只用于程序HelloWord,这是原始程序。
但是,AndroidManifest.xml引用了这个值,因此:
=>编译错误;
=> R.java没有更新;
=> ID无法识别…
Android已经在SDK构build工具ADT 22中添加了构build机制。 您只需要执行以下步骤。
- 更新Android SDK工具
- 更新Android SDK平台工具
- 更新Android SDK构build工具
- 将构build工具的path添加到pathvariables。 (path到—-您的DIRECTORY-PATH \ android-sdk \ build-tools)
这将解决这个问题。
如果您的R.java没有生成,其中一个解决scheme是删除名为“blabla.out.xml”的布局文件。
删除此文件后,尝试从菜单项目 – > 清理清理 项目 。
作为Glaux的答案的一个普遍性,如果你在res
目录中有任何错误,R.java可能不会生成 – 即使你清理和重build。 首先解决这些错误。
举个例子:当你添加一个名为“myimage-2.jpg”的图片文件时,系统会认为这是一个错误,因为文件名仅限于字母数字值。 添加任何文件后,在“res”目录中执行刷新,并在控制台窗口中查看输出是否有任何文件名警告。
如果你的操作系统是Ubuntu,我可以提供一些build议:
-
安装或升级ia32-lib:
sudo apt-get upgrade ia32-libs
-
检查你是否有权限的aapt文件夹:
cd ANDROID/adt-bundle-linux-x86_64-20130522/sdk/build-tools/android-4.2.2 chmod 777 aapt
-
启动Eclipse:
sudo eclipse
-
在Eclipse中运行Project – > Clean
您100%在XML文件中有错误 ,但XMLvalidation不会显示错误。 这就是为什么你需要先检查你的XML文件的原因!
在Eclipse中查看问题标签总是很有帮助。 在我的情况下,我得到一个“ android无法解决目标'android-8' ”的错误消息,保持生成R.java。 所以,我将导入的目标更正为我在default.properties文件中使用的目标 ,然后通过Projects-> Clean和瞧!执行清理。 R.java是自动生成的! 希望它有帮助!
清理项目,closuresEclipse,重新打开并启动我的项目,最终使我的R.java重新出现…希望它有帮助
确保你没有import
android.R;
如果res
文件夹中有任何错误,R.java永远不会生成。 例如,在可绘制的子文件夹中有两个同名的文件,一个是icon.png,另一个是icon.html。
您可以在Eclipse控制台日志窗口中看到一些错误:“资源input图标已被定义”。 删除icon.html后,您可以清理或删除gen
文件夹。 你会发现R.java被创build。
我发现在res
文件夹中有大写字母的 任何文件都会产生这个错误。 这发生在我加了一个PNG文件,我忘了。
在阅读了很多post和YouTubevideo之后,我发现我们每个人都有R.java
因为不同的原因而失踪。
以下是我在Eclipse中修复这个问题的方法:
- 在
gen
文件夹中手动创buildR.java并保存。 - 之后,进入项目,然后单击“清理”
将显示以下消息,您的文件将自动被重写:
R.java被手动修改! 恢复到生成的版本!
对我来说,我已经连接了两次v7 appcompat。 无论如何,在Eclipse中,右键单击包资源pipe理器或导航器中的项目名称,转到属性,Android,并取消选中库部分中的任何重复项。 之后您可能需要Build – > Clean。
这显然没有一个最终的答案,但这里是另一个我没有看到这里已经:
(尝试)Team Synchronize之后, R.java
消失了,项目中有冲突解决文件(即thingy.xml.mine
, thingy.xml.r35
等)。 删除它们/解决重新生成的冲突R
我有这个问题。 我偶然删除了这个
xmlns:tools="http://schemas.android.com/tools"
开始在我的XML文件以及我的Java文件中导致整个项目的构build错误。 只要我重新键入我删除了,它再次工作:)
好吧,很显然,这个问题可能有很多原因。 如果您使用的是64位的Linux机器,并且您只是第一次安装ADT,则可能会出现R不会自动生成的问题。 检查控制台选项卡,您可能会看到类似于以下的错误:
'No such file or directory' while attempting to get adb version from '/home/patrick/code/android-sdks/platform-tools/adb'
如果是这种情况,你需要安装ia32-libs,使用如下所示:
sudo apt-get install ia32-libs
详情请看这里: 找不到Android adb
我遇到了这个问题几次。 我发现,如果我没有通过我的应用程序的名称导入包R,例如,如果我的应用程序包名称为example.test,那么我发现我必须导入example.test.R才能访问任何资源。
如果没有导入,那么返回的资源就是我自己包含的默认资源。
有了这个说法,如果你发现你只是得到一个默认的资源列表,然后检查一下,确保你正在导入application_package_name.R而不是android.R。
我的问题是, appcompat
不在我的项目相同的目录。
我用Ant编译我的应用程序时发现了这一点。
另外请确保您拥有最新版本的ADT插件,并打开Android SDKpipe理器将所有SDK工具更新到最新版本。 在Eclipse自己也检查更新。 不匹配的版本导致了我的问题。
我的问题是在一个菜单文件。 如果在菜单文件中引用strings.xml
中不存在的string,编译器似乎不会提醒你。 检查你的菜单XML文件中的item
是否引用你的strings.xml
不存在的任何string。 通常在android:title
。
对于我来说,这个错误是因为我试图复制一个现有的res/menu
而不是用wizard
创build的。
如果您使用Maven,所有这些答案都无法工作。 我的解决scheme是补充
<genDirectory>${project.basedir}/gen</genDirectory>
到android-maven-plugin的configuration部分。
我find了一个解决scheme,为什么R.class不是由Eclipse制作完成后 – 2清理,构build等。
问题在strings.xml中:
<string name="hello">Hello World, HelloAutoComplete!</string> <string name="app_name">HelloAutoComplete</string>
这些在创build项目时默认由Eclipse创build。
当然,你正在改变strings.xml为自己的要求。 有时你清除你的代码中的这两行的string.xmls:
这是AndroidManifest.xml文件中的一个问题:
<application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".HelloAutoComplete" android:label="@string/app_name">
所以它不能与strings.xml进行通信。
我改变了我的布局XML文件名,后来发现XML文件(在这种情况下的小部件提供者)仍然指的是旧的布局XML,它不存在,并且阻止了R类的自动生成/校正。