Изменить имя пакета для Android в React Native

Я использовал react-native init MyApp для инициализации нового приложения React Native. Это создало, среди прочего, проект Android с пакетом com.myapp.

Как лучше всего изменить имя этого пакета, например, на com.mycompany.myapp?

Я попытался изменить его в AndroidManifest.xml, но возникли другие ошибки, поэтому я предполагаю, что это не так.

Любая идея?


person mllm    schedule 23.05.2016    source источник
comment
Щелкните левой кнопкой мыши имя пакета и выберите Refactor - ›Rename, чтобы переименовать имя пакета.   -  person kunal    schedule 23.05.2016
comment
Что сейчас лучше всего работает для меня, это просто найти и заменить   -  person mllm    schedule 29.05.2016
comment
Вы также можете попробовать это saumya.github.io/ray/articles/72   -  person Andy    schedule 22.02.2017
comment
для меня поиск и замена работали   -  person Sheshnath    schedule 28.08.2019
comment
Прагматический подход: 1- npx react-native init MycompanyMyapp, 2- Измените только applicationId "com.mycompany.myapp" в android/app/build.gradle. Однако идентификатор приложения и имя пакета не зависят друг от друга - developer.android.com/ studio / build / application-id   -  person eightyfive    schedule 29.03.2020


Ответы (25)


Я переименовал подпапку проекта из: android / app / src / main / java / MY / APP / OLD_ID / в: android / app / src / main / java / MY / APP / NEW_ID /

Затем вручную поменяли идентификаторы старого и нового пакетов:

В: android / app / src / main / java / MY / APP / NEW_ID / MainActivity.java:

package MY.APP.NEW_ID;

В android / app / src / main / java / MY / APP / NEW_ID / MainApplication.java:

package MY.APP.NEW_ID;

В android / app / src / main / AndroidManifest.xml:

package="MY.APP.NEW_ID"

И в android / app / build.gradle:

applicationId "MY.APP.NEW_ID"

В android / app / BUCK:

android_build_config(
  package="MY.APP.NEW_ID"
)
android_resource(
  package="MY.APP.NEW_ID"
)

Окончательная очистка Gradle (в папке / android):

./gradlew clean
person Ivan Chernykh    schedule 23.05.2016
comment
Мне также нужно отредактировать файл BUCK, чтобы заменить старое значение пакета новым. Кстати, 2 файла MainAcitivity.java и MainApplication.java следует переместить на новый физический путь. - person Golden Thumb; 30.08.2016
comment
Я также переименовал каталог android/app/src/main/java/com/old_app_name/ в ...com/new_app_name/, и, похоже, он работает. - person nicholas; 08.03.2017
comment
У меня была ошибка Не удалось завершить сеанс: INSTALL_FAILED_UPDATE_INCOMPATIBLE, пока я не принудительно очистил симулятор устройства Android вручную: adb uninstall my.package.name ... Итак, направления в порядке, но симулятор Android может удерживать старую информацию плохо, что делает похоже, направления не работают. (И простое удаление приложения НЕ исправило этого!) - person Bill Patterson; 11.06.2017
comment
Я читал об этом и попробовал эту библиотеку: npmjs.com/package/react-native -rename, похоже, отлично работает для этого, он не только переименовывает приложение, но также может изменять идентификатор пакета - person fray88; 19.07.2017
comment
не забудьте также изменить applicationId в app/build.gradle - person MujtabaFR; 28.06.2018
comment
А как насчет android/settings.gradle файла? (в частности rootProject.name = 'OLD_ID') - person arcol; 24.08.2018
comment
Ой, и android/app/src/main/res/values/strings.xml и app_name внутри этого файла. - person arcol; 24.08.2018
comment
bash: ./gradlew: Нет такого файла или каталога, которые я получаю. - person Anuj; 20.09.2018
comment
сделайте это в папке android / @Anuj - person Ivan Chernykh; 20.09.2018
comment
@Cherniv, как вы получили имя пакета MY.APP.OLD_ID. Я имею в виду, что реагировать на native создает MY.APP? Я пытаюсь получить трехуровневое имя пакета - person Farid; 29.01.2019
comment
Мне нужно было удалить старый путь и контент, тогда он сработал - person santhosh; 05.02.2019
comment
эти инструкции работали как первый шаг. Однако мне также пришлось снова синхронизировать с gradle в проекте Android Studio, иначе я получал бы ошибки во время сборки. - person Augusto Samamé Barrientos; 27.09.2019
comment
не забывайте правила Proguard, если таковые имеются - person Vaibhav Vishal; 31.01.2020
comment
Ответ был отличным и полезным. Было бы неплохо иметь также информацию об изменении имени пакета iOS. - person LadyWoodi; 10.02.2020
comment
Мне также пришлось переименовать файл импорта BasePackageList в MainApplication и в android/app/src/main/generated/BasePackageList.java - person Tobi Oyelekan; 16.06.2020
comment
Для RN ​​0.60+ есть еще один LoC, который нужно изменить в MainApplication#initializeFlipper: Class<?> aClass = Class.forName("MY.APP.NEW_ID"); - person Jasper Kuperus; 15.07.2020
comment
полезно выполнить поиск по всему проекту () для com.appName и заменить их все на com.companyName.appName. И если вы делаете это с помощью VScode, не забудьте отключить «Использовать параметры исключения» и «Игнорировать файлы». - person Chenhua; 22.08.2020
comment
если вы используете firebase, вам также необходимо заменить старое значение пакета в двух экземплярах package_name в google-services.json - person Rubek Joshi; 15.09.2020
comment
Сработало отлично! - person Robert Kaločai; 10.02.2021
comment
Большое спасибо, брат. - person sanjeev shetty; 25.03.2021
comment
и тоже измените файл app.json - person samira; 06.05.2021

Я использую пакет npm response-native-rename *. Установите его через

npm install react-native-rename -g

Затем из корня вашего проекта React Native выполните следующее:

react-native-rename "MyApp" -b com.mycompany.myapp
person Javid Al Karuzi    schedule 17.09.2017
comment
это просто и сложно, мне просто нужно обновить MainApplication.java вручную. - person Gopal Devra; 09.11.2017
comment
Спасибо, сломал проект - person Leap Hawk; 17.03.2018
comment
@AkashRajput вы исправили свою проблему? пожалуйста, дайте нам знать, если вы нашли какое-либо решение - person Saleem Khan; 18.03.2018
comment
@SaleemKhan Пришлось создавать проект заново. На этот раз с init-native init .. Просто скопируйте файлы. - person Leap Hawk; 18.03.2018
comment
спасибо @AkashRajput :) но я имел в виду проблему переименования. Вы придумали, как это сделать? - person Saleem Khan; 19.03.2018
comment
@SaleemKhan в iOS просто измените идентификатор пакета, а в Android Studio сделайте справочник по ручному рефакторингу: saumya.github .io / ray / article / 72. - person Leap Hawk; 19.03.2018
comment
Это сломало мой проект, и пришлось создать новый проект :( - person MujtabaFR; 28.06.2018
comment
@AchaBill Этот ответ с 2017 года все изменилось с тех пор ... будьте осторожны. - person Dror Bar; 03.11.2019
comment
Работает как шарм в react-native: 0.63.4, Спасибо за то, что сэкономили мое время. :) - person ZearaeZ; 25.03.2021
comment
Это сработало для меня. На всякий случай обязательно создайте ветку git: git checkout -b newBranchName - person Caio Mar; 19.05.2021

Чтобы изменить имя пакета с com.myapp на: com.mycompany.myapp (например),

  1. Для приложения iOS приложения React используйте xcode - под общим.
  2. Для приложения Android откройте build.gradle на уровне модуля. Тот, что в папке android/app. Ты найдешь
// ...
defaultConfig {
     applicationId com.myapp
     // ...
}
// ...

Измените com.myapp на то, что вам нужно.

Надеюсь это поможет.

person Olusola Omosola    schedule 02.07.2018
comment
Это самый простой способ изменить имя вашего пакета. Тем не менее, без изменения имени локального пакета, это изменит ваш следующий пакет сборки. Спасибо! После этого выполните ./gradlew clean, а затем ./gradlew app:assembleRelease. - person Michael Harley; 31.10.2019
comment
Однако applicationId и локальное package имя не зависят друг от друга, applicationId однозначно идентифицирует ваше приложение на устройстве и в Google Play Store - developer.android.com/studio/build/application-id - person eightyfive; 29.03.2020
comment
у меня не работает No matching client found for package name 'xxxxx' - person MichaelMao; 18.05.2020
comment
Для изменения имени пакета android я столкнулся с этой ошибкой и исправил stackoverflow.com/questions/35131769/ - person samhoooo; 13.04.2021

вы можете просто использовать пакет npm response-native-rename.

Установить с помощью

npm install react-native-rename -g

Затем из корня вашего проекта React Native выполните следующие

react-native-rename "MyApp" -b com.mycompany.myapp

react-native-rename on npm

но обратите внимание, что эта библиотека удаляет ваши MainActivity.java и MainApplication.java. перед изменением имени пакета сделайте резервную копию этих двух файлов и после изменения имени пакета просто верните его на место. это решение работает для меня

дополнительная информация: react-native-rename

person Moein Hosseini    schedule 30.01.2019
comment
Нет эффекта, если вы не измените имя приложения. Попробуйте другое имя. - person Made in Moon; 26.03.2019
comment
на самом деле, я пробую другое название для своего проекта. но когда я меняю имя проекта, response-native-rename удаляет эти два файла из моего проекта. - person Moein Hosseini; 27.03.2019

Goto Android studio

Щелкните правой кнопкой мыши свой пакет (скорее всего, com) -> Refractor -> Rename -> Введите новое имя пакета в диалоговом окне -> Do Refractor

Он везде переименует имя вашего пакета.

person Aishwarya    schedule 27.03.2018
comment
Думаю, это не повлияет на всю структуру проекта. - person Kishan Oza; 09.07.2018
comment
Как можно поступить с проектом React-Native JS? - person Arifur Rahman; 28.12.2018

Если вы используете Android Studio-

изменение com.myapp на com.mycompany.myapp

  1. создать новую иерархию пакетов com.mycompany.myapp в android/app/src/main/java

  2. Скопируйте все классы с com.myapp на com.mycompany.myapp с помощью графического интерфейса Android Studio.

  3. Студия Android позаботится о том, чтобы указать подходящее имя пакета для всех скопированных классов. Это полезно, если у вас есть несколько настраиваемых модулей и вы не хотите вручную заменять все файлы .java.

  4. Обновите android/app/src/main/AndroidManifest.xml и android/app/build.gradle (замените com.myapp на com.mycompany.myapp

  5. Синхронизировать проект (сборка gradle)

person Varun Kumar    schedule 15.01.2018

Сценарий инициализации генерирует уникальный идентификатор для Android на основе имени, которое вы ему дали (например, com.acmeapp для AcmeApp).

Вы можете увидеть, какое имя было сгенерировано, посмотрев ключ applicationId в android/app/build.gradle.

Если вам нужно изменить этот уникальный идентификатор, сделайте это сейчас, как описано ниже:

В папке /android замените все вхождения com.acmeapp на com.acme.app

Затем измените структуру каталогов с помощью следующих команд:

mkdir android/app/src/main/java/com/acme

mv android/app/src/main/java/com/acmeapp android/app/src/main/java/com/acme/app

Вам нужен уровень папки для каждой точки в идентификаторе приложения.

Источник: https://blog.elao.com/en/dev/from-react-native-init-to-app-stores-real-quick/

person Atul Yadav    schedule 18.08.2018

Самый простой:

npx react-native-rename YourNewAppName -b com.YourCompanyName.YourNewAppName

person Park Keeper    schedule 02.08.2020
comment
ПРЕДУПРЕЖДЕНИЕ - похоже, что этот пакет не поддерживался много лет назад. - person Samih A; 14.06.2021

У меня есть решение, основанное на ответе @Cherniv (у меня работает на macOS). Два отличия: у меня есть Main2Activity.java в папке java, с которой я делаю то же самое, и я не беспокоюсь о вызове ./gradlew clean, поскольку похоже, что собственный упаковщик в любом случае делает это автоматически.

В любом случае, мое решение делает то же, что и Чернов, за исключением того, что я создал для него сценарий оболочки bash, поскольку я создаю несколько приложений с использованием одного набора кода и хочу иметь возможность легко изменять имя пакета при каждом запуске сценариев npm.

Вот сценарий bash, который я использовал. Вам нужно будет изменить packageName, который вы хотите использовать, и добавить к нему все, что хотите ... но вот основы. Вы можете создать файл .sh, дать разрешение, а затем запустить его из той же папки, из которой вы запускаете response-native:

rm -rf ./android/app/src/main/java


mkdir -p ./android/app/src/main/java/com/MyWebsite/MyAppName
    packageName="com.MyWebsite.MyAppName"
    sed -i '' -e "s/.*package.*/package "$packageName";/" ./android/app/src/main/javaFiles/Main2Activity.java
    sed -i '' -e "s/.*package.*/package "$packageName";/" ./android/app/src/main/javaFiles/MainActivity.java
    sed -i '' -e "s/.*package.*/package "$packageName";/" ./android/app/src/main/javaFiles/MainApplication.java
    sed -i '' -e "s/.*package=\".*/    package=\""$packageName"\"/" ./android/app/src/main/AndroidManifest.xml
    sed -i '' -e "s/.*package = '.*/  package = '"$packageName"',/" ./android/app/BUCK
    sed -i '' -e "s/.*applicationId.*/    applicationId \""$packageName"\"/" ./android/app/build.gradle

    cp -R ./android/app/src/main/javaFiles/ ./android/app/src/main/java/com/MyWebsite/MyAppName

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: сначала вам нужно отредактировать комментарий MainApplication.java в нижней части java-файла. В комментарии есть слово "пакет". Из-за того, как работает сценарий, он берет любую строку со словом «пакет» и заменяет ее. Из-за этого этот сценарий не может быть адаптирован для будущего, поскольку это же слово может использоваться где-то еще.

Второй отказ от ответственности: первые 3 команды sed редактируют файлы java из каталога с именем javaFiles. Я создал этот каталог сам, так как хочу иметь один набор java-файлов, которые копируются оттуда (так как в будущем я могу добавлять в него новые пакеты). Вы, вероятно, захотите сделать то же самое. Поэтому скопируйте все файлы из папки java (просмотрите ее подпапки, чтобы найти фактические файлы java) и поместите их в новую папку с именем javaFiles.

Третий отказ от ответственности: вам нужно отредактировать переменную packageName, чтобы она соответствовала путям вверху и внизу скрипта (от com.MyWebsite.MyAppName до com / MyWebsite / MyAppName)

person Kjell    schedule 03.06.2017

В VS Code нажмите Ctrl + Shift + F и введите свое старое имя пакета в поле «Найти» и введите новый пакет в поле «Заменить». Затем нажмите «Заменить все вхождения».

Определенно не прагматичный путь. Но это помогло мне.

person Kiran JD    schedule 24.05.2019
comment
Это отлично работало на Mac .. В моем случае у меня есть проект RN на iOS и Android. Мне просто нужно было убедиться, что я не вносил никаких изменений в проект iOS. - person cy-c; 11.04.2021

Используйте 1_

С пользовательским идентификатором пакета (только для Android. Для iOS используйте Xcode)

$ npx react-native-rename <newName> -b <bundleIdentifier>

Сначала переключитесь на новую ветку (необязательно, но рекомендуется)

$ git checkout -b rename-app

Затем переименуйте свое приложение в $ npx react-native-rename "Travel App".

С настраиваемым идентификатором пакета

$ npx react-native-rename "Travel App" -b com.junedomingo.travelapp 

После изменения имени убедитесь, что вы зашли в папку Android и запустите gradlew clean. затем вернитесь к основному проекту и запустите npx react-native run-android.

Также, если у вас есть файл google-services.json в вашем предыдущем проекте, измените его соответствующим образом на новый ... тогда вам хорошо :)

Подробнее см. Здесь https://github.com/junedomingo/react-native-rename#readme < / а>

person Farhad Kabir    schedule 19.01.2020

Перейдите в Android Studio, откройте приложение, щелкните правой кнопкой мыши java и выберите «Создать», а затем «Пакет».

Дайте желаемое имя (например, com.something).

Переместите файлы из другого пакета (вы хотите переименовать) в новый пакет. Удалите старый пакет.

Перейдите в свой проект в редакторе и используйте ярлык для поиска во всех файлах (на Mac это shift cmd F). Введите имя вашего старого пакета. Измените все ссылки на новое имя пакета.

Перейдите в Android Studio, Build, Clean Project, Rebuild Project.

Выполнено!

Удачного кодирования :)

person Fotis Tsakiris    schedule 28.05.2019

Я использовал пакет response-native-rename.

В терминале запустите команду для установки:

npm install react-native-rename -g

В корне вашего проекта React Native выполните следующую команду:

react-native-rename "NewNameOfApp" -b com.companyname.newnameofapp
person Waqar UlHaq    schedule 10.11.2019

Если вы используете VSCode и Windows.

1. Нажмите Control + Shift + F.

2. Найдите свои Package Name и Replace All с помощью своего new Package Name.

  1. тип "cd android"

  2. тип "./gradlew clean"

person sam kihonge    schedule 10.11.2020

Выполните простые шаги, чтобы переименовать ваши app name и Package name, если вы не вносили никаких изменений в папку Android (например, сценарий, в котором вы только что инициализировали проект)

  1. Просто измените name в файле package.json по своему усмотрению и сохраните его.
  2. Удалите папку с именем android
  3. запустите команду react-native upgrade

Примечание. Как указано в комментарии ivoteje50, не удаляйте папку Android, если вы уже следовали официальным инструкциям. для создания хранилища ключей, поскольку оно удалит хранилище ключей, и вы не сможете снова подписать новое приложение.

person Jose Kj    schedule 07.09.2018
comment
Не удаляйте папку android, если вы уже выполнили официальные инструкции по созданию хранилища ключей, поскольку это приведет к удалению хранилища ключей, и вы не сможете снова подписать новое приложение. - person Ivotje50; 10.02.2019
comment
Не делай этого! У вас может быть тонны пользовательского кода в коде Android, который не будет воссоздан - person Adam Pietrasiak; 16.05.2019

После запуска:

react-native-rename "MyApp" -b com.mycompany.myapp

Не забудьте также перейти к Build.gradle в android/app/... и переименовать идентификатор приложения, как показано ниже:

defaultConfig {
        applicationId:com.appname.xxx
........
}
person Newtoxton    schedule 25.06.2020

Перед изменением имени вашего собственного пакета React! сделайте резервную копию файлов MainActivity.java и MainApplication.java. Поскольку эта библиотека удаляет ваши MainActivity.java и MainApplication.java.

после этого вы можете просто использовать пакет npm response-native-rename.

Установить

npm install react-native-rename -g

Затем из корня вашего проекта React Native выполните следующие

response-native-rename новое_имя_проекта -b com.mycompany.newprojectname

наконец, вы можете проверить это имя вашего нового пакета в вашем AndroidManifest.xml. Не забудьте переименовать имя пакета в своих MainActivity.java и MainApplication.java.

Спасибо.

person JRV    schedule 06.01.2021
comment
Теперь npm install -g react-native-rename не требуется. Запуск npx react-native-rename "new_project_name" -b com.mycompany.newprojectname возможен. Кроме того, вам необходимо вручную исправить такие файлы, как google-services.json. - person Amil Waduwawara; 21.06.2021

react-native-rename отлично работал для переименования приложения и идентификатора пакета для моего проекта на день написания этого ответа.

  1. Чтобы обновить название приложения: npx react-native-rename "New App Label"

  2. Чтобы обновить идентификатор пакета: npx react-native-rename -b "appname.example.com"

person Sudeep Bashistha    schedule 26.07.2021

Вы можете использовать пакет response-native-rename, который примет все необходимые изменения имени пакета в

приложение / mainapplication.java

AndroidManifest.xml

но не забудьте вручную изменить имя пакета для всех файлов в папке java / com. потому что, когда я создал действие экрана-заставки, старое имя пакета не обновляется.

https://www.npmjs.com/package/react-native-rename

person Geetha Tulasi Balam    schedule 21.11.2019

Просто использование инструмента поиска и замены в моей среде IDE помогло.

person Tenesse    schedule 15.03.2020

очень простой способ:

cd /your/project/dir

запустите эту команду:

grep -rl "com.your.app" . | xargs sed -i 's/com.your.app/com.yournew.newapp/g'

переименуйте вашу папку

android/app/src/main/java/com/your/app

изменить на

android/app/src/main/java/com/yournew/newapp
person Ansyori    schedule 16.11.2020

Чтобы изменить пакет, я искал и пробовал много методов, но некоторые из них очень сложны, а некоторые устарели. Во время поиска я нашел веб-сайт, на котором обсуждается очень простой метод, который был протестирован, и лично я также использовал его. Ссылка: https://www.geoclassifieds.in/2021/02/change-package-name-react-native.html

person Pankaj    schedule 12.02.2021
comment
ссылка не работает. Правило Stackoverflow гласит, что лучше описывать здесь, чем публиковать ссылки. - person ZeroCho; 10.06.2021

После переименования имени пакета везде, от студии Android. Файл - ›Недействительные кеши / перезагрузка может исправить этот тип ошибок.

это сработало для меня

person Nikhil bhatia    schedule 15.03.2021

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

 1. android/app/src/main/java/com/reactNativeSampleApp/MainActivity.java
 2. android/app/src/main/java/com/reactNativeSampleApp/MainApplication.java
 3. android/app/src/main/AndroidManifest.xml
 4. android/app/build.gradle

Первые 2 файла имеют название пакета, как показано ниже.

 package com.WHATEVER_YOUR_PACKAGE_NAME_IS;

Измените его на желаемое имя пакета.

 package com.YOUR_DESIRED_PACKAGE_NAME;

Вам также необходимо изменить имя пакета в двух других файлах.

  android/app/build.gradle

  android/app/src/main/AndroidManifest.xml

Обратите внимание: если в вашем проекте есть файл google-services.json, вам также необходимо изменить имя пакета в этом файле.

После этого вам нужно очистить свой проект ./gradlew.

person Muhammad Haidar    schedule 02.07.2021

Перейдите в файл android / app / src / main / AndroidManifest.xml -

Обновлять :

attr android: label элемента application как:

Старое значение - android: label = "@ string / app_name"

Новое значение - android: label = "(строка, которую вы хотите поместить)"

а также

attr android: label элемента activity как:

Старое значение - android: label = "@ string / app_name"

Новое значение - android: label = "(строка, которую вы хотите поместить)"

Сработало для меня, надеюсь, поможет.

person Anshul Singh    schedule 23.05.2016
comment
Честно говоря, я не думаю, что этот ответ должен был быть настолько отрицательным, насколько это было раньше. Однако этот ответ не касается того, что было задано в вопросе - как изменить имя пакета. Тем не менее, он отвечает на вопрос, как изменить название приложения, которое отображается в панели запуска. Это уместный ответ? Не совсем. Содержит ли он полезную информацию? да. Поэтому я предлагаю вам найти вопрос, касающийся названия средства запуска, и опубликовать свое решение там, а не здесь. - person Dev-iL; 10.03.2017