Android: включение нескольких Java-пакетов в манифест - PullRequest
31 голосов
/ 14 октября 2010

В приложении, которое я разрабатываю, есть много действий, организованных в семь пакетов Java. Первоначально я написал все кодирование и прочее для каждой группы действий в пакете Java как разные проекты.

Теперь я нахожусь в точке, где я хочу собрать все пакеты в один проект. Когда я добавляю новый пакет в папку src, я получаю сообщение об ошибке для всех моих значений R.id. * («R не может быть разрешен»).

Мой инстинкт подсказывает мне, что в манифесте проекта есть что-то необычное, но я не могу найти какой-либо ресурс в Интернете, чтобы рассказать мне, как это сделать.

(Примечание: я прочитал это и это , и я все еще не мог понять, как добавить дополнительные пакеты в мой проект.)

Ответы [ 4 ]

37 голосов
/ 14 октября 2010

Убедитесь, что оператор импорта в верхней части Activity ссылается на правильный R-файл. Каждый проект имеет свой собственный R-файл, поэтому, если вы скопируете Activity из одного проекта в другой, он все равно будет пытаться ссылаться на R-файл из старого проекта.

Вам не нужно явно указывать различные пакеты в манифесте. Чтобы включить действия из двух разных пакетов, скажем:

com.example.package1.Activity1
com.example.package2.Activity2

Вы можете сделать следующее:

<manifest package="com.example" . . . >
  <application . . .>
    <activity android:name=".package1.Activity1" . . . />
    <activity android:name=".package2.Activity2" . . . />
  </application>
</manifest>
14 голосов
/ 14 октября 2010

Android автоматически создает класс с именем «R» в пакете, объявленном в манифесте вашего приложения.Когда все ваши классы находятся внутри этого пакета, вам никогда не придется явно импортировать «R».Однако, если у вас есть классы в других пакетах, они не будут видеть их по умолчанию, и вам придется включить

 import <app-package>.R;

или

 import <app-package>.*;

(подставляя фактическое имя для <app-package> конечно).

Если вы включите библиотечные проекты в свое приложение, то они могут ссылаться на свои собственные "R" классы, которые будут сгенерированы в их домашние пакеты.Если у вас есть несколько независимых действий, которые необходимо объединить в одно конечное приложение, вам следует серьезно подумать об использовании библиотечных проектов вместо ручного объединения.Это может сделать вашу жизнь намного проще.

1 голос
/ 11 августа 2016

Проблема может сохраняться, даже если мы изменим файл манифеста. чтобы избежать этого, мы должны добавить import com.example.R; во все наши классы.

пример: MainActivity.class в пакете 2

pakage com.example.package2.Activity2
import com.example.R;

(TestActivity.class в пакете 1)

pakage com.example.package1.Activity1
import com.example.R;
0 голосов
/ 26 марта 2012

Убедитесь, что файл layout -> main.xml указан правильно и содержит android:id="@+id/whateverIdHasCausedYouTheError"

Файл R.java будет обновлен и теперь будет содержать id и bam, ваша ошибка должна исчезнуть.

...