【问题标题】:"Package R does not exist" error when building with Gradle from command line从命令行使用 Gradle 构建时出现“包 R 不存在”错误
【发布时间】:2014-04-12 02:54:28
【问题描述】:

我正在尝试从命令行使用Gradle 构建一个Android 项目,但是当我想更改目录结构时发现了一个问题。

目前是这样的:

.
└── main
    ├── AndroidManifest.xml
    ├── ic_launcher-web.png
    ├── java
    │   └── com 
    │       └── myproject
    │           └── MainActivity.java
    └── res 
        ├── ... 
        ├── layout
        │   ├── activity_main.xml
        │   └── fragment_main.xml
        ├── ... 
        ...

然后我执行:

./gradlew clean build

结尾是:

BUILD SUCCESSFUL

好的。一切都好。但是现在我想新建一个目录,所以:

我创建了一个ui 目录并将MainActivity.java 移动到那里:

.
└── main
    ├── AndroidManifest.xml
    ├── ic_launcher-web.png
    ├── java
    │   └── com
    │       └── myproject
    │           └── ui
    │               └── MainActivity.java
    └── res
        ├── ...
        ├── layout
        │   ├── activity_main.xml
        │   └── fragment_main.xml
        ├── ...
        ...

修改它的包:

package com.myproject.ui;

// imports

public class MainActivity extends ActionBarActivity {
    ...
}

AndroidManifest.xml中修改其android:name属性:

<activity 
    android:name=".ui.MainActivity" 
    android:label="@string/app_name" >
    ...
</activity>

并尝试再次编译:

./gradlew clean build

出现以下错误:

/home/birei/MyDummyProject/MyProject/src/main/java/com/myproject/ui/MainActivity.java:19: error: package R does not exist
        setContentView(R.layout.activity_main);
                        ^
/home/birei/MyDummyProject/MyProject/src/main/java/com/myproject/ui/MainActivity.java:23: error: package R does not exist
                    .add(R.id.container, new PlaceholderFragment())
                          ^
/home/birei/MyDummyProject/MyProject/src/main/java/com/myproject/ui/MainActivity.java:33: error: package R does not exist
        getMenuInflater().inflate(R.menu.main, menu);
                                   ^
/home/birei/MyDummyProject/MyProject/src/main/java/com/myproject/ui/MainActivity.java:43: error: package R does not exist
        if (id == R.id.action_settings) {
                   ^
/home/birei/MyDummyProject/MyProject/src/main/java/com/myproject/ui/MainActivity.java:60: error: package R does not exist
            View rootView = inflater.inflate(R.layout.fragment_main, container, false);

BUILD FAILED

我做错了什么?有什么想法吗?

谢谢。

【问题讨论】:

  • 如果使用 Android Studio,请在类名上按 Alt+Enter。它只是导入相关的 R 类本身。

标签: java android gradle


【解决方案1】:

这通常发生在您在 Activity 中声明错误的包时。

确保 Activity 中的 package com.example.blah; 声明与 AndroidManifest.xml 中的 package 声明相匹配。

【讨论】:

  • 这确实解决了我关于 R.layoutR.id 的问题。 .我的 AndroidManifest 包被命名为 com.test.app 而我的 java 包被命名为 com.native.testing.app 。 .为了解决这个问题,我将我的 java 包更改为 com.test.app 并且它起作用了。 . :)
【解决方案2】:

我知道了,所以我会自己回答。

我必须在那些活动、片段或使用那里定义的任何资源的任何类中声明 R 类。

所以,它会是这样的:

package com.myproject.ui;

// lots of imports...
// ...
import com.myproject.R;

public class MainActivity extends ActionBarActivity {
    ...
}

【讨论】:

  • 一千加,我不知道这是否是正确的方法,但解决了我的问题。
  • 有没有办法避免对每个类文件都这样做?
  • @dave_gerard:我不知道有什么办法,但现在我使用 Android Studio 自己处理这些导入,所以我不担心。
  • 这对我有用,但实际上我不必输入导入语句。只需将光标放在最后一次导入的末尾并按回车键,它就会刷新“自动导入” " 功能和自动为您导入它..绝对加一!!
  • 只是这样,android studio 不处理它。它需要被包括在内。有同样的问题
【解决方案3】:

我收到此错误是因为我更改了 .java 文件中的包名称并重命名了目录,但没有更新 AndroidManifest.xml。更改 AndroidManifest.xml 中的包名称解决了该问题。这与上面loopj的回答一致。

在适合我的 Android 项目中更改 Java 包名称的完整过程如下:

  1. 在 .java 文件中重命名包。
  2. 重命名的目录包含 .java 文件。
  3. 重命名 AndroidManifest.xml 中的包,以及该文件中的其他项目(视情况而定)。
  4. 在 build.gradle(应用程序的那个)中重命名了 applicationId。

【讨论】:

  • 谢谢,我确实重构了,但由于某种原因,它没有改变清单
  • :-) 以为我解决了这个问题,但大写错误
【解决方案4】:

我遇到了同样的问题。解决方案是突出显示并右键单击 R 和“导入类”或突出显示 R 并按 alt+Enter 然后单击导入类

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多