Java 从命令行使用 Gradle 构建时出现“R 包不存在”错误

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/22275855/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 14:40:24  来源:igfitidea点击:

"Package R does not exist" error when building with Gradle from command line

javaandroidgradle

提问by Birei

I'm attemping to build an Androidproject with Gradlefrom command line, but found a problem when I want to change the directory structure.

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

Currently is like this:

目前是这样的:

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

Then I execute:

然后我执行:

./gradlew clean build

That ends with:

结束于:

BUILD SUCCESSFUL

Ok. All fine. But now I want to create a new directory, so:

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

I create an uidirectory and move MainActivity.javathere:

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

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

Modify its package:

修改它的包:

package com.myproject.ui;

// imports

public class MainActivity extends ActionBarActivity {
    ...
}

Modify its android:nameattribute in AndroidManifest.xml:

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

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

And try to compile it again:

并尝试再次编译它:

./gradlew clean build

With following errors:

出现以下错误:

/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

What am I doing wrong? Any ideas?

我究竟做错了什么?有任何想法吗?

Thank you.

谢谢你。

回答by Birei

I got it, so I will answer myself.

我明白了,所以我会回答自己。

I had to declare the Rclass in those activities, fragments or whatever classes that use any resource defined there.

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

So, it would be like:

所以,它会是这样的:

package com.myproject.ui;

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

public class MainActivity extends ActionBarActivity {
    ...
}

回答by loopj

This usually happens when you are declaring the wrong package in your Activity.

当您在 Activity 中声明错误的包时,通常会发生这种情况。

Make sure the package com.example.blah;declaration in your Activity matches the packagedeclaration in your AndroidManifest.xml.

确保package com.example.blah;您的 Activity 中的package声明与您的AndroidManifest.xml.

回答by stevehs17

I got this error because I changed the package name in the .java files and renamed the directories but didn't update AndroidManifest.xml. Changing the package name in AndroidManifest.xml fixed the problem. This is consistent with loopj's answer above.

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

The complete procedure for changing the Java package name in an Android project that worked for me is the following:

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

  1. Renamed package in .java files.
  2. Renamed directories containing .java files.
  3. Renamed package in AndroidManifest.xml, as well as other items in that file as appropriate.
  4. Renamed applicationId in build.gradle (the one for the app).
  1. .java 文件中的重命名包。
  2. 重命名包含 .java 文件的目录。
  3. 重命名 AndroidManifest.xml 中的包,以及该文件中的其他项目(视情况而定)。
  4. 在 build.gradle 中重命名了 applicationId(应用程序的那个)。

回答by amir sohail

I had this same problem. The solution is to either highlight and right click the R and 'import class' or highlight R and press alt+Enter and then click import class

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