Ответ 1
Обычно это происходит, когда вы объявляете неправильный пакет в своей деятельности.
Убедитесь, что объявление package com.example.blah;
в вашем действии соответствует объявлению package
в вашем AndroidManifest.xml
.
Я пытаюсь построить проект 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
Что я делаю неправильно? Любые идеи?
Спасибо.
Обычно это происходит, когда вы объявляете неправильный пакет в своей деятельности.
Убедитесь, что объявление package com.example.blah;
в вашем действии соответствует объявлению package
в вашем AndroidManifest.xml
.
Я понял, поэтому я отвечу сам.
Мне пришлось объявить класс R
в этих действиях, фрагментах или любых классах, в которых используется любой ресурс, определенный там.
Итак, это было бы так:
package com.myproject.ui;
// lots of imports...
// ...
import com.myproject.R;
public class MainActivity extends ActionBarActivity {
...
}
Я получил эту ошибку, потому что я изменил имя пакета в файлах .java и переименовал каталоги, но не обновил AndroidManifest.xml. Исправлена проблема с изменением имени пакета в AndroidManifest.xml. Это согласуется с ответом loopj выше.
Полная процедура изменения имени пакета Java в проекте Android, который работал у меня, следующий: