包R不存在

时间:2012-10-20 07:25:00

标签: android

我得到了可怕的包R不存在,它正在杀了我。 代码很好我在市场上运行代码的应用程序。

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

R.string.app_name错误,我的main.xmlstring.xml没问题。我很困惑。

我为"borrow"某些代码打开了旧版本,但是它充斥着R. errors.我做了一个干净而没有任何改变,除了在顶部添加了导入R.android

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

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

30 个答案:

答案 0 :(得分:118)

对于遇到此问题的人, 我通过重命名命名空间文件夹重构。我只是忘了编辑AndroidManifest,这就是我收到此错误的原因。

请务必检查此内容。

答案 1 :(得分:76)

只是为了简单起见:

import your.app.package.R;

当然,用您的应用包替换your.app.package

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

答案 2 :(得分:43)

TL; DR ,如果您收到错误“包R不存在”,可能的原因是

  • XML资源文件中的一些错误
    - >修复XML错误
  • 当前套餐与R套餐不同(请参阅package AndroidManifest.xml中的属性)
    - >导入R类,例如import com.example.android.R;
    - >或在您的来源中使用适当的包,例如package com.example.android;
    - &GT;或者将AndroidManifest.xml中的package属性更改为 <manifest xmlns:android="..." package="com.example.android" ...>,如果合适的话
  • 使用过的R ID来自系统资源
    - &GT;不要导入android.R,而是使用android.为违规ID添加前缀,例如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/下面的包子目录中生成并编译。

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

要在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();
    }
}

答案 3 :(得分:21)

永远不要尝试自己写R课程。

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

否则

import android.R;

而不是

import com.example.R;

似乎是很多人的问题。在清理和建造之后,我的课程有时导入错误的课程。

答案 4 :(得分:12)

如果你在android studio中开发并重构了包名,那么你应该在android manifest和app gradle文件中更改包名。

 applicationId "change here your package name"

并在清单文件中

 package="change here your package name"

答案 5 :(得分:9)

R.java是一个自动生成的文件,如果你在xml文件中有错误,它通常不会被编译。

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

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

答案 6 :(得分:6)

The R class是从您的XML文件(UI布局,国际化字符串等)自动生成的Java代码。如果以前的代码(看起来像是),您需要告诉您的IDE以某种方式重新生成这些文件:

  • 在IntelliJ中,选择工具&gt; Android&gt;生成&lt; project&gt;
  • 的来源
  • (如果你知道在另一个IDE中的方式,请随时编辑这个答案!)

答案 7 :(得分:4)

我认为它曾经有效,但现在它没有......

如果您更改MANIFEST文件中的PACKAGE名称

,就会发生这种情况
<manifest
   package="com.example.android...."

如果您想更改包名称

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

答案 8 :(得分:3)

在使用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_package {1}}或android_library,请确保其拼写正确。

答案 9 :(得分:2)

在我的情况下,我意识到我在项目中创建了多个包。在Android Manifest中,我发现提供程序名称错误地保存了MyContentProvider的值,而不是.provider.MyContentProvider。我的主程序包(使用UI)是co.companyname.database.provider而不是co.companyname.database。

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

另一个项是在一个类中,我正在使用toString()。length()来计算字符串但是将它们交换为TextUtils.IsEmpty(stringVal);想不出我为解决这个问题所做的其他事情。

希望这有助于某人。

NB - 所有这些都是AS 0.8.6

P.S。

R.java是自动生成的,因此请阅读标题: / *自动生成的文件。不要修改。  *  *这个类是由自动生成的  *从它找到的资源数据中获取工具。它  *不应手动修改。  * /

答案 10 :(得分:2)

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

  1. 开始一个新项目
  2. 将旧文件添加到新项目中(复制并右键单击Layout,drawables,com.packagename,...)以粘贴我的旧项目文件
  3. 但是,我仍然遇到同样的问题:R does not exist。然后我意识到我已经将Manifest从我的记事本中复制并粘贴到Android Studio清单中,并且我没有更改清单文件中的包名称。

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

答案 11 :(得分:2)

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

答案 12 :(得分:2)

示例:我的软件包是 com.example.mypc.f01 ,以修复您在下面添加以下行的错误:

<强> import com.example.mypc.f01.R;

答案 13 :(得分:1)

在子包中使用 R 时可能会发生这种情况 示例:

com.example; // -app package 和 main Resources 映射到 app package

com.example.order; // - 子包

在子包中,如果你需要访问一个资源,如,

R.Layout.orderLayout - 这里 R 将不可用。

要解决这个问题,您需要从主包中导入 R。 IE。 对于 com.example.order 文件夹/包中的文件,您将导入

包com.example.order 导入 com.example.R;

答案 14 :(得分:1)

您导入哪些文件导致R错误?

我对R文件的理解是它们是自动为Android应用程序中的所有属性生成的参考列表。因此,您无法自行更改。

您是否使用Eclipse构建此项目? 在更新Eclipse之前,较旧的项目是否会出现这些错误? 获得错误的参考是什么?

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

答案 15 :(得分:1)

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

我的解决方法是创建一个新项目并将文件复制(拖动)到IDE(当前使用Netbeans)并重建。这是一个烦恼和一些hacky解决方案,但它解决了这个问题。

如果您遇到这种情况,最糟糕的情况是您可能需要备份文件,删除项目,然后将文件拖到那里并重新编译。希望它不会那样,但那将是你的核选择。

答案 16 :(得分:1)

您可以尝试

Android Studio顶级菜单&gt;文件&gt;无效缓存/重启...

单击invalidate cache / restart按钮以重新启动项目

如果某些片段类R类没有正确解析,则再次解析R.xxxx.xxx

然后重建你的项目

希望有所帮助

答案 17 :(得分:1)

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

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

答案 18 :(得分:0)

此错误是 100% 由于 xml 文件中的错误。您可以在 Logcat->error 中检查该特定错误。然后解决这个问题。如果 xml 错误得到解决,应用程序将运行。当您从其他来源复制代码时,通常会出现这种情况。在我的情况下,xml 文件中的 Button 中存在错误。我没有正确输入 Button 。如果您解决了该错误,您和您的应用程序就会顺利运行。如果仍然显示此错误,请不要担心并继续前进。

答案 19 :(得分:0)

下面为我工作。

  1. AndroidManifest.xml 文件中,检查软件包名称是否正确输入。
  2. 导入com.example.appName.R; (导入软件包_name.R;)

如果第一步无效,请尝试第二步。

答案 20 :(得分:0)

我忘记在Java类的顶部添加“包”的“名​​称”。检查是否确实添加了您的。

答案 21 :(得分:0)

R。破坏的另一种情况是注释处理

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

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

答案 22 :(得分:0)

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

答案 23 :(得分:0)

有时,当您将项目重新导入Android Studio时,它会得到解决。

答案 24 :(得分:0)

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

最有可能导致此错误&#39;包R不存在&#39;是Java或清单文件中的包名称不正确。确保它是正确的并且同步,然后进行干净的构建。

答案 25 :(得分:0)

如果在解决合并冲突后出现此错误,则简单构建 - &gt;清洁项目可以提供帮助

答案 26 :(得分:0)

我有:“错误:包R不存在”并假设javac 无法访问R.java 所以我将%PROJ_LOC%\ gen附加到sourcepath,它工作正常! SOURCEPATH =%PROJ_LOC%\ SRC;%PROJ_LOC%\根

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

答案 27 :(得分:0)

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

检查Gradle模块文件 - &gt; defaultConfig - &gt; applicationId设置。

检查AndroidManifest.xml - &gt;清单包标签。

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

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

永远不要构建自己的R文件。 R是从源java文件和构建设置自动生成的。

答案 28 :(得分:-1)

自己编写R.java没有好处,因为它在每次构建时都会被更改,

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

因为为当前应用程序或库定义了R. resources ID 并且如果在编译时存在它们都被检查,所以没有意义 允许他们从&#34;代码&#34;它不针对当前的应用程序或库,可以在其他地方使用。

答案 29 :(得分:-2)

我解决了我的问题:

  

包R不存在

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