Как изменить имя пакета приложения Android

133

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

Как правильно изменить имя приложения?

Аллен Гингрич
источник
3
К счастью, они добавили «волшебную кнопку изменения имени пакета» с 2010 года - см. ответ @Marc Bernstein - stackoverflow.com/a/4025633/383414
Ричард Ле Мезурье
спасибо Ричард Ле ...
DoruChidean
3
Возможный дубликат пакета Android Studio Rename
Бо Перссон
Трудно быть дубликатом, когда об этом спросили 3 года назад ...
Райан Тернье

Ответы:

102

Если вы используете Eclipse, вы можете попробовать эти инструкции с сайта разработчика Android. Они специально для образца GestureBuilder, но должны применяться к любому приложению, насколько я могу сказать:

[H] Вот как вы могли бы сделать это в Eclipse:

  1. Щелкните правой кнопкой мыши на имени пакета ( src/com.android.gesture.builder).
  2. Выберите Refactor> Rename и измените имя, например, на com.android.gestureNEW.builder.
  3. Откройте файл манифеста. Внутри <manifest>тега измените имя пакета на com.android.gestureNEW.builder.
  4. Откройте каждый из двух файлов Activity и выполните Ctrl-Shift-O, чтобы добавить отсутствующие пакеты импорта, затем сохраните каждый файл. Запустите приложение GestureBuilder на эмуляторе.

Также не забудьте переименовать сам пакет вместе со ссылками на него в файлах. В Eclipse вы можете увидеть имя пакета в окне проводника файлов / в виде дерева с левой стороны. По моему опыту, Eclipse может иногда быть немного привередливым и ненадежным (например, оставляя за собой случайные ссылки на старое имя пакета).

eldarerathis
источник
Это, вероятно, лучший способ сделать это, нет волшебной кнопки изменения названия пакета.
жалюзи
13
Да, есть. Смотрите ответ @Marc Bernstein.
Марк Филип
Я не думаю, что оригинальный вопросник должен был также изменить имена пакетов Java. Марк должен быть принятым ответом.
mpellegr
Первым шагом является не «щелчок правой кнопкой мыши», а выбор «Refactor» в меню.
Deqing
И вам может потребоваться изменить app_nameв res-> values ​​=> strings.xml
Deqing
302

В Eclipse есть способ легко изменить имя пакета. Щелкните правой кнопкой мыши свой проект, прокрутите вниз до «Инструменты Android», а затем нажмите «Переименовать пакет приложений».

Марк Бернштейн
источник
2
Только что попробовал Эльдар, и это сработало - но я уверен, что это тоже сработает.
Аллен Гингрич
4
Это правильный ответ, но текущий ADT не работает, и он разрывает каждую ссылку на ваш класс R. Поэтому вам нужно щелкнуть по каждому отдельному файлу, выполнить «ctrl-shift-o» (или cmd-shift-o на Mac) и выбрать новый пакет с именем R (НЕ выбирайте android.R! Все будет ужасно сломаться ), затем нажмите Сохранить. ... и повторите для каждого отдельного файла :(
Адам
@ Адам, чтобы сделать нашу жизнь проще, нажмите на проект и используйте ctrl + shift + o, он обновит импортированную ссылку во ВСЕХ классах / файлах: D
Blaze Tama
это просто спасло мне жизнь, так как я потерял свой нелепый магазинный ключ и должен был переиздать свое приложение.
Теоман Шипахи
3
я обнаружил, что имена файловых пакетов, объявленные в верхней части каждого файла, не соответствуют ни новому пакету, ни папке, в которой они находятся. Вы можете щелкнуть правой кнопкой мыши ту исходную папку, которая все еще имеет старое имя пакета (по крайней мере, мое всегда есть), выберите refactor, затем переименуйте и переименуйте его в новый пакет. Затем eclipse переименует папку и объявления пакетов каждого файла в новое имя пакета, как это должно было произойти в первую очередь.
Androidcoder
52

Вот как вы можете сделать это в Eclipse:

  1. Щелкните правой кнопкой мыши на имени пакета ( src/com.android.gesture.builder).
  2. Выберите Refactor > Renameи измените имя, например, на com.android.gestureNEW.builder.
  3. Откройте файл манифеста. Внутри <manifest>тега измените имя пакета на com.android.gestureNEW.builder.
  4. Откройте каждый из двух Activityфайлов и делать Ctrl+ Shift+ , Oчтобы добавить недостающие импорта пакетов, а затем сохранить каждый файл.
  5. Запустите GestureBuilderприложение на эмуляторе.

Ссылка на пост

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

AZ_
источник
2
Довольно удивительный способ сделать это!
Чувак
2
Более простое решение. Это должно было быть принято;)
Nomade
12

В Android Studio , которую, честно говоря, вы должны использовать, измените имя right-clickingпакета на имя пакета вproject structure -> Refactor -> Rename...

Затем он дает возможность переименовать каталог или пакет. Выберите пакет. Каталог должен следовать примеру. Введите имя нового пакета и нажмите «Рефакторинг». Это изменит весь импорт и удалит лишний импорт для вас. Вы даже можете исправить это в комментариях, строках и т. Д.

Наконец , измените имя пакета соответственно в вашем AndroidManifest.xml вверх. В противном случае вы будете получать ошибки везде, жалуясь на Р. что бы то ни было.

Еще одно очень полезное решение

Сначала создайте новый пакет с нужным именем by right clicking on thejava folder -> new -> package.

Затем выберите и перетащите все ваши классы в новый пакет. AndroidStudio будет пересматривать имя пакета везде.

После этого: в вашем приложении build.gradleдобавьте / отредактируйте идентификатор приложения с новым. т.е. ( com.a.bcв моем случае):

defaultConfig {
    applicationId "com.a.bc"
    minSdkVersion 13
    targetSdkVersion 19
}

Оригинальный пост и больше комментариев здесь

вытягивали
источник
Странно, когда я это делаю, он не дает выбора директории / пакета ... только "имя модуля" ...
Толстяк
1
Он делает то же самое для меня прямо сейчас, если я щелкаю правой кнопкой мыши по корневому каталогу. По крайней мере, для меня это не мое имя пакета. Если имя вашего пакета - com.a.bc, под корневым каталогом должен быть каталог с именем bc. Вот где вы получите разные варианты. Прямо сейчас я получаю каталог или модуль. Попробуй модуль. Вы всегда можете отменить это (Ctrl + Z должен сделать это), если это что-то ломает.
вытолкнул
Спасибо ... дерьмо, вы имеете в виду каталог ".idea" или каталог "app"? Я только что опубликовал пояснительный вопрос Q. stackoverflow.com/questions/23786361/… Аааа ... Теперь я вижу "Выбор директории / модуля рефакторинга", когда я нажимаю на папку "app" .... hoy caramba!
Толстяк
@JoeBlow щелкните правой кнопкой мыши packageпод папкойjava
Абу Шумон
«Android Studio, которую, честно говоря, вы должны использовать». Помните, что вопрос был задан в 2010 году, в то время как AS даже не был объявлен до 2013 года, не говоря уже о выпуске стабильной сборки (2014). Конечно, пользователи в настоящее время должны использовать AS. :-)
LarsH
8

Без затмения:

  1. Измените имя пакета и имена действий в AndroidManifext.xml и в других местах, где оно отображается в файлах .xml (имена пользовательских представлений и т. Д.)

  2. Обновить оператор импорта пакета во всех исходных файлах

  3. Переименуйте все папки в соответствии с именем пакета. Папка местоположения:
    а. бин / классы
    б. генерал
    с. ЦСИ

  4. Обновите имя проекта в build.xml (иначе имя вашего apk не изменится)

  5. Удалите все файлы .class в bin / classes / com / example / myapp / (если вы пропустите этот шаг, файлы не будут перезаписаны во время сборки, а dex вызовет кучу проблем при обработке ошибок «имя класса не совпадает с путем»)

  6. Удалите gen / com / example / myapp / BuildConfig.java (я не знаю, почему удаление BuildConfig.class на шаге 3a не привело к тому, что dex обновил свой путь к этому, но пока я не удалил BuildConfig.java, он продолжал воссоздавать gen / com / oldapp_example / oldapp и размещение там BuildConfig.class. Я не знаю, почему у R.java из этого же места такой проблемы нет. Я подозреваю, что BuildConfig.java автоматически генерируется в процессе предварительной компиляции, но R.java не является)

Вышеуказанные 6 шагов - это то, что я сделал, чтобы изменить имя моего пакета и получить * успешную сборку. Может быть лучший способ обработать шаги 5 и 6 с помощью команд dex для обновления путей, или, возможно, отредактировав classes.dex.d в корневом каталоге проекта. Я не знаком с dex или, если все в порядке, удаляйте / редактируйте classes.dex.d, поэтому я выбрал метод удаления файлов .class, который, как я знаю, будет восстановлен в сборке. Затем я проверил classes.dex.d, чтобы увидеть, что еще нужно обновить.

* В моей сборке не осталось ошибок или предупреждений, за исключением того, что dex и apkbuilder указывают состояние «Найден удаленный целевой файл» без каких-либо подробностей о том, что это за файл. Не уверен, появляется ли это в каждой сборке, было ли это там до того, как я испортил имя моего пакета, или это результат моих удалений, и я пропускаю шаг.

clusterflux
источник
Я решил переименовать, как и вы, но с упрощением: удалите папки bin и gen. Также я не мог импортировать переименованный проект в Eclipse, пока не изменил скрытый файл .project, у него было старое имя проекта под <name>
Jose_GD
6

Следуй этим шагам:-

  • Щелкните правой кнопкой мыши на проекте.
  • Перейти к инструментам Android.
  • Нажмите на переименовать пакет приложений.
  • Измените имя пакета приложения.

СДЕЛАНО

Дипак Шарма
источник
1
Это работает, но вы должны также изменить рефакторинг имени пакета базовой папки src.
Ашишдух
6

Самый быстрый способ сделать это в Android Studio 1.3 :

  1. Измените имя пакета в manifest
  2. Перейти к Module Settings[F4]-> Flavors, в Application Idзаписи то же самое имя.
  3. Создайте новый пакет с таким именем: [right-click-> new-> package]
  4. Выберите все файлы Java вашего проекта, а затем продолжите [Right-click-> Refactor-> Move-> {Select package}-> Refactor]

PS Если вы не будете следовать этому порядку, вы можете в конечном итоге изменить все java-файлы один за другим с новым импортом и кучей ошибок времени компиляции, поэтому порядок очень важен.

Мовсар Бекаев
источник
1
При этом методе R остается неизменным посредством рефакторинга. поэтому import com.app.myapp.R НЕ ИЗМЕНЯЕТСЯ на имя нового пакета, и вы должны использовать один за другим ...
OWADVL
@OWADVL, R изменяется автоматически при перемещении файлов в новый пакет, Android Studio автоматически выполняет восстановление при перемещении файлов .java, я делаю это каждый день, и пока я соблюдаю этот порядок, я никогда ничего не меняю в файлах .java вручную
Мовсар Бекаев
Но в Eclipse мы могли бы изменить идентификатор пакета приложения, не меняя пакет всего кода. Мастер переименует ссылки на BuildConfig & R для вас. Я озадачен, что то же самое не существует в AS.
Том
5

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

  1. Щелкните правой кнопкой мыши на имени пакета, затем Refractor> Rename.
  2. Щелкните правой кнопкой мыши на имени проекта Android tools> Rename Application Package.
  3. Вручную задайте имена пакетов в манифесте, которые не были изменены предыдущими шагами.
erdomester
источник
3

У Бернштейна есть метод, используйте инструмент Eclipse «Переименовать пакет приложений», возможно, вам придется провести некоторую очистку даже после факта. Кроме того, Eclipse иногда теряет смысл, когда вы вносите изменения в проект. Возможно, вам придется использовать инструмент «Очистить проект» (в меню «Проект»). Если это не сработает, возможно, вам придется закрыть и перезапустить Eclipse. Решения Voo-Doo, но Eclipse может быть таким.

m0j0
источник
3

Я обнаружил, что самым простым решением было использовать Regexxer для замены «com.package.name» на «com.newpackage.name», а затем правильно переименовать каталоги. Супер просто, супер быстро.

robisaks
источник
3
  1. Сначала измените имя пакета в файле манифеста.
  2. Re-factor> Переименовать имя пакета в srcпапке и поставить галочку дляrename subpackages
  3. Это все, что вы сделали.
Sathirar
источник
Я пытался использовать Android-инструменты Марка Бернштейна-> Переименовать пакет приложений, но это дало мне ошибку. Это было проще, хотя я должен был исправить некоторые вещи после изменения
Дэвид-Хоз
2

Существует также другое решение для пользователей без Eclipse: просто измените атрибут пакета в теге <manifest> в AndroidManifest.xml, заменив использованное имя старого пакета новым. Примечание: Вы должны настроить все связанные операторы импорта и связанные папки в своем проекте вручную, чем тоже.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="new.package.name"
    .....
</manifest>
Как ты
источник
1

Альтернатива:

  1. Откройте AndroidManifest.xml
  2. Изменить пакет = "НОВОЕ ИМЯ" в теге манифеста.
MapleLover
источник
1
  1. Щелкните правой кнопкой мыши Project> Инструменты Android> Переименовать пакет приложений.

  2. Перейдите в src и щелкните правой кнопкой мыши по основному пакету> Refactor> Rename

  3. Перейдите к файлу манифеста и измените имя вашего пакета.

ritesh4326
источник
1

Я просто потерял несколько часов, пытаясь найти все решения. Я был уверен, проблема в моем коде - запуск apk, но некоторые ошибки при работе с различными классами и действиями.

Единственный способ работы с моим проектом:

  1. переименовать его - файл / переименовать и установить все флажки
  2. проверить на не переименованные места, я имел в одном из макетов старое имя еще в инструментах: context = "..
  3. создать новое рабочее пространство
  4. импортировать проект в новое рабочее пространство

Для меня это работает, только решение.

Dudeist
источник
1

Итак, использование IntelliJ с плагином для Android (Studio) заключалось в следующем: я поднялся AndroidManifest.xmlсверху и изменил имя пакета, щелкнув правой кнопкой мыши -> Refactor -> rename. Наше тогда название пакета состояло из четырех частей a.b.c.d, только новой a.b.c. Поэтому я переименовал первые три. Затем я пошел в каталог сгенерированных источников ( app\build\generated\source\r\development\debug\a\b\c\d), щелкнул правой кнопкой мыши по Rклассу и Refactor-> Move [d] на один пакет выше. То же самое с BuildConfigв app\build\generated\source\buildConfig\development\debug\a\b\c\d.

Используя Refactor-> Move, IntelliJ обновляет все ссылки на BuildConfigи R.

Наконец, я обновил все applicationId [s], которые нашел в gradle.build, который нашел. Я нажал «Очистить проект», «Сделать и восстановить проект». Удалил приложение с моего телефона и нажал «Играть». Все сложилось так, что рефакторинг был легким и довольно быстрым.

Рауль Пинто
источник
1

В Android Studio 1.2.2 Скажите, хотите ли вы изменить com.example.myappна org.mydomain.mynewapp Вы можете выполнить шаги в каждом из каталогов, как показано на снимке экрана ниже. Это даст вам возможность предварительного просмотра, так что вы можете просмотреть перед внесением любых изменений.

Иди Refactor -> Renameи дай свое новое имя. Вы должны сделать это для каждой из папок, скажем для com, example и myapp. Он автоматически обновит импорт, так что вам не придется беспокоиться об этом. введите описание изображения здесь

Также обновите файл, build.gradleкоторый не обновляется автоматически.

defaultConfig {
        applicationId "org.mydomain.mynewapp" //update the new package name here
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }

После этого он попросит syncсделать это. Тогда все будет хорошо. После этого я могу загрузить свой APK в магазин Google. Убедитесь, что вы подписали приложение, чтобы загрузить его в магазин.

Кришнадас ПК
источник
0
  1. В вашей Android-студии, на панели проекта, есть значок шестеренки «Нажмите на нее».
  2. Снимите флажок Компактные пустые средние пакеты
  3. Теперь каталог пакета был разбит, т.е. отдельные каталоги.
  4. Выберите каталог, который вы хотите переименовать.
  5. Щелкните правой кнопкой мыши на этом конкретном каталоге.
  6. Выберите рефакторинг и затем переименуйте опцию.
  7. Диалоговое окно было открыто, переименуйте его.
  8. После ввода нового имени, нажмите на Refactor.
  9. Затем нажмите Do Refactor внизу.
  10. Тогда андроид студия обновит все изменения.
  11. Теперь откройте файл build.gradle и обновите идентификатор приложения и синхронизируйте его.
  12. Теперь перейдите к файлу манифеста и переименуйте пакет.
  13. Перестройте свой проект.
  14. Вы сделали :)
Hanisha
источник