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

180

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

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

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

Любая идея?

mllm
источник
Щелкните левой кнопкой мыши на имени пакета и выберите Refactor -> Rename, чтобы переименовать имя пакета.
кунал
Что работает лучше всего для меня сейчас, это просто найти и заменить
MLLM
3
Вы также можете попробовать это saumya.github.io/ray/articles/72
Энди
для меня поиск и замена работали
shesh nath

Ответы:

413

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

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

В: Android / приложение / 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_build_config(
  package="MY.APP.NEW_ID"
)
android_resource(
  package="MY.APP.NEW_ID"
)

Очистка Gradle 'в конце (в папке / android ):

./gradlew clean
Cherniv
источник
23
Мне также нужно отредактировать файл BUCK, чтобы заменить старое значение пакета новым. Кстати, 2 файла MainAcitivity.java и MainApplication.java должны быть перенесены на новый физический путь.
Золотой палец
4
Я также переименовал каталог android/app/src/main/java/com/old_app_name/в, ...com/new_app_name/и это, кажется, работает.
Николай
У меня была ошибка «Не удалось завершить сеанс: INSTALL_FAILED_UPDATE_INCOMPATIBLE» до тех пор, пока я вручную не принудительно очистил симулятор устройства Android: adb uninstall my.package.name ... Таким образом, все в порядке, но симулятор Android может «держаться» за старую информацию в плохой способ заставить его выглядеть так, как будто направления не работают. (И просто удаление приложения НЕ
Билл Паттерсон
Я читал об этом, и я попробовал эту библиотеку: npmjs.com/package/react-native-rename, кажется, работает довольно хорошо для этого, он не только переименовывает приложение, но и может изменять идентификатор пакета
fray88
1
сделать это в Android / папку @Anuj
Cherniv
76

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

npm install react-native-rename -g

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

react-native-rename "MyApp" -b com.mycompany.myapp
Джавид Аль Карузи
источник
это простой и хитрый, мне просто нужно обновить MainApplication.java вручную.
Гопал Девра
59
Спасибо, сломал проект
Leap Hawk
@AkashRajput ты решил проблему? пожалуйста, дайте нам знать, если вы нашли какое-либо решение
Салим Хан
@SaleemKhan Пришлось снова создать проект. На этот раз с init-native init. Просто скопируйте файлы.
Прыжок Ястреб
5
Это сломало мой проект, и пришлось создать новый проект :(
MujtabaFR
24

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

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

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

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

Олусола Омосола
источник
4
Это самый простой способ изменить имя вашего пакета. То есть, не меняя имя локального пакета, это изменит ваш следующий пакет сборки. Спасибо! После этого делай ./gradlew cleanи потом ./gradlew app:assembleRelease.
Майкл Харли
2
«Однако applicationIdи локальное packageимя не зависят друг от друга», « applicationIdоднозначно идентифицирует ваше приложение на устройстве и в Google Play Store» - developer.android.com/studio/build/application-id
восемьдесят пять
не работает для меняNo matching client found for package name 'xxxxx'
MichaelMao
10

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

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

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. перед изменением имени вашего пакета сделайте резервную копию этих двух файлов и, после изменения имени пакета, просто верните его на место. это решение работает для меня

больше информации: Reaction-native-переименовать

Моин Хоссейни
источник
1
Не влияет, если вы не измените имя приложения «Пожалуйста, попробуйте другое имя».
Сделано в Луну
1
на самом деле, я пробую другое название для моего проекта. но когда я меняю имя своего проекта, response-native-rename удаляет эти два файла из моего проекта.
Моин Хоссейни
8

Goto Android studio

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

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

Айшвария
источник
Я думаю, это не повлияет на всю структуру проекта.
Кишан Оза
Как можно сделать с проектом React-Native JS?
Арифур Рахман
8

Сценарий инициализации генерирует уникальный идентификатор для 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/ru/dev/from-react-native-init-to-app-stores-real-quick/

Атул Ядав
источник
7

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

меняется com.myappнаcom.mycompany.myapp

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

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

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

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

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

Варун Кумар
источник
5

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

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

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

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)

Кьелл
источник
2

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

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

Киран Д.Д.
источник
2

использование npx react-native-rename <newName>

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

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

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

$ git checkout -b rename-app

Затем переименуйте ваше приложение в $ npx response-native-rename "Приложение для путешествий"

С пользовательским идентификатором пакета

$ 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

Фархад Кабир
источник
1

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

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

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

Хосе КДж
источник
1
Не удаляйте папку android, если вы уже выполнили официальные инструкции по созданию хранилища ключей, так как оно удалит хранилище ключей и вы не сможете снова подписать новое приложение.
Ivotje50
2
Не делай этого! У вас может быть тонна пользовательского кода в коде Android, который не будет воссоздан
pie6k
1

Перейдите в Android Studio, откройте приложение, щелкните правой кнопкой мыши на Java и выберите New, а затем Package.

Дайте имя, которое вы хотите (например, com.something).

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

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

Перейти к Android Studio, построить, очистить проект, перестроить проект.

Готово!

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

Фотис Цакирис
источник
1

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

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

npm install react-native-rename -g

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

react-native-rename "NewNameOfApp" -b com.companyname.newnameofapp
Waqar UlHaq
источник
0

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

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

AndroidManifest.xml

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

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

Гита Туласи Балам
источник
0

Просто с помощью инструмента поиска и замены моей IDE добились цели.

Tenesse
источник
0

После запуска этого:

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

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

defaultConfig {
        applicationId:com.appname.xxx
........
}
Newtoxton
источник
-3

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

Обновить :

attr android: ярлык приложения Element как:

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

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

и

attr android: ярлык активности Элемента как:

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

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

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

Аншул Сингх
источник
2
Я, честно говоря, не думаю, что этот ответ должен был быть отвергнут настолько, насколько это было. Однако этот ответ никак не решить , что был задан вопрос - как изменить имя пакета . Тем не менее, он отвечает на вопрос «как изменить название приложения, которое появляется в панели запуска». Это актуальный ответ? На самом деле, нет. Содержит ли она полезную информацию? Да. Поэтому я предлагаю вам найти вопрос, который спрашивает о названии лаунчера и выложить свое решение там вместо того , чтобы здесь.
Дев-