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
"Package R does not exist" error when building with Gradle from command line
提问by Birei
I'm attemping to build an Android
project with Gradle
from 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 ui
directory and move MainActivity.java
there:
我创建一个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:name
attribute 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 R
class 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 package
declaration 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 包名称的完整过程如下:
- Renamed package in .java files.
- Renamed directories containing .java files.
- Renamed package in AndroidManifest.xml, as well as other items in that file as appropriate.
- Renamed applicationId in build.gradle (the one for the app).
- .java 文件中的重命名包。
- 重命名包含 .java 文件的目录。
- 重命名 AndroidManifest.xml 中的包,以及该文件中的其他项目(视情况而定)。
- 在 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 然后单击导入类