Cambiar el nombre del paquete para Android en React Native

179

Solía react-native init MyAppinicializar una nueva aplicación React Native. Esto creó, entre otros, un proyecto de Android con el paquete com.myapp.

¿Cuál es la mejor manera de cambiar el nombre de este paquete, por ejemplo a com.mycompany.myapp:?

Intenté cambiarlo AndroidManifest.xmlpero creó otros errores, así que supongo que no es así.

¿Alguna idea?

mllm
fuente
Haga clic izquierdo en el nombre del paquete y vaya a Refactor -> Cambiar nombre para cambiar el nombre del paquete.
kunal
Lo que funciona mejor para mí ahora es solo buscar y reemplazar
mllm
3
También puedes probar esto saumya.github.io/ray/articles/72
Andy
para mí buscar y reemplazar trabajado
shesh nath

Respuestas:

411

Cambié el nombre de la subcarpeta del proyecto de: " android / app / src / main / java / MY / APP / OLD_ID / " a: " android / app / src / main / java / MY / APP / NEW_ID / "

Luego, cambió manualmente los identificadores de paquete antiguos y nuevos:

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

package MY.APP.NEW_ID;

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

package MY.APP.NEW_ID;

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

package="MY.APP.NEW_ID"

Y en android / app / build.gradle :

applicationId "MY.APP.NEW_ID"

En android / app / BUCK :

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

Limpieza de Gradle al final (en la carpeta / android ):

./gradlew clean
Cherniv
fuente
23
También necesito editar el archivo BUCK para reemplazar el valor del paquete antiguo con el nuevo. Por cierto, los 2 archivos MainAcitivity.java y MainApplication.java deben reubicarse en la nueva ruta física.
Golden Thumb
44
También cambió el nombre del directorio android/app/src/main/java/com/old_app_name/a ...com/new_app_name/y parece que funciona.
Nicholas
Tuve el error "No se pudo finalizar la sesión: INSTALL_FAILED_UPDATE_INCOMPATIBLE" hasta que forcé manualmente la limpieza del simulador de dispositivo Android: desinstalar adb my.package.name ... Así que las instrucciones están bien, pero el simulador de Android puede "retener" la información anterior en un mala manera que hace que parezca que las instrucciones no funcionan. (¡Y simplemente desinstalar la aplicación NO solucionó esto!)
Bill Patterson
Estaba leyendo sobre esto y probé esta biblioteca: npmjs.com/package/react-native-rename parece estar funcionando bastante bien para esto, no solo cambia el nombre de la aplicación sino que también puede cambiar el identificador del paquete
fray88
1
hacerlo en android / folder @Anuj
Cherniv
76

Yo uso el paquete react-native-rename * npm. Instalarlo a través de

npm install react-native-rename -g

Luego, desde la raíz de su proyecto React Native, ejecute lo siguiente:

react-native-rename "MyApp" -b com.mycompany.myapp
Javid Al Karuzi
fuente
eso es simple y complicado, solo necesito actualizar MainApplication.java manualmente.
Gopal Devra
59
Gracias, rompió el proyecto
Leap Hawk
@AkashRajput, ¿solucionó su problema? háganos saber si encontró alguna solución
Saleem Khan
@SaleemKhan Tuvo que crear el proyecto nuevamente. Esta vez con react-native init .. Solo copia los archivos.
Leap Hawk
55
Rompió mi proyecto y tuve que crear un nuevo proyecto :(
MujtabaFR
24

Para cambiar el nombre del paquete de com.myappa: com.mycompany.myapp(por ejemplo),

  1. Para la aplicación iOS de la aplicación react, use xcode - en general.
  2. Para la aplicación de Android, abra build.gradle a nivel de módulo. El de la android/appcarpeta. Usted encontrará
// ...
defaultConfig {
     applicationId com.myapp
     // ...
}
// ...

Cambia com.myappa lo que necesites.

Espero que esto ayude.

Olusola Omosola
fuente
44
Esta es la forma más fácil de cambiar el nombre de su paquete. Aunque, no cambiar el nombre de su paquete local, esto cambiará su próximo paquete de compilación. ¡Gracias! Después de hacer esto, hazlo ./gradlew cleany luego ./gradlew app:assembleRelease.
Michael Harley
2
"Sin embargo, el applicationIdy el packagenombre local son independientes entre sí", " applicationIdidentifica de forma exclusiva su aplicación en el dispositivo y en Google Play Store" - developer.android.com/studio/build/application-id
ochenta
no funciona para míNo matching client found for package name 'xxxxx'
MichaelMao
10

simplemente puede usar el paquete npm react-native-rename.

Instalar usando

npm install react-native-rename -g

Luego, desde la raíz de su proyecto React Native, ejecute lo siguiente

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

react-native-rename on npm

pero ten en cuenta que esta lib elimina tu MainActivity.javay MainApplication.java. antes de cambiar el nombre de su paquete, haga una copia de seguridad de estos dos archivos y, después de cambiar el nombre del paquete, vuelva a colocarlo en su lugar. esta solución me funciona

más información: react-native-rename

Moein Hosseini
fuente
1
Sin efecto si no cambia el nombre de la aplicación "Intente con un nombre diferente".
Hecho en Luna
1
En realidad, intento un nombre diferente para mi proyecto. pero cuando cambio el nombre de mi proyecto react-native-rename elimina esos dos archivos de mi proyecto.
Moein Hosseini
8

Ir a estudio de Android

Haga clic derecho en su paquete (probablemente com) -> Refractor -> Cambiar nombre -> Ingrese el nuevo nombre del paquete en el cuadro de diálogo -> Hacer refractor

Cambiará el nombre de su paquete en todas partes.

Aishwarya
fuente
Supongo que no afectará a toda la estructura del proyecto.
Kishan Oza
¿Cómo se puede hacer con el proyecto React-Native JS?
Arifur Rahman
8

El script de inicio genera un identificador único para Android basado en el nombre que le dio (por ejemplo, com.acmeapppara AcmeApp).

Puede ver qué nombre se generó buscando la clave de ID de aplicación android/app/build.gradle.

Si necesita cambiar ese identificador único, hágalo ahora como se describe a continuación:

En el /android carpeta, reemplace todas las apariciones de com.acmeappporcom.acme.app

Luego cambie la estructura del directorio con los siguientes comandos:

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

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

Necesita un nivel de carpeta para cada punto en el identificador de la aplicación.

Fuente: https://blog.elao.com/en/dev/from-react-native-init-to-app-stores-real-quick/

Atul Yadav
fuente
7

Si estás usando Android Studio-

cambiando com.myappacom.mycompany.myapp

  1. crear una nueva jerarquía de paquetes com.mycompany.myapp bajo android/app/src/main/java

  2. Copiar todas las clases a partir com.myappde com.mycompany.myappusar interfaz gráfica de usuario de Android estudio

  3. Android Studio se encargará de poner el nombre del paquete adecuado para todas las clases copiadas. Esto es útil si tiene algunos módulos personalizados y no desea reemplazarlos manualmente en todos los archivos .java.

  4. Actualizar android/app/src/main/AndroidManifest.xmly android/app/build.gradle(reemplazar com.myappacom.mycompany.myapp

  5. Sincronizar el proyecto (construcción de gradle)

Varun Kumar
fuente
5

Tengo una solución basada en la respuesta de @ Cherniv (funciona en macOS para mí). Dos diferencias: tengo un Main2Activity.java en la carpeta java con el que hago lo mismo, y no me molesto en llamar a ./gradlew clean ya que parece que el paquete react-native lo hace automáticamente de todos modos.

De todos modos, mi solución hace lo que hace Cherniv, excepto que hice un script de shell bash para ello, ya que estoy construyendo múltiples aplicaciones usando un conjunto de código y quiero poder cambiar fácilmente el nombre del paquete cada vez que ejecuto mis scripts npm.

Aquí está el script bash que utilicé. Tendrá que modificar el packageName que desea usar y agregar cualquier otra cosa que desee ... pero aquí están los conceptos básicos. Puede crear un archivo .sh, otorgar permiso y luego ejecutarlo desde la misma carpeta desde la que ejecuta react-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

DESCARGO DE RESPONSABILIDAD: Primero deberá editar el comentario de MainApplication.java cerca del final del archivo java. Tiene la palabra 'paquete' en el comentario. Debido a cómo funciona el script, toma cualquier línea con la palabra 'paquete' y lo reemplaza. Debido a esto, es posible que este script no esté preparado para el futuro, ya que podría usarse la misma palabra en otro lugar.

Segundo descargo de responsabilidad: los primeros 3 comandos sed editan los archivos java desde un directorio llamado javaFiles. Creé este directorio yo mismo porque quiero tener un conjunto de archivos java que se copian desde allí (ya que podría agregarle nuevos paquetes en el futuro). Probablemente quieras hacer lo mismo. Copie todos los archivos de la carpeta java (vaya a través de sus subcarpetas para encontrar los archivos java reales) y colóquelos en una nueva carpeta llamada javaFiles.

Tercer descargo de responsabilidad: deberá editar la variable packageName para que esté en línea con las rutas en la parte superior del script y en la parte inferior (com.MyWebsite.MyAppName para com / MyWebsite / MyAppName)

Kjell
fuente
2

En VS Code, presione Ctrl + Shift + Fe ingrese su antiguo nombre de paquete en 'Buscar' e ingrese su nuevo paquete en 'Reemplazar'. Luego presione 'Reemplazar todas las ocurrencias'.

Definitivamente no es la forma pragmática. Pero, ha hecho el truco para mí.

Kiran JD
fuente
2

Utilizar npx react-native-rename <newName>

Con el Identificador de paquete personalizado (solo Android. Para iOS, utilice Xcode)

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

Primero, cambie a una nueva sucursal (opcional pero recomendado)

$ git checkout -b rename-app

Luego, cambie el nombre de su aplicación $ npx react-native-rename "Aplicación de viaje"

Con identificador de paquete personalizado

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

Después de cambiar el nombre, asegúrese de ir a la carpeta de Android y ejecutar gradlew clean. luego regrese al proyecto principal y ejecútelo npx react-native run-android.

Además, si tiene el archivo google-services.json en su proyecto anterior, cambie en consecuencia con el nuevo ... entonces está listo para ir :)

Ver más aquí https://github.com/junedomingo/react-native-rename#readme

Farhad Kabir
fuente
1

Siga los sencillos pasos para cambiarle el nombre app namey, Package nameen caso de que no haya realizado ningún cambio personalizado en la carpeta de Android (es decir, escenario en el que acaba de inicializar el proyecto)

  1. Simplemente cambie el nameen elpackage.json archivo como sea necesario y guardarlo.
  2. Eliminar la carpeta llamada android
  3. ejecuta el comando react-native upgrade

Nota: Como ivoteje50 mencionó en el comentario, no elimine la carpeta de Android si ya ha seguido las instrucciones oficiales para generar un almacén de claves, ya que eliminará el almacén de claves y no podrá volver a firmar una nueva aplicación.

Jose Kj
fuente
1
No elimine la carpeta de Android si ya ha seguido las instrucciones oficiales para generar un almacén de claves, ya que eliminará el almacén de claves y no podrá volver a firmar una nueva aplicación.
Ivotje50
2
¡No lo hagas! Es posible que tenga toneladas de código personalizado en el código de Android que no se recreará
pie6k
1

Vaya a Android Studio, abra la aplicación, haga clic derecho en Java y elija Nuevo y luego Paquete.

Dé el nombre que desea (por ejemplo, com. Algo).

Mueva los archivos del otro paquete (desea cambiar el nombre) al nuevo Paquete. Eliminar el paquete anterior.

Vaya a su proyecto en su editor y use el acceso directo para buscar en todos los archivos (en mac es shift cmd F). Escriba el nombre de su paquete anterior. Cambie todas las referencias al nuevo nombre del paquete.

Vaya a Android Studio, Build, Clean Project, Rebuild Project.

¡Hecho!

Feliz codificación :)

Fotis Tsakiris
fuente
1

He usado el paquete react-native-rename .

En la terminal, ejecute el comando para instalar:

npm install react-native-rename -g

En la raíz de su proyecto React Native, ejecute el siguiente comando:

react-native-rename "NewNameOfApp" -b com.companyname.newnameofapp
Waqar UlHaq
fuente
0

Puede usar el paquete react-native-rename que tomará todos los cambios necesarios del nombre del paquete en

app / mainapplication.java

AndroidManifest.xml

pero asegúrese de cambiar manualmente el nombre del paquete de todos los archivos en la carpeta java / com. porque cuando creé una actividad de pantalla de bienvenida, el antiguo nombre del paquete no se actualiza.

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

Geetha Tulasi Balam
fuente
0

Simplemente el uso de la herramienta de búsqueda y reemplazo de mi IDE hizo el truco.

Tenesse
fuente
0

Después de ejecutar esto:

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

Asegúrese también de ir Build.gradlea android/app/... y cambiar el nombre del Id de la aplicación como se muestra a continuación:

defaultConfig {
        applicationId:com.appname.xxx
........
}
Newtoxton
fuente
-3

Vaya al archivo android / app / src / main / AndroidManifest.xml -

Actualización:

attr android: etiqueta de la aplicación Element como:

Valor anterior - android: label = "@ string / app_name"

Nuevo valor - android: label = "(cadena que desea poner)"

y

attr android: etiqueta de actividad de Element como:

Valor anterior - android: label = "@ string / app_name"

Nuevo valor - android: label = "(cadena que desea poner)"

Funcionó para mí, espero que ayude.

Anshul Singh
fuente
2
Sinceramente, no creo que esta respuesta deba haberse rechazado tanto como lo ha sido. Sin embargo, esta respuesta no no abordar lo que se pedía en la pregunta - cómo cambiar el nombre del paquete . Sin embargo, responde a la pregunta "cómo cambiar el título de la aplicación que aparece en el iniciador". ¿Es una respuesta relevante? Realmente no. ¿Contiene información útil? Si. Por lo tanto, le sugiero que encuentre una pregunta sobre el título del iniciador y publique su solución allí en lugar de aquí.
Dev-iL