提问



我刚下载并安装了新的Android SDK。我想创建一个简单的应用程序来测试它。


该向导创建了此代码:


package eu.mauriziopz.gps;

import android.app.Activity;
import android.os.Bundle;

public class ggps extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}


但Eclipse给了我错误[44]



  R无法解决



在线


setContentView(R.layout.main);


为什么?


PS:我在res/layout/下有一个名为main.xml的XML文件。

最佳参考


在追踪这个问题之后,我在Android文档中找到了这个注释:


http://source.android.com/source/using-eclipse.html[45]



  *注意:Eclipse有时会喜欢在其中添加import android.R语句
  使用资源的文件顶部,
  特别是当你问Eclipse时
  排序或管理输入。这个
  会导致 make 中断。看
  出于这些错误的导入
  声明并删除它们。*



在浏览Android示例教程时,我经常使用 Ctrl + Shift + O 命令来组织导入并生成任何缺少的导入声明。有时这会生成不正确的import语句,这会隐藏构建时自动生成的R.java类。

其它参考1


每次我遇到R的问题都没有生成,甚至消失,这是由于XML布局文件中的一些问题阻止了应用程序的构建。

其它参考2


每当你得到



  R无法解决



然后检查/res目录,并且必须有一些文件中有一些错误,这会阻止构建应用程序。例如,它可能是布局文件,也可能是由于某些资源缺失,但您已经在XML文件中定义了它。


如果在res/drawables-mdpi等文件夹中有任何其他的,甚至未使用的(!)或未引用的(!)图像,这些文件不符合文件命名约定(可能只包含[[a-z0-9_。]]), R.java类可能不会生成,导致所有其他帖子引用的事件链。希望能帮助到你!

其它参考3



  我的项目在开头包含一个r.java.at,R.layout.main工作正常。但是,在添加一些代码之后它不起作用,并且错误是R.layout.main无法解决。什么s问题?



看看你的输入。可能是这行:


import android.R;


将在那里。如果是这种情况,请删除它,以便您的项目将使用默认的Android Resources类解析R,但使用从/res/文件夹自动生成的类。

其它参考4


另一件可能导致这个问题的事情:


我安装了新的ADT(第22节)。它停止创建包含R.javagen文件夹。解决方案是从Android SDK Manager安装新的Android SDK Build Tools。


在此处找到解决方案[46]

其它参考5


R.java是Android Eclipse插件创建的文件
建立你的申请。 R.java是在gen下创建的
目录。该文件是根据res中的信息生成的
目录。如果你在Eclipse上运行选择Project - >Clean ...
菜单,它将删除然后重新生成R.java文件。


当你改变你的问题时,会出现无法解决R的问题
包[[名称]]在AndroidManifest.xml文件中。它使用你的Android
包名称在gen目录下创建一个子目录
它存储R.java文件。


Eclipse可能在执行清理时遇到问题,因为它很困惑
您更改Android包时R.java文件的位置
名称。您可以重命名gen下的子目录以匹配您的
新的软件包名称,或者您可以将软件包名称更改回旧名称
名称。执行clean操作,然后将程序包名称更改为新名称
你要。如果您阻止Eclipse尝试构建,这将最有效
当您更改包名称时。在项目菜单下
取消选中自动构建选项以及
清理......对话框询问是否应该立即开始构建
取消选中该框,以便在您更改时不会尝试构建
包裹名字。更改名称后,您可以转为构建
自动重新开启。


请注意,如果AndroidManifest.xml文件包名称不匹配
你的Java包名称,Eclipse最终会自动添加一个
import<您的Android软件包名称> .R;在所有.java文件中排队
有任何参考R.如果你改变你的AndroidManifest.xml
包名称,有时Eclipse不会更新所有这些添加的内容
输入。如果发生这种情况,请使用Eclipse重构( ALT +
Shift + R )将您的一个Java文件中的import语句更改为
你的新AndroidManifest.xml包裹名称。最好这样做
而您已禁用自动构建。

其它参考6


说的是对的



  R是一个自动生成的类,它包含用于标识>资源的常量。如果你没有R.java文件(它将是带有1.5 SDK的Eclipse中的gen/eu.mauriziopz.gps/R.java),我建议关闭并重新打开你的项目或转到> Project> Build all (并按照>约瑟夫的推荐选择自动构建。)如果这不起作用而不是尝试创建一个新项目,如果重新创建问题而不是>再次发布此处,我们将详细介绍。



但我发现还有另一个问题导致了第一个问题.SDK目录中的工具没有执行权限,所以它就像Eclipse中没有存在,因此它没有建立R.java文件。


因此,修改权限并选择自动构建解决了这个问题。

其它参考7


R是一个自动生成的类,它包含用于标识资源的常量。如果你没有R.java文件(它将是带有1.5 SDK的Eclipse中的gen/eu.mauriziopz.gps/R.java)我建议关闭并重新打开你的项目或转到Project> Build all(和在Josef推荐的情况下选择自动构建。如果这不是尝试创建一个新项目,如果重新创建问题而不是再次发布,我们将详细介绍。

其它参考8


关闭所有文件,清理项目,重启Eclipse。

其它参考9


值得在AndroidManifest.xml中查看。属性package具有正确的值。


那是:


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="your.correct.package.name"
   ...


更改后,将重新生成R.java

其它参考10


将错误添加到与包的根命名空间不同的命名空间也可能导致此错误。


例如,如果com.example.myapp是包的根命名空间,则可以向com.example.myapp.activities命名空间添加Activity。


这将产生R无法解决的错误。


要修复导入,Activity中默认命名空间中的R应为:


import com.example.myapp.R;

其它参考11


除了之前答案中的重要建议外,请确保设置了Android目标:



  1. 右键单击您的项目

  2. 选择属性

  3. 在左侧菜单中选择Android

  4. 勾选相应项目构建目标旁边的框。

  5. 单击应用和确定



编辑:一年后,我找到了另一个原因。我的drawable文件夹中有一个.jpg图像,其名称与.png图像相同。在我的代码中引用此图像必定使程序混淆,并且它给出了R无法解析错误。

其它参考12


确保您安装了Android构建工具表单sdk manager


项目右键单击属性 - > Java BuildPath选择库并添加android-support.jar,按照这些步骤操作。


转到Project-> Properties-> Java Build Path,然后选择Order and export选项卡。设置android-support .jar库并将其放入列表顶部。并清除和重建..它适用于大多数情况




其它参考13


我第一百万次遇到这个问题,并意识到导致它的原因:我在名称中创建了一个带有大写字母的XML文件。 /res中的所有XML文件名必须与[a-z0-9\\._]匹配。

其它参考14


最简单的解决方案 - 有时您只需要保存正在处理的XML文件以启动自动生成器。


保存文件(例如main.xml),然后删除R.java文件,看看重新生成的R.java是否解决了R resolve问题。

其它参考15


R是生成的类。如果您使用的是Android开发工具(ADT),则无论何时构建项目都会生成它。您可能已关闭自动构建。[47]

其它参考16


检查XML文件名。确保它们全部用小写字母表示。


还要确保所有图像资源名称都在LOWER CASE中。我的jpg文件名下有一个大写字母,它在我的项目中导致了R未解决的错误。

其它参考17


在我的x64 Linux Mint安装上出现此错误。事实证明,结果是ADB二进制文件失败,因为没有安装ia32-libs包。只需运行apt-get install ia32-libs并重新启动Eclipse即可修复错误。


如果您的x64发行版没有ia32-libs,那么您将不得不使用Multiarch。


检查这篇文章的#4和#5:
http://crunchbang.org/forums/viewtopic.php?pid=277883#p277883[48]


希望这有助于某人。

其它参考18


您可能需要更新SDK工具。重新启动Android SDK Manager并安装新项目:Android SDK Build-tools。




其它参考19


您可能需要更新/安装SDK工具。重新启动Android SDK Manager并安装一个新项目:Android SDK Build-tools.one一次删除,修复哪一项适合您。在此处输入图像说明 [49]

其它参考20


我也有这个问题。原来,我无意中从strings.xml文件中删除了app_name字符串资源,这导致了一个无声错误。一旦我将其添加回来,R类就会成功生成,所有内容都会恢复运行。

其它参考21


首先检查是否有任何xml布局中的错误,如果然后再解决它。


否则从项目中删除junit依赖项并重建项目。


[50]

其它参考22


尝试将新的XML布局文件名设置为小写。例如,使用my_file.xml而不是myFile.xml

其它参考23


另一个原因R.java可能无法自动生成,如果您有 res/drawable-hdpi res/drawable-mdpi res/等目录抽拉-LDPI 即可。


这些目录似乎没有1.6+,但是1.5并不想要它们。当我删除这些目录时,R.java再次为我开始自动生成。

其它参考24


不幸的是,现有的问题都没有帮助。由于我的问题似乎是特定于平台的,所以只有在 Ubuntu 64位(我目前正在使用Ubuntu 12)时,这可能才有效。
起初我没有看到问题窗口,它已经暗示了一个解决方案,在64位环境中你需要32位库,可能会丢失:



   sudo apt-get install ia32-libs



我安装了包并重建了我的项目,这为我解决了这个问题。

其它参考25


重新启动计算机。

除了这种方式,没有什么能帮助我

其它参考26


只需转到Android顶级菜单列表即可。点击构建菜单,点击重建项目下的构建点击。


[51]

其它参考27


我有Android 8的例子,并试图使用Android 7 SDK。当我关闭项目并重新打开应用程序文件夹并选择使用Android 8 SDK时,它能够找到R文件。希望这可以帮助。

其它参考28


就我而言,我的AndroidManifest.xml中有错误。其他人说你的XML文件必须没有错误,但我只是在res/文件夹中查找。查找并修复尽可能多的错误,问题可能会自行解决。

其它参考29


通常这是因为您在创建项目时提供的MinSDK版本号。例:


如果你希望2.1最小,Android 2.1实际上是API Level 7。


当您浏览下载和安装的SDK时,您可以看到我在说什么。导航到您安装SDK的位置(例如C:\android-sdk-windows)并打开名为platforms的文件夹。你会看到类似android-7的东西被列为文件夹,如果你打开它有一个source.properties文件,当用文本编辑器打开时,会显示相应的平台版本。


创建项目时,必须选择构建目标API,该列表中名为API级别的最后一列显示填充MinSDK设置时要查找的编号。


这可能是导致R.java文件无法在Project> gen> packagename> R.java下创建的最常见错误之一。