Как указать, что имя пакета R.java отличается от имени пакета приложения

У нас есть наше приложение с объявленным именем пакета как com.foo.app в AndroidManifest.xml.

По какой-то особой причине, чтобы сыграть какую-то хитрость, мы хотим намеренно указать имя пакета сгенерированного R.java с именем пакета com.bar.resource. И без изменения имени пакета приложения (по-прежнему сохраняется как com.foo.app).

Например, у меня есть приложение, использующее com.foo.app, я хочу, чтобы сгенерированное имя пакета R.java было com.bar.resource. И в исходном коде моего приложения я буду использовать ссылку типа com.bar.resource.id.btn_ok

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

Но есть ли какой-либо настраиваемый параметр в ADT/Eclipse, чтобы сделать это для проекта Android?


Пожалуйста, прекратите рассказывать мне, как изменить имя пакета с помощью метода рефакторинга Eclipse. Пожалуйста, правильно поймите мой вопрос. Я спрашиваю, как указать имя пакета автоматически сгенерированного R.java. Я хочу, чтобы оно отличалось от имени пакета приложения, указанного в AndroidManifest.xml.


person Robin    schedule 11.12.2013    source источник
comment
Проверьте: Переименование пакетов в проекте eclipse android   -  person Paresh Mayani    schedule 11.12.2013
comment
Спасибо за информацию, но мне нужно другое имя пакета для R.java.   -  person Robin    schedule 11.12.2013
comment
что вы подразумеваете под другим именем пакета для R.java?   -  person Paresh Mayani    schedule 11.12.2013
comment
Например, у меня есть приложение, использующее com.foo.app, я хочу, чтобы сгенерированное имя пакета R.java было com.bar.resource. И в исходном коде моего приложения я буду использовать ссылку типа com.bar.resource.id.btn_ok   -  person Robin    schedule 11.12.2013
comment
Насколько я знаю, вы не можете переименовать или изменить R.java и его содержимое. (Если вы попытаетесь изменить содержимое, он предупредит вас, и это не рекомендуется)   -  person Paresh Mayani    schedule 11.12.2013
comment
Да, я знаю, поэтому я здесь.   -  person Robin    schedule 11.12.2013


Ответы (4)


Откройте папку src в проводнике пакетов, затем щелкните правой кнопкой мыши com.foo.resource, затем щелкните рефакторинг, затем переименуйте имя пакета, и все соответствующие записи также будут переименованы.

person ARK    schedule 11.12.2013
comment
Здравствуйте, вы неправильно поняли мой вопрос. Я прошу изменить автоматически сгенерированный исходный код R.java. Не созданный вручную пакет ресурсов. - person Robin; 11.12.2013
comment
попробуйте переименовать папку gen и удалить предыдущую - person ARK; 11.12.2013
comment
Спасибо, но это слишком тривиально, так как каждый раз затмение будет генерировать новое. И я не хочу изменять код R.java, просто изменю имя его пакета. - person Robin; 11.12.2013
comment
Вы можете остановить автоматическое создание нового файла R, сняв флажок с опции автоматической сборки в меню «Проект». - person ARK; 11.12.2013

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

Я использую ADT, поэтому у меня есть

|Родительский проект|

-> |Подпроект|

Я использую ADT, и подпроект помечается как проект библиотеки и ссылается на него (как в Android, в пути сборки Java, так и в зависимостях проекта), поэтому родительский проект получает ссылки на все ресурсы там, поэтому я могу дать ему любой пакет имя хочу.

Я бросил быстрый и грязный пример этой настройки на https://github.com/SixMinute/AndroidSeparatePackageResources.

Это не совсем идеальная установка, но она определенно работает лучше и проще всего для нас, надеюсь, она поможет вам.

person seaders    schedule 26.05.2014

Выполните следующие действия, чтобы изменить имя пакета, если вы используете Eclipse,

  1. Щелкните правой кнопкой мыши имя пакета.
  2. Выберите «Рефакторинг» > «Переименовать».
  3. Откройте файл манифеста. Внутри тега измените имя пакета.
  4. импортировать пакет в соответствующие классы по мере его изменения.
person laam    schedule 11.12.2013

Имя пакета R.java зависит от имени пакета, которое вы определяете в файле манифеста.

person Sadeq9128    schedule 22.04.2017