Подтвердить что ты не робот

Ошибка "Package R не существует" при создании с помощью 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

Ok. Все в порядке. Но теперь я хочу создать новый каталог, поэтому:

Я создаю каталог 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

Что я делаю неправильно? Любые идеи?

Спасибо.

4b9b3361

Ответ 1

Обычно это происходит, когда вы объявляете неправильный пакет в своей деятельности.

Убедитесь, что объявление package com.example.blah; в вашем действии соответствует объявлению package в вашем AndroidManifest.xml.

Ответ 2

Я понял, поэтому я отвечу сам.

Мне пришлось объявить класс R в этих действиях, фрагментах или любых классах, в которых используется любой ресурс, определенный там.

Итак, это было бы так:

package com.myproject.ui;

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

public class MainActivity extends ActionBarActivity {
    ...
}

Ответ 3

Я получил эту ошибку, потому что я изменил имя пакета в файлах .java и переименовал каталоги, но не обновил AndroidManifest.xml. Исправлена ​​проблема с изменением имени пакета в AndroidManifest.xml. Это согласуется с ответом loopj выше.

Полная процедура изменения имени пакета Java в проекте Android, который работал у меня, следующий:

  • Переименованный пакет в .java файлы.
  • Переименованные каталоги, содержащие файлы .java.
  • Переименованный пакет в AndroidManifest.xml, а также другие элементы в этом файле, если это необходимо.
  • Переименованный applicationId в build.gradle(тот, который используется для приложения).