我刚下载并安装了新的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给了我错误
R无法解决
在线
setContentView(R.layout.main);
为什么?
PS:我在 res/layout/
下有一个名为 main.xml
的XML文件 .
30 回答
只需转到Android顶级菜单列表即可 . 单击 Build 菜单,在Build下单击 Rebuild Project .
看看你的进口 . 可能是这条线:
将在那里 . 如果是这种情况,请删除它,以便您的项目将使用默认的Android Resources类解析R,但使用从/ res /文件夹自动生成的类 .
另一件可能导致这个问题的事情:
我安装了新的ADT(第22节) . 它停止创建包含
R.java
的gen
文件夹 . 解决方案是从Android SDK Manager安装新的Android SDK Build Tools .找到解决方案here
每当你得到
然后检查
/res
目录,并且必须有一些文件中有一些错误,这会阻止构建应用程序 . 例如,它可能是布局文件,也可能是由于某些资源缺失,但您已经在XML文件中定义了它 .如果在res / drawables-mdpi等文件夹中有任何其他的,甚至未使用的(!)或未引用的(!)图像,这些文件不符合文件命名约定(可能只包含[a-z0-9_ . ]), R.java类可能不会生成,导致所有其他帖子引用的事件链 . 希望能帮助到你!
确保您安装了Android构建工具表单sdk manager
项目右键单击属性 - > Java BuildPath选择库并添加android-support.jar,按照这些步骤操作 .
转到Project-> Properties-> Java Build Path,然后选择Order and export选项卡 . 设置android-support .jar库并将其放入列表顶部 . 并清洁和重建..它适用于大多数情况
在我的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
希望这有助于某人 .
最简单的解决方案 - 有时您只需要保存正在处理的XML文件以启动自动生成器 .
保存文件(例如main.xml),然后删除R.java文件,看看重新生成的R.java是否解决了R resolve问题 .
不幸的是,现有的问题都没有帮助 . 由于我的问题似乎是特定于平台的,所以这可能只有在 Ubuntu 64 Bit (我目前正在使用Ubuntu 12)时才有效 . 起初我没有看到"Problems"窗口,它已经暗示了一个解决方案,在64位环境中你需要32位库,可能会丢失:
我安装了包并重建了我的项目,这为我解决了这个问题 .
我第一百万次遇到这个问题,并意识到导致它的原因:我在名称中创建了一个带有大写字母的XML文件 .
/res
中的所有XML文件名必须与[a-z0-9\\._]
匹配 .尝试将新的XML布局文件名设置为小写 . 例如,使用
my_file.xml
而不是myFile.xml
.将错误添加到与包的根命名空间不同的命名空间也可能导致此错误 .
例如,如果
com.example.myapp
是包的根命名空间,则可以向com.example.myapp.activities
命名空间添加活动 .这将产生“R无法解决”的错误 .
要修复导入,活动中默认命名空间中的R应为:
删除
main.out.xml
. 我还知道该文件的用途,但删除它可以解决问题 .值得一试
AndroidManifest.xml
. 属性package
具有正确的值 .那是:
更改后,将重新生成
R.java
.在追踪这个问题之后,我在Android文档中找到了这个注释:
http://source.android.com/source/using-eclipse.html
在浏览Android示例教程时,我经常使用Ctrl Shift O命令来"Organize Imports"并生成任何缺少的import语句 . 有时这会产生不正确的import语句,这会隐藏
R.java
构建时自动生成的类 .通常这是因为您在创建项目时提供的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下创建的最常见错误之一 .说的是对的
但是我有权执行,所以就像没有't exist for Eclipse, thus it didn' t构建
R.java
文件一样 .因此,修改权限并选择“自动构建”解决了这个问题 .
检查XML文件名 . 确保它们都是小写的 .
还要确保所有图像资源名称都在LOWER CASE中 . 我的jpg文件名下有一个大写字母,它在我的项目中导致了R未解决的错误 .
首先检查是否有任何xml布局中的错误,如果然后再解决它 .
否则从项目中删除junit依赖项并重建项目 .
关闭所有文件,清理项目,重启Eclipse .
每次我遇到R的问题都没有生成,甚至消失,这是由于XML布局文件中的一些问题阻止了应用程序的构建 .
我有Android 8的例子,并试图使用Android 7 SDK . 当我关闭项目并重新打开应用程序文件夹并选择使用Android 8 SDK时,它能够找到R文件 . 希望这可以帮助 .
R.java
可能无法自动生成的另一个原因是,如果您有 res/drawable-hdpi , res/drawable-mdpi 或 res/drawable-ldpi 等目录 .1.6这些目录似乎没问题,但1.5不想要它们 . 当我删除这些目录时,
R.java
再次开始为我自动生成 .除了之前答案中的重要建议外,请确保设置了Android目标:
右键单击您的项目
选择“属性”
在左侧菜单中选择Android
勾选相应项目构建目标旁边的框 .
单击“应用”和“确定”
编辑:一年后,我找到了另一个原因 . 我的drawable文件夹中有一个.jpg图像,其名称与.png图像相同 . 在我的代码中引用此图像必定使程序混淆,并且它给出了“R无法解析”错误 .
R.java
是Android Eclipse插件在构建应用程序时创建的文件 .R.java
在"gen"目录下创建 . 此文件是根据"res"目录中的信息生成的 . 如果在Eclipse菜单上运行select "Project" - > "Clean...",它将删除然后重新生成R.java
文件 .当您在
AndroidManifest.xml
文件中更改包名称时,会发生问题"R cannot be resolved" . 它使用您的Android软件包名称在"gen"目录下创建一个子目录,用于存储R.java
文件 .Eclipse可能在执行clean时遇到问题,因为当您更改Android软件包名称时,
R.java
文件的位置很混乱 . 您可以重命名gen
下的子目录以匹配新的软件包名称,也可以将软件包名称更改回旧名称 . 执行clean操作,然后将程序包名称更改为所需的新名称 . 如果在更改程序包名称时阻止Eclipse尝试构建,则最有效 . 在"Project"菜单下,取消选中"Build Automatically"选项,同时"Clean..."对话框询问是否应该取消选中该框,以便在更改包名时不会尝试构建 . 更改名称后,您可以再次打开"Build Automatically" .请注意,如果您的
AndroidManifest.xml
文件包名称与您的Java包名称不匹配,Eclipse将最终自动在所有.java
文件中添加"import <your Android package name>.R;"行,这些文件对R有任何引用 . 如果您更改您的AndroidManifest.xml
包名称,有时Eclipse不会更新所有这些添加的导入 . 如果发生这种情况,请使用Eclipse重构(ALT Shift R)将其中一个Java文件中的import语句更改为新的AndroidManifest.xml
软件包名称 . 最好在禁用"Build Automatically"时执行此操作 .R是一个自动生成的类,它包含用于标识资源的常量 . 如果您没有R.java文件(它将是带有1.5 SDK的Eclipse中的gen / eu.mauriziopz.gps / R.java),我建议关闭并重新打开您的项目或转到Project> Build all(和按照Josef的推荐选择“自动构建” . 如果这不是尝试创建一个新项目,如果问题被重新创建,而不是再次发布,我们将详细介绍 .
您可能需要更新/安装SDK工具 . 重新启动Android SDK Manager并安装一个新项目:Android SDK Build-tools.one一次删除,修复哪一项适合您 .
R
是生成的类 . 如果您使用的是Android Development Tools (ADT),那么无论何时构建项目都会生成它 . 您可能已关闭'Build Automatically' .您可能需要更新SDK工具 . 重新启动Android SDK Manager并安装新项目:Android SDK Build-tools .
在我的情况下,我的
AndroidManifest.xml
中有错误 . 其他人说你的XML文件必须没有错误,但我只是在res /文件夹中查找 . 查找并修复尽可能多的错误,问题可能会自行解决 .我也有这个问题 . 原来,我无意中从
strings.xml
文件中删除了"app_name"字符串资源,这导致了一个无声错误 . 一旦我将其添加回来,R类就会成功生成,所有内容都会恢复运行 .