从命令行使用Gradle构build时,“包R不存在”错误

我试图从命令行用Gradle构build一个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 

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

我创build一个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 

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

谢谢。

Related of "从命令行使用Gradle构build时,“包R不存在”错误"

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

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

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

我不得不在这些活动,片段或任何使用任何资源的类中声明R类。

所以,这将是:

 package com.myproject.ui; // lots of imports... // ... import com.myproject.R; public class MainActivity extends ActionBarActivity { ... } 

我得到这个错误,因为我改变了.java文件中的包名,并重命名了目录,但没有更新AndroidManifest.xml。 在AndroidManifest.xml中更改包名解决了这个问题。 这与loopj上面的答案一致。

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

  1. 在.java文件中重命名包。
  2. 重命名包含.java文件的目录。
  3. 在AndroidManifest.xml中重命名包,以及相应的文件中的其他项目。
  4. 在build.gradle(应用程序的一个)中重命名applicationId。