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

时间:2014-03-08 22:25:05

标签: java android gradle

我正在尝试从命令行使用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

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

谢谢。

4 个答案:

答案 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程序包名称的完整过程如下:

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

答案 3 :(得分:1)

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