在Eclipse中开发Android:R.java不能重新生成

Developing for Android in Eclipse: R.java not regenerating

我发现我的R.java永远不会更新,因此它不包含有关我的新资源的信息,因此我决定删除它并认为Eclipse会生成一个新资源。 但这没有发生,我现在没有R.java。 我怎样才能再生一个?

我正在使用Windows  7。

从其中一条评论:"做项目 - >清理是导致问题的原因。清理删除R.java ......无论出于何种原因,插件都没有重新生成文件。"


我发现这种情况发生在我身上,布局破碎,一切都爆炸了。放松一下,这就像你第一次学习编程C时的那个老错误,你忘记了一个分号并产生了一百个错误。许多恐慌,按下所有按钮,让事情变得更糟。

  • 确保R.链接到的任何内容都没有被破坏。修复XML文件中的所有错误。如果ADK中的任何内容被破坏,R将不会重新生成。
  • 如果您以某种方式点击某些内容并在活动中创建了import android.R,请将其删除。
  • 运行项目 - >清理。这将删除并重新生成R和BuildConfig。
  • 确保勾选项目 - >自动构建。如果没有,请通过Menu -> Project -> Build Project手动构建。
  • 等待几秒钟,以便错误消失。
  • 如果它不起作用,删除/ gen /文件夹中的所有内容
  • 如果仍然无效,请尝试右键单击项目 - > Android工具 - >修复项目属性。
  • 检查* .properties文件(在app文件夹的根文件夹中),并确保其中的链接没有损坏。
  • 右键单击项目>属性> Android。查看页面右侧的Project Build Target和Library部分。您的Build Target应该与AndroidManifest.xml中的目标匹配。因此,如果在AndroidManifest中将其设置为17,请确保目标名称为Android 4.2。如果您的库在引用下有X,请删除并重新添加库,直到有绿色勾号。如果您移动了一些文件和文件夹,则可能会发生这种情况。

如果R不再生,该怎么办

当您的XML文件损坏时,通常会发生这种情况。

  • 检查XML文件中的错误,主要是在/res/文件夹中
  • 常见的地方是/layout//values/,特别是如果你最近更改了其中一个
  • 检查AndroidManifest.xml。我发现经常更改字符串而忘记从AndroidManifest.xml更改字符串名称。
  • 检查Android SDK Build-tools是否已安装。窗口 - > Android SDK Manager - >工具 - > Android SDK Build-tools
  • 确保在更新Android SDK Tools时,还要更新Android SDK Platform-toolsAndroid ADK Build-tools。如果它们不匹配,则构建将无提示失败。
  • 如果找不到问题,请右键单击/ gen / - >从本地历史记录恢复... - >勾选R.java - >单击恢复。即使它没有解决问题,它也会清除额外的错误,使问题更容易找到。


本网站建议:

if you run a clean on the project it should regenerate all the generated Java files, namely R.

...和...

In Eclipse, under the Project menu, is an option build automatically.
That would help you build the R.java file everytime modifications are
made. The Clean... option is also there under Project.

该网站建议另一种解决方案


我遇到过同样的问题。当我检查出来时,我发现布局下的XML资源名称没有正确的命名约定。它有一些大写字母。因此我将其重命名为使所有字母都小写并且魔术起作用。


R.class突然丢失的一个原因是XML文件中存在错误。例如,当您添加名称为myCoolLayout.xml的大写字母的XML文件时,这是不允许的。或者当您的引用不指向现有文件等时。


In Eclipse, simply use Project --> clean to clean the project. The
R.java is going to be automaticly (re)-created.

如果由于某种原因,dos不起作用:确保layout.xml文件不包含错误。 Eclipse似乎有点儿错误:有时它不标记XML中的错误,也不标记包浏览器。在这种情况下:使用"干净"后查看"控制台"或"问题"视图。应该在那里显示所有错误。修复它们并重做干净。

注意:由于缺少R文件,无需修复您获得的错误!只需修复XML文件和其他项目错误并使用干净!


快速解决:

清单中的包名称必须与/src文件夹中的包名称相同,/gen文件夹包将自动复制。

详细观察:

观察/gen文件夹中的包名称。在我的情况下,它与/src文件夹中的不同。

清单中引用的包是/gen文件夹的包。

我试图将一个包含/src文件夹名称的包添加到/gen文件夹中,看看会发生什么,但这并没有解决问题。然后我继续删除与/src文件夹的包名称不同的包名称。这个名称与/src文件夹不对应的包在我删除后立即重新创建。

由于清单中的包引用对应于无意义地重新创建并且与/src文件夹中的包不对应的引用,因此提示使用package ="srcFolderPackage"重命名package ="oldPackage"


我遇到了同样的问题,我终于找到了问题:在strings.xml中,我没有保留创建新Android项目时默认存在的行program-name。我以为它只用于程序HelloWord,这是原始程序。

但是,AndroidManifest.xml引用此值,因此:

=>编译错误;

=> R.java没有更新;

=> ID无法识别...


Android已在SDK构建工具ADT 22中添加了构建机制。您只需执行以下步骤即可。

  • 更新Android SDK工具
  • 更新Android SDK平台工具
  • 更新Android SDK构建工具
  • 将构建工具的路径添加到路径变量中。 (路径最多----你的目录-PATH android-sdk build-tools)
  • 这将解决问题。


    如果没有生成R.java,其中一个解决方案是删除名为"blabla.out.xml"的布局文件。

    删除此文件后,尝试从菜单项目 - >清洁中清除项目。


    作为Glaux答案的概括,如果res目录中有任何错误,那么即使您清理并重建,也可能无法生成R.java。首先解决这些错误。

    例如:当您添加一个像"myimage-2.jpg"的图像文件时,系统会将此视为错误,因为文件名仅限于字母数字值。添加任何文件后,在"res"目录上刷新,并在控制台窗口中查看输出是否存在任何文件名警告。


    您100%在XML文件中有错误,但XML验证不会向您显示错误。 这就是您需要首先检查XML文件的原因!


    如果您的操作系统是Ubuntu,我可以提供一些建议:

  • 安装或升级ia32-lib:

    1
    sudo apt-get upgrade ia32-libs
  • 检查您是否拥有aapt文件夹的正确权限:

    1
    2
    cd ANDROID/adt-bundle-linux-x86_64-20130522/sdk/build-tools/android-4.2.2
    chmod 777 aapt
  • 启动Eclipse:

    1
    sudo eclipse
  • 在Eclipse中运行Project - > Clean


  • 查看Eclipse中的Problems选项卡总是有帮助的。在我的情况下,我得到一个"android无法解决目标'android-8'"错误消息,导致R.java无法生成。所以,我将导入的目标更正为我在default.properties文件中使用的目标,然后我通过Projects-> Clean执行了清理,瞧! R.java是自动生成的!希望能帮助到你!


    我发现res文件夹中包含大写字母的任何文件都会产生此错误。我添加并忘记了一个PNG文件,这发生在我身上。


    如果res文件夹中有任何错误,则永远不会生成R.java。例如,在drawable子文件夹中有两个具有相同名称的文件,一个是icon.png,另一个是icon.html。

    您可以在Eclipse控制台日志窗口中看到一些错误,其中显示"已定义资源条目图标"。删除icon.html后,您可以清除或只删除gen文件夹。您会发现R.java已创建。


    确保您没有导入

    android.R;


    清理项目,关闭Eclipse,重新打开它并启动我的项目最终使我的R.java重新出现......希望它有所帮助


    在阅读了很多帖子和YouTube视频后,我发现由于各种原因,我们每个人都缺少R.java

    这是我在Eclipse中修复它的方法:

    • 手动在gen文件夹中创建R.java并保存。
    • 之后转到Project并单击"Clean"

    将显示以下消息,您的文件将自动被重写:

    R.java was modified manually! Reverting to generated version!


    对我来说,我已经连接了两次v7 appcompat。无论如何,在Eclipse中,右键单击Package Explorer或Navigator中的项目名称,转到Properties,Android,并取消选中Library部分中的任何重复项。您可能需要构建 - >之后清理。


    我几次遇到过这个问题。我发现如果我没有通过我的应用程序名称导入包R,例如,如果我的应用程序具有包名称example.test,那么我发现我必须导入example.test.R才能访问任何一个资源。

    如果没有导入,则返回的资源是默认资源,不包括我自己的资源。

    有了这个说,如果你发现你只获得了一个默认资源列表,那么只需检查以确保你导入的是application_package_name.R而不是android.R。


    我有这个问题。不小心我删除了这个

    1
    xmlns:tools="http://schemas.android.com/tools"

    它开始在我的XML文件和我的Java文件中导致整个项目的构建错误。一旦我重新输入我删除的内容,它再次起作用:)


    好的,很明显这个问题可能有很多原因。如果您使用的是64位Linux机器并且您只是第一次设置ADT,则可能会在R未自动生成的情况下遇到此问题。检查控制台选项卡,您可能会看到类似于以下内容的错误:

    1
     'No such file or directory' while attempting to get adb version from '/home/patrick/code/android-sdks/platform-tools/adb'

    如果是这种情况,你需要安装ia32-libs,使用类似的东西:

    1
     sudo apt-get install ia32-libs

    有关详细信息,请参阅此处:未找到Android adb


    显然没有最终答案,但这是我在这里没有看到的另一个:

    在尝试团队同步后,我已经R.java消失了,项目中有冲突解决文件(即thingy.xml.minethingy.xml.r35等)。删除它们/解决重新生成的冲突R


    我的问题是appcompat与我的项目不在同一个目录中。

    我在使用Ant编译应用程序时发现了这一点。


    还要确保您拥有最新版本的ADT插件,并打开Android SDK管理器以将所有SDK工具更新到最新版本。检查Eclipse本身的更新。不匹配的版本给我带来了问题。


    即使您认为一切正常,当似乎没有任何工作正常时,请逐个检查您的XML文件。错误是100%。

    如果您使用XML文件的GUI,一切似乎都可以,但是当您输入文本XML文件时,您会看到里面的混乱。 Eclipse对于这些东西来说有点儿麻烦。

    同时设置BuildAutomatically,因此在修复错误后,您将在生成的文件中包含R.java文件....祝你好运!


    我想强调粪_爷的回答。

    我已经将一个颜色从"listcolor"重命名为"color_list",但我没有发现其他一个布局正在引用它。所以(突然)我的所有R.string.X和R.layout.X都在'R'上失败了。

    最后,我查看了Console窗口并查看了错误。我以为它们都是R没有找到的引用,但实际上,有一个是'找不到'listcolor'。一旦我解决了,其他错误都消失了。

    也许Eclipse的插件的未来版本将允许您重命名这些XML文件中的资源,并将其传播到它的所有引用。


    我有同样的问题。事实证明我有一个循环引用;我更改了布局中引用的字符串名称。

    我做了一个干净的重建,并且没有重新创建R.Java文件。我浪费了两个小时试图找出问题所在。我最终将布局项更改为一些临时文本,执行了一个干净的项目并创建了R.Java文件。


    在我的例子中,没有生成R文件,因为我的res/文件夹中的XML文件具有相同的名称(例如,res/layout/filename.xmlres/values/filename.xml)。

    更改其中一个文件名后,我的R文件由"自动构建"选项再次生成。


    我的问题是在菜单文件中。
    如果菜单文件中引用了strings.xml中不存在的字符串,编译器似乎不会发出警告。检查菜单XML文件中的item是否引用了strings.xml中不存在的任何字符串。通常在android:title


    对我来说,问题是我的res文件夹中有一个带有大写字母的图像,即Image.png。只需把image.png。

    所有降低的情况就是这样!


    我更改了我的布局XML文件名,后来发现XML文件(在这种情况下是小部件提供程序)仍然引用了不存在的旧布局XML,这阻止了R类的自动生成/更正。


    这个问题也提出来了,不幸的是,这里的建议都没有帮助我。在尝试了很多事情之后,我终于找到了发生的事情并希望它可以帮助别人。

    昨天我使用Android SDK Manager下载了很多新东西。之后我更新了Android Eclipse插件。今天,在Eclipse"干净"之后,R文件消失并停止生成。

    原因是,不知何故,可用SDK的列表(在preferences-> android下)是空的。在将其再次指向正确的目录后,它重新加载并显示可用的SDK。当我关闭首选项并尝试其他构建时,一切都恢复正常。

    在附加的图像中,您可以看到已填充的SDK列表。虽然问题正在发生,但它是空的。

    我希望这可以帮助别人!

    Screen with SDKs correctly showing


    我找到了一个解决方案,为什么R.class在再次制作之后不是由Eclipse制作的 - 2清理,构建等等。

    问题出在strings.xml中:

    1
    2
    3
    <string name="hello">Hello World, HelloAutoComplete!</string>

    <string name="app_name">HelloAutoComplete</string>

    默认情况下,这些是在创建项目时由Eclipse创建的。

    当然,您正在根据自己的要求更改strings.xml。有时您从代码中清除string.xmls这两行:

    它在AndroidManifest.xml文件中出现问题:

    1
     

    所以它无法与strings.xml通信。


    对我来说,当我尝试复制现有的res/menu而不是使用wizard创建一个res/menu时,会导致此错误。


    如果您使用Maven,所有这些答案都无法解决。 我的解决方案是添加

    1
    <genDirectory>${project.basedir}/gen</genDirectory>

    到android-maven-plugin的配置部分。


    在我的情况下,在无休止地关闭IDE,清理,尝试构建等之后,问题是我的"res"文件夹中的"无标题文件夹",我可能错误地添加了它。

    我希望Eclipse能够输出这些错误,就像Ant脚本所做的那样:

    1
    [null] invalid resource directory name: /Users/gubatron/workspace.android/my-project/res/untitled folder

    如果使用Lint错误检查程序,它将识别虚假导入"R"。
    一旦XML系统得到了错误的结束,一切都会丢失!


    看起来这里的所有答案都在不断重复,以检查XML中的错误并清理项目。做吧!但是,如果这不起作用怎么办?这对我有用:

    如果您构建一个生成错误R的项目并将其删除,则不会重新生成,因此删除此项目并创建新项目,确保不检查"自动构建",然后您可以将文件夹复制到工作区中然后你清理项目或检查"自动构建",这样它将正确生成你的R.


    这对我有用,其他答案没有:

  • 创建新的Android应用项目,
  • 复制旧目录中的所有文件和文件夹(/ gen除外)并替换!
  • 在Package Explorer中刷新项目根目录。
  • 如果还在那里,再次清洁!

    完成。希望这可以帮助。


  • 不要从strings.xml中删除这两行:

    1
    2
    3
    4
    5
    android:icon="@drawable/icon" android:label="@string/app_name"

    android:name=".HelloAutoComplete"

    android:label="@string/app_name"


    在之前的30个答案都没有帮助之后,我发现了另外一个答案。

    我在strings.xml文件中找到了我的问题,虽然它非常奇怪。
    我把我的应用程序剥离到最低限度,这是唯一暴露出来的东西。我甚至可以在一个全新的空应用程序上复制它。

    在strings.xml文件中,这将编译(并生成R.java文件):

    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <string name="app_name">Test_My_App</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    </resources>

    但是,这不是:

    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <string name="hello_world">Hello world</string>
    <string name="app_name">My_App</string>
    <string name="action_refresh">Refresh</string>
    </resources>

    "有趣"的是我几天前删除了action_settings。从那时起我就清理了我的代码,从未遇到任何问题。我今天在strings.xml文件中添加了额外的字符串,清理完代码后轮子就掉了。
    此外,如果我重新排列相同的3个字符串行的顺序,并清理我的代码,则不会重新生成R.java文件。

    我的解决方案是我的特定问题。

    我希望它有助于某人......


    在我的情况下,我检查了所有以前的解决方案,但没有生成R.我刚刚从菜单文件夹中删除了我的main.xml文件,并再次重新生成它。我不知道为什么,但它现在对我有用......


    当我尝试从SDK源代码构建Support4Demos时,这个问题也发生在我身上。

    在修复资源文件中的一些问题后(例如,"fill_parent"重命名为"match_parent")我发现问题出现在清单文件中:我通过试验取消选中"在AndroidManifest.xml中定义标记""复选框,保存了更改,并且R.java神奇地重新出现。然后我重新检查了该框,保存了文件,并再次重新生成了R.java。

    我想我遇到了Eclipse的缺点。


    首先,检查控制台输出。
    然后,检查您的xml布局文件名称是否仅为小写。
    纠正xml错误。
    检查项目属性 - > Android以获取不熟悉的内容


    主要是R.java文件与.xml文件和Java有关。我们知道XML标签,但是Java也是如此,因此我们需要一个唯一的id来识别标签。

    这里的R.java文件主要与带有Java的XML文件相关,用于获取值。


    如果所有答案都失败,您可以从命令行运行资源生成:
    进入Eclipse项目目录。
    然后跑

    1
    aapt.exe package -f -v -m -S res -J src -M AndroidManifest.xml -I ANDROID_HOME/platforms/android-XXX/android.jar

    只需使用适当的值更改ANDROIRD_HOME和XXX即可。
    您应该获得错误所在的屏幕信息。


    我有同样的问题。

    检查Lint警告后,我看到警告The resource R.string.app_name appears to be unused ...,所以我删除了R.string.app_name

    虽然Lint警告我有关未使用的资源,但AndroidManifest.xml中需要此资源。我在清单中添加了"未使用的资源",一切都恢复正常。

    我希望这对某人有帮助。


    我忘了在declare-styleable标签上设置name属性

    1
    2
    3
    <declare-styleable>
            </attr>
    </declare-styleable>

    我修好了

    1
    2
    3
    <declare-styleable name="Theme">
            </attr>
    </declare-styleable>

    我没有任何错误


    没有错误,但有三个警告我在main.xml中使用了button文本属性的硬编码文本。
    像这样的东西:

    1
    2
    3
    4
    <Button
        android:id="@+id/scan"
        .....
        android:text="Scan" />

    text属性更改为android:text="@string/scan_device"后,立即生成R.java。

    因此,只要其中一个XML文件中出现任何错误/警告,它就会一直发生在我的机器/ Eclipse上。

    但IntelliJ IDEA在警告方面没有这个问题。


    我的AndroidManifest.xml文件有问题,并且没有生成R.java。

    我认为解决方案是检查所有XML文件,无处不在!


    请参阅博客文章Android开发人员提示:重新生成R.java。

    我没有继续发现野外发现的所有可能的问题,而是决定利用盯着代码的经过验证的方法。这样做了一段时间后,我在res文件夹下发现了一些红人。他们是我目前的重新设计工作的遗留物,在出现问题之前我将要删除它。果然,只要我点击它们上面的Del,就会自动重新出现这个糟糕的东西。

    用一句话:从项目中删除所有不需要的文件,从清单文件中删除不需要的代码。


    尝试检查project.properties文件。可能是您的构建路径中的Android JAR文件与那里提到的版本不匹配。

    它解决了我的问题,因为我改变了我的目标。


    还有另一种情况发生在我身上。当我在strings.xml资源文件中添加带撇号的字符串时,就像

    1
    <string name="Today">Returns Today’s date</string>

    通过改变撇号来修复另一种类型的撇号,如


    通过更改文件project.properties解决问题:我添加了android-17的目标。


    如果您的AndroidManifest.xml文件引用了存储在strings.xml中的字符串常量,并且您在strings.xml中重命名了这些字符串,则需要在清单中更改它们,以便为构建创建所有内容。

    对于引用您更改的常量的任何布局.xml文件,也是如此。遗憾的是,Eclipse中的Markers视图和Problems视图都不会告诉您需要修复问题的位置 - 只是他们找不到R.java。如其他答案中所述,请查看控制台以查看修复常量引用所需的位置,然后再次清理项目。


    导致这种情况的原因是,如果您有一个与另一个文件同名的scale9 drawable:

    • img_file.9.png
    • img_file.png

    只需删除其中一个文件即可修复它。


    你可以尝试一件事。

    转到C:\Program Files (x86)\Android\android-sdk\tools>,运行adb kill-server,然后运行adb start-server。这对我有用,我不知道原因:-)。


    几乎可以肯定的是,插入genfile的内容有问题。 Eclipse不够智能,无法显示问题所在,甚至表明存在问题!

    考虑您对任何XML或图像内容所做的最后一次编辑 - 并尝试在必要时手动"回滚"您的更改。

    我发现有时Eclipse出于某种原因不喜欢我的文件名,我必须更改它们。

    因此,逐一添加资源,确保它全部"有效"。当某些东西中断时,只需尝试稍微更改它,直到Eclipse接受它。

    你知道它在genfile出现时有效 - 如果没有问题,它会自动执行。


    我遇到过同样的问题。原因是我的一些资源在他们的文件名中有大写字母。我知道这听起来微不足道,但只是将它们更改为所有小字母修复它并再次检索我的R.java文件。

    希望有所帮助。


    我今天下午第一次遇到这个问题。即使我创建一个新项目,也不会生成R.java。我改变了工作场所,一切都恢复了。


    我在这里看不到它,但我遇到了我的R.java被删除而不是自动重建的问题。

    当我处理switch语句和字符串时,这发生在我身上。 Eclipse建议我将项目合规性更改为1.7,这会立即打破项目(R.java),因为Android无法使用此合规性。

    安慰:

    1
    [2013-03-12 17:26:33 - CrimeAtlas] Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tools > Fix Project Properties.

    我通过使用"修复项目属性"修复了错误,然后像建议的那样浏览日志。我注释掉了文件中的XML,并提到用LinearLayout替换它们。当它被修复时,bam再次出现(如果"自动构建"打开)。然后,如果没有任何错误,我可以更改XML文件。


  • 确保您的XML文件没有任何问题
  • 确保您的清单中没有错误
  • 确保你的字符串没有问题
  • 如果其中任何一个有问题,Eclipse可能无法构建R类...
    解决问题,清洁&amp;重建..


    我在AndroidManifest.xml文件中出错,因此在修复该错误并点击之后

    Run->clean

    它生产我R.java