Доступ к R.java из разных пакетов

У меня есть приложение, разделенное на подпакеты, только для личной организации:

com.myname.myapp
 |
 `-  com.myname.myapp.activities
 |
 `-  com.myname.myapp.whatever
 |
 `-  ...

Проблема заключается в том, что сгенерированная R.java находится в com.myname.myapp, и поэтому, когда я набираю R.id.something в классе из подпакета com.myname.myapp.activities, я получаю R cannot be resolved to a variable (очевидно, я думаю).

Когда я нажимаю "Упорядочить импорт" (Ctrl + Shift + O), Eclipse исправляет его добавление import com.myname.myapp.R вверху, и все работает отлично. Но, с другой стороны, документация на Android утверждает следующее:

Eclipse иногда нравится добавлять в android.R выражение import в верхней части ваших файлов, которые используют ресурсы, особенно если вы попросите eclipse сортировать или иным образом управлять импортом. Это заставит ваш make сломаться. Следите за этими ошибочными операциями импорта и удаляйте их

Зная, что все работает отлично, что мне делать?

Ответы

Ответ 1

Вы можете импортировать R.file, где захотите.

import com.myname.myapp.R; 

либо используйте переменную типа

com.myname.myapp.R.id.test

Ответ 2

R.java всегда создается в указанном вами месте (пакете) в файле манифеста.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.myname.myapp"
      android:versionCode="1"
      android:versionName="1.0">

Для любого другого местоположения или пакета вы должны импортировать файл R.java из корневого каталога.

Надеюсь, вы поняли эту проблему.

Ответ 3

Предупреждение имеет отношение к факту, есть две версии класса R. Существует общая версия, которая входит в состав пакетов android. android.R, и существует конкретный проект, который представляет ваши локальные файлы ресурсов (com.myname.myapp.R). Просто просмотрите их так же, как две версии классов Date в стандартной библиотеке java. (Java.util.Date и java.sql.Date) два класса с тем же именем, указанными пакетом.