我正在尝试从命令行使用Android
构建Gradle
项目,但在我想要更改目录结构时发现了一个问题。
目前是这样的:
.
└── 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 {
...
}
修改android:name
中的AndroidManifest.xml
属性:
<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
我做错了什么?有什么想法吗?
谢谢。
答案 0 :(得分:52)
当您在活动中声明错误的包时,通常会发生这种情况。
确保您的活动中的package com.example.blah;
声明与package
中的AndroidManifest.xml
声明相符。
答案 1 :(得分:28)
我明白了,所以我会自己回答。
我必须在那些使用在那里定义的任何资源的活动,片段或任何类中声明R
类。
所以,就像是:
package com.myproject.ui;
// lots of imports...
// ...
import com.myproject.R;
public class MainActivity extends ActionBarActivity {
...
}
答案 2 :(得分:9)
我收到此错误是因为我更改了.java文件中的软件包名称并重命名了目录但未更新AndroidManifest.xml。在AndroidManifest.xml中更改包名称解决了问题。这与上面的loopj答案一致。
在适用于我的Android项目中更改Java程序包名称的完整过程如下:
答案 3 :(得分:1)
我有同样的问题。解决方案是突出显示并右键单击R和&#39;导入类&#39;或突出显示R并按alt + Enter,然后单击导入类