包R不存在


114

我得到的可怕的包裹R不存在,这使我丧命。该代码很好,我在市场上有运行该代码的应用。

现在,它正在影响简单的webview应用程序。o.0

R.string.app_name是我的错误main.xml并且string.xml可以。我很困惑。

我用"borrow"一些代码重新打开了一个旧版本,并且它被淹没了,R. errors.我做了一个干净的工作,除了R.android在顶部添加了导入外,没有任何改变。

我什至加载到Netbeans中,我也得到了同样的东西。清洁不起作用。我可以自己写R.java文件吗?

这是什么R东西 不是R。应该对应R.java


1
检查res文件夹中是否有任何错误,如果您也添加了一些项目作为库也要签入它们
Sunny Kumar Aditya 2012年

1
打Alt + Enter键上的setContentView(R.layout ...行添加进口。
活的爱情

Answers:


127

对于遇到这种情况的任何人,我都通过重命名命名空间文件夹来进行重构。我只是忘了也编辑AndroidManifest,所以才出现这个错误。

确保也选中此复选框。


1
看来我只能从活动类中访问R。我在尝试从其他类文件访问它时遇到此错误。
Joe Lapp

84

为了简单起见:

import your.app.package.R;

当然,用your.app.package您的应用程序包代替。

在所有利用R资源引用的类,删除任何其他import.R,即import android.R;


3
使用Cordova时,这是正确的解决方案。使用Cordova 3.0.9测试
Peter

1
其实是我的错 这样可以使Cordova项目正常构建,但是仍不会出现“启动”屏幕...因此,该解决方案实际上无法解决当前的问题。
彼得

这是将Eclipse测试项目转换为Android Studio模块时需要执行的操作。
RightHandedMonkey 2015年

如果您正在使用phonegap并在插件文件中添加上述import语句,请确保删除平台并再次添加。像这样phonegap platform remove androidphonegap platform add android
法瓦兹

54

TL; DR,如果出现错误“包R不存在”,则可能的原因是

  • XML资源文件中的一些错误
    ->修复XML错误
  • 当前包与R包不同(请参阅package AndroidManifest.xml中的属性)
    ->导入R类,例如import com.example.android.R;
    ->或在源中使用适当的包,例如package com.example.android;
    ->或将AndroidManifest.xml中的属性更改为 <manifest xmlns:android="..." package="com.example.android" ...>,如果合适
  • 使用的RID来自系统资源
    ->不导入android.R,但是给有问题的ID加上前缀android.,例如,android.R.layout.simple_list_item_2
    您当然可以导入android.R而不是给ID加上前缀,但是您不能再导入应用程序R类,而必须给应用ID加上前缀com.example.android.R.id.main_menu

R 是从应用程序的资源自动生成。它包含id这些资源的,并包含在<manifest> 相应AndroidManifest.xml文件的标记中命名的包中 。

如果资源XML文件中没有错误,R.java则将在下面的包子目录中生成源并进行gen/编译。


包中还有另一个Randroid。此类android.R包含一些嵌套类,这些嵌套类又包含ids和其他系统资源值。


要在Java中使用类,必须使用整个包来命名该类,例如

java.util.List<Object> list = new java.util.ArrayList<Object>();

或导入类,然后不带包使用它

import java.util.List;
import java.util.ArrayList;
List<Object> list = new ArrayList<Object>();

如果当前类和使用的类都在同一个包中,则也可以使用一个类而不用命名该包,例如

package com.example.android;
public class A {
    /* ... */
}
package com.example.android;
public class B {
    public void useA() {
        A a = new A();
    }
}

1
就我而言,问题是类路径'com.android.tools.build:gradle:3.3.0'。我将其更改为classpath'com.android.tools.build:gradle:3.2.1'并解决了问题。
Mohit Rajput,

25

永远不要尝试自己编写R类!

您是否在文件中导入了正确的R类?

在做

import android.R;

代替

import com.example.R;

对于很多人来说似乎是个问题。清洁和建造后,我的课程有时会导入错误的课程。


3
但是当我最初编码并编译该程序时,我并没有得到R的东西不在那的信息。
塔兹·赖德

12

如果您在android studio中进行开发并重构了包名称,则应在android清单和应用gradle文件中更改包名称。

 applicationId "change here your package name"

并在清单文件中

 package="change here your package name"

是的 例如,应用名称的大小写略有不同。
史蒂夫·怀特

9

R.java是自动生成的文件,如果xml文件中有错误,通常不会进行编译。

否您不能编写自己的R.java文件,它必须由资源编译器生成。

检查所有xml文件中的错误。


1
什么样的错误,初学者应该如何发现它们?
user1725145

6

R类是从XML文件(UI布局,国际化字符串等)自动生成的Java代码。如果该代码以前曾经工作过(看起来确实如此),则需要告诉您的IDE以某种方式重新生成这些文件。 :

  • 在IntelliJ中,选择“工具”>“ Android”>“为<project>生成源”
  • (如果您知道其他IDE中的方式,请随时编辑此答案!)

这是我搜索的答案。谢谢。+1
Adhikari Bishwash

5

我想它曾经可以工作,但现在没有。

如果您在MANIFEST文件中更改PACKAGE名称,可能会发生这种情况

<manifest
   package="com.example.android...."

如果要更改软件包名称

  1. 在清单文件中手动更改软件包名称。
  2. 单击您的R.java类,然后按F6。它将允许您将类移动到其他包,并且对该类的所有引用将被更新。

你是神!我正在通过创建一个新项目将项目从更改com.example.rickydam.txtbookscom.txtbooks.txtbooks,然后将所有内容移至新项目,但是找不到R。我尝试了使高速缓存无效,与gradle同步,清理项目,重建项目,重新安装SDK工具...什么都没做!但是您的解决方案解决了我的问题!再次感谢!继续编码!
瑞奇大坝

4

我只是在使用Bazel构建Android应用程序时遇到此错误:

error: package R does not exist
                + mContext.getString(R.string.common_string),
                                      ^
Target //libraries/common:common_paidRelease failed to build
Use --verbose_failures to see the command lines of failed build steps.

确保您的android_library/ android_binary使用AndroidManifest.xml具有正确package=属性的,并且如果您custom_packageandroid_library或上使用该属性android_binary,请确保其拼写正确。


3

删除导入android.R;从所有文件中..一旦清理了项目并构建了项目....它将生成


3

示例:我的包是com.example.mypc.f01,要修复错误,请在“活动”中添加以下行:

import com.example.mypc.f01.R;


3

以下是一些可用于消除此错误的技术:

  1. 清理您的项目,Buidl-> clean Project
  2. 重建项目,构建->重建项目
  3. 打开清单并检查是否缺少任何资源
  4. 签到布局到特定ID(如果缺少)将其添加
  5. 如果上述步骤不起作用,请使用无效的缓存重启android studio

2

就我而言,我意识到我正在项目中创建多个包。在Android清单中,我发现提供程序名称错误地保存了MyContentProvider的值,而不是.provider.MyContentProvider。我的主程序包(带有UI)是co.companyname.database.provider而不是co.companyname.database。

然后在受影响的类的导入语句上,我只需右键单击并要求Android Studio(0.8.6)优化我的导入语句。我还注意到,如果您在IDE右上角的AS搜索栏中搜索.R,则可以找到一个自动生成的R.java文件,它是程序包的一部分。此时,您无需更改任何内容。在更正Android Manifest文件并重建后,Studio应该修复该项目。

另外一项是,在一个类中,我正在使用toString()。length()来评估字符串,但将其换成TextUtils.IsEmpty(stringVal);想不到我为解决该问题所做的任何事情。

希望这对某人有帮助。

注意:所有这些都与AS 0.8.6有关

聚苯乙烯

R.java是自动生成的,因此请阅读标头:/ * AUTO-GENERATED FILE。请勿修改。* *该类由* aapt工具自动从发现的资源数据中生成。*请勿手工修改。* /


2

遇到这种情况时,我创建了一个新项目,并将文件从旧项目复制到新项目。

  1. 开始一个新项目
  2. 将旧文件添加到新项目中(复制并右键单击Layout,drawables,com.packagename等)以粘贴我的旧项目文件

但是,我仍然遇到相同的问题:R does not exist。然后,我意识到我已经将清单从记事本复制并粘贴到了Android Studio清单中,并且没有在清单文件中更改包名称。

因此,一旦我将清单中的包名称更改为新的项目名称,我创建的新项目就可以正常工作。


1

您将哪些文件导入到出现R错误的文件中?

我对R文件的理解是,它们是Android应用程序内所有属性的自动生成的引用列表。因此,您不能自己更改它。

您是否正在使用Eclipse构建该项目?在更新Eclipse之前,较早的项目是否已犯了这些错误?有哪些引用出现错误?

检查以确保您没有从另一个应用程序中的其他复制代码导入另一个R文件。


当项目中的AndroidManifest.xml文件和project.properties文件未显示相同的目标/最低版本的android时,我遇到了R问题。
Music Monkey

1

每次切换计算机并尝试从通过USB传输的文件中导入旧项目时,都会遇到此问题。

我的解决方法是仅创建一个新项目,然后将文件复制(拖动)到IDE中(当前使用Netbeans)并重建。这很烦人,而且有点棘手,但是可以解决问题。

如果您遇到这种情况,最坏的情况是您可能必须备份文件,删除项目,然后将文件拖到那里然后重新编译。希望这不会成为现实,但这将是您的核选择。


1

你可以试试

Android Studio顶部菜单>文件>使缓存无效/重新启动...

单击无效缓存/重新启动按钮以重新启动项目

如果某些片段类R类无法正确解析,请再次解析R.xxxx.xxx

然后重建你的项目

希望能帮助到你


0

如果您在Android Studio中遇到此错误:

检查Gradle模块文件-> defaultConfig-> applicationId设置。

检查AndroidManifest.xml->清单包标记。

检查所有src java文件中的软件包声明。

同步,清理然后用Gradle重建。

切勿建立自己的R文件。R是从源Java文件和构建设置自动生成的。


0

我遇到:“错误:程序包R不存在”,并假定javac无法访问R.java。
因此,我将%PROJ_LOC%\ gen附加到了sourcepath,并且有效!SOURCEPATH =%PROJ_LOC%\ src;%PROJ_LOC%\ gen

我没有使用Android Studio或Ant(或XML)。



0

刚刚摆脱了我的项目中的错误。我已经导入了一个示例项目,更改了包文件夹,但没有更新其中一个Java文件中的包。

此错误“程序包R不存在”的最可能原因是Java或清单文件中的程序包名称不正确。确保它正确且同步,然后进行干净的构建。


0

有时,只要将项目重新导入到Android Studio中就可以解决。


0

错误的路径:将项目的指针“隐藏”在图像上,如果您对路径进行了名称更改,例如“重构的程序包或文件夹”。然后,只需再次简单地写出R字母,编辑器就会建议正确的路径,它将起作用。在这种情况下,您的文件名是正确的,并且存在R.指针中引用的内容,但路径错误,因此清理和构建将无法进行。


0

R.损坏的另一种情况是注释处理

某些处理可能引用位于某些文件夹或文件夹级别的类。如果将所需的类移到其他位置,则可以将R.作为未知类。

不幸的是,此问题的错误指针在Android Studio中不明显。


0

自己编写R.java没有任何好处,因为它在每个构建中都会更改,

只需记住使用R.something例如:来自类内部的R.raw.filename,其包值类似于AndroidManifest.xml中的包值

因为R.资源ID是为当前应用程序或库定义的,并且在编译时检查它们是否都存在,所以没有必要允许从不以当前应用程序或库为目标的“代码”中访问它们。在其他地方使用。



-2

我解决了我的问题:

包R不存在

转到AndroidManifest.xml文件并minSDKVersion="17"从19 更改为


我不敢苟同。根据当前标准,您不应在AndroidManifest.xml文件中具有minSDKVersion。如果有,请从AndroidManifest.xml文件中将其删除,这是多余的代码。minSDKVersion和targetSdkVersion应该仅在build.gradle文件中定义。
Ajay B
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.