286

I used react-native init MyApp to initialise a new React Native app. This created among others an Android project with the package com.myapp.

What's the best way to change this package name, for example to: com.mycompany.myapp?

I tried changing it in AndroidManifest.xml but it created other errors, so I'm assuming it's not the way.

Any idea?

5
  • Left click on package name and go for Refactor--> Rename option to rename package name.
    – kunal
    Commented May 23, 2016 at 11:41
  • 1
    What works best for me now is just find & replace
    – mllm
    Commented May 29, 2016 at 10:48
  • 7
    You can also try this saumya.github.io/ray/articles/72
    – Andy
    Commented Feb 22, 2017 at 1:43
  • for me search & replace worked
    – Sheshnath
    Commented Aug 28, 2019 at 5:43
  • 1
    The pragmatic approach: 1- npx react-native init MycompanyMyapp, 2- Change only the applicationId "com.mycompany.myapp" in android/app/build.gradle. "However, the application ID and package name are independent of each other" – developer.android.com/studio/build/application-id
    – eightyfive
    Commented Mar 29, 2020 at 18:14

31 Answers 31

647

I've renamed the project' subfolder from: "android/app/src/main/java/MY/APP/OLD_ID/" to: "android/app/src/main/java/MY/APP/NEW_ID/"

Then manually switched the old and new package ids:

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

package MY.APP.NEW_ID;

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

package MY.APP.NEW_ID;

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

package="MY.APP.NEW_ID"

And in android/app/build.gradle:

applicationId "MY.APP.NEW_ID"

In android/app/BUCK:

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

Gradle' cleaning in the end (in /android folder):

./gradlew clean
20
  • 28
    I also need to edit file BUCK to replace old package value with the new one. BTW, the 2 files MainAcitivity.java and MainApplication.java should be relocated to the new physical path. Commented Aug 30, 2016 at 2:02
  • 6
    I also renamed the directory android/app/src/main/java/com/old_app_name/ to ...com/new_app_name/ and it seems to work.
    – nicholas
    Commented Mar 8, 2017 at 3:24
  • 2
    I had error "Failed to finalize session : INSTALL_FAILED_UPDATE_INCOMPATIBLE" until I manually forced cleaning of the android device simulator: adb uninstall my.package.name ... So directions are fine, but android simulator can "hold on" to old info in a bad way that makes it look like directions don't work. (And simply uninstalling the app did NOT fix this!) Commented Jun 11, 2017 at 0:10
  • 7
    For RN 0.60+, there's another LoC that has to be changed in MainApplication#initializeFlipper: Class<?> aClass = Class.forName("MY.APP.NEW_ID"); Commented Jul 15, 2020 at 14:34
  • 7
    if you are using firebase then you also need to replace old package value in two instances of package_name in google-services.json Commented Sep 15, 2020 at 17:50
106

I use the react-native-rename* npm package. Install it via

npm install react-native-rename -g

Then, from the root of your React Native project, execute the following:

react-native-rename "MyApp" -b com.mycompany.myapp
11
  • 156
    Thanks, broke the project
    – Leap Hawk
    Commented Mar 17, 2018 at 13:10
  • 12
    It broke my project, and had to create a new project :( Commented Jun 28, 2018 at 13:10
  • 12
    @AchaBill This answer is from 2017 things have changed since... be careful out there.
    – Dror Bar
    Commented Nov 3, 2019 at 8:19
  • 1
    Worked like a charm in "react-native": "0.63.4", Thanks for saving my time. :)
    – ZearaeZ
    Commented Mar 25, 2021 at 9:28
  • 3
    This worked for me. Make sure you create a git branch just in case: git checkout -b newBranchName
    – Caio Mar
    Commented May 19, 2021 at 16:12
45

To change the package name from com.myapp to: com.mycompany.myapp (for example),

  1. For iOS app of the react app, use xcode - under general.
  2. For the android app, open the build.gradle at module level. The one in the android/app folder. You will find
// ...
defaultConfig {
     applicationId com.myapp
     // ...
}
// ...

Change the com.myapp to whatever you need.

Hope this helps.

5
  • 8
    This is the easiest way to change your package name. Tho, not changing your local package name, this will change your next build package. Thanks! After doing this, do ./gradlew clean and then ./gradlew app:assembleRelease. Commented Oct 31, 2019 at 18:48
  • 2
    "However, the applicationId and the local package name are independent of each other", "applicationId uniquely identifies your app on the device and in Google Play Store" – developer.android.com/studio/build/application-id
    – eightyfive
    Commented Mar 29, 2020 at 18:09
  • not work for me No matching client found for package name 'xxxxx'
    – MichaelMao
    Commented May 18, 2020 at 5:06
  • 1
    For changing the package name of android, I ran into this error and fixed stackoverflow.com/questions/35131769/…
    – samhodev
    Commented Apr 13, 2021 at 8:48
  • Finally, this is the only way that worked for me. I needed to change just the .aab package id for play store upload, and this accomplished just that.
    – BoltKey
    Commented Sep 11, 2022 at 10:49
20

you can simply use react-native-rename npm package.

Install using

npm install react-native-rename -g

Then from the root of your React Native project execute the following

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

react-native-rename on npm

but notice that, this lib remove your MainActivity.java and MainApplication.java. before changing your package name, give a backup from this two file and, after changing package name just put it back to their place. this solution work for me

more info: react-native-rename

2
  • 1
    No effect if you don't change app name "Please try a different name." Commented Mar 26, 2019 at 19:30
  • 2
    actually, I try different name for my project. but when I change my project name react-native-rename removes that two files from my project. Commented Mar 27, 2019 at 8:23
11

REACT 0.64 | 2021 NO EXPO

Let original App name be: com.myApp Let New App Name: 'com.newname.myApp`

  1. android\app\src\main\AndroidManifest.xml

Rename xml attribute: `package="com.newname.myApp"


  1. android\app\src\main\java\com\[yourAppName]\MainActivity.java

Rename first line from package com.myApp; To package com.newname.myApp;


  1. android\app\src\main\java\com\[yourAppName]\MainApplication.java

Rename first line To package com.newname.myApp;

In class private static void initializeFlipper reneme this line:

Class<?> aClass = Class.forName("com.myApp.ReactNativeFlipper");

To

Class<?> aClass = Class.forName("com.newname.myApp.ReactNativeFlipper");


  1. android\app\build.gradle

On the defaultConfig rename applicationId

to "com.newname.myApp"


  1. Run on command line:

      $ npx react-native start
      $ npx react-native run-android
    
1
  • 4
    Check google-services.json if you have one too. Commented Sep 26, 2021 at 11:31
10

Goto Android studio

Right click your package (most probably com)-> Refractor -> Rename -> Enter new package name in the dialog -> Do Refractor

It will rename your package name everywhere.

2
  • It will not affect in the whole project structure i guess.
    – Kishan Oza
    Commented Jul 9, 2018 at 5:06
  • How can do with React-Native JS project ? Commented Dec 28, 2018 at 16:39
10

In VS Code, press Ctrl + Shift + F and enter your old package name in 'Find' and enter your new package in 'Replace'. Then press 'Replace all occurrences'.

Definitely not the pragmatic way. But, it's done the trick for me.

4
  • This worked fine on a Mac.. In my case, I have a RN project on iOS and Android. I just needed to make sure that I didn't make any changes to iOS proj.
    – cy-c
    Commented Apr 11, 2021 at 18:09
  • Might also want to search/replace com/you/package mappings along with com.your.package.
    – David S
    Commented Nov 24, 2021 at 0:11
  • 2
    This isn't enough (well, maybe it is, if you're using Expo). You also have to rename the folders under android/app/src/main/java and android/app/src/debug/java. The folder structure is e.g. com/acme/awesomeapp, and reflects the package name structure. Commented May 4, 2022 at 11:48
  • 1
    @ChristianDavén +1 I'd just like to add that I had an unpublished app with the package name, say, com.myApp & then I replaced all instances of it with com.myNewApp and nothing broke. It would be prudent to rename the folders as you suggest, but that's not a hard requirement. Should you rename? Yes. Do you have to? No.
    – sj_959
    Commented Dec 15, 2023 at 8:27
9

If you are using Android Studio-

changing com.myapp to com.mycompany.myapp

  1. create a new package hierarchy com.mycompany.myapp under android/app/src/main/java

  2. Copy all classes from com.myapp to com.mycompany.myapp using Android studio GUI

  3. Android studio will take care of putting suitable package name for all copied classes. This is useful if you have some custom modules and don't want to manually replace in all the .java files.

  4. Update android/app/src/main/AndroidManifest.xml and android/app/build.gradle (replace com.myapp to com.mycompany.myapp

  5. Sync the project (gradle build)

9

The init script generates a unique identifier for Android based on the name you gave it (e.g. com.acmeapp for AcmeApp).

You can see what name was generated by looking for the applicationId key in android/app/build.gradle.

If you need to change that unique identifier, do it now as described below:

In the /android folder, replace all occurrences of com.acmeapp by com.acme.app

Then change the directory structure with the following commands:

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

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

You need a folder level for each dot in the app identifier.

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

8

If you are using VSCode and Windows.

1.Press Control + Shift + F.

2.Find Your Package Name and Replace All with your new Package Name.

  1. type "cd android"

  2. type "./gradlew clean"

1
  • 1
    Seems like a bad approach but worked flawlessly.
    – v.ng
    Commented May 1, 2023 at 8:15
6

I have a solution based on @Cherniv's answer (works on macOS for me). Two differences: I have a Main2Activity.java in the java folder that I do the same thing to, and I don't bother calling ./gradlew clean since it seems like the react-native packager does that automatically anyways.

Anyways, my solution does what Cherniv's does, except I made a bash shell script for it since I'm building multiple apps using one set of code and want to be able to easily change the package name whenever I run my npm scripts.

Here is the bash script I used. You'll need to modify the packageName you want to use, and add anything else you want to it... but here are the basics. You can create a .sh file, give permission, and then run it from the same folder you run react-native from:

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

DISCLAIMER: You'll need to edit MainApplication.java's comment near the bottom of the java file first. It has the word 'package' in the comment. Because of how the script works, it takes any line with the word 'package' in it and replaces it. Because of this, this script may not be future proofed as there might be that same word used somewhere else.

Second Disclaimer: the first 3 sed commands edit the java files from a directory called javaFiles. I created this directory myself since I want to have one set of java files that are copied from there (as I might add new packages to it in the future). You will probably want to do the same thing. So copy all the files from the java folder (go through its subfolders to find the actual java files) and put them in a new folder called javaFiles.

Third Disclaimer: You'll need to edit the packageName variable to be in line with the paths at the top of the script and bottom (com.MyWebsite.MyAppName to com/MyWebsite/MyAppName)

6

To change the Package name you have to edit four files in your project :

 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

The first 2 files have the package name as something like below.

 package com.WHATEVER_YOUR_PACKAGE_NAME_IS;

Change it to your desired package name.

 package com.YOUR_DESIRED_PACKAGE_NAME;

You have to also edit the package name in 2 other files.

  android/app/build.gradle

  android/app/src/main/AndroidManifest.xml

Note if you have a google-services.json file in your project then you have to also change your package name in that file.

After this, you have to ./gradlew clean your project.

5

There are a lot of bad answers here

if you want to change the package name, go to your build.gradle in app

 defaultConfig {
        applicationId "your.new.package.name" //change this line

then when running the app from the command line, pass in the new package name as an arg

react-native run-android --appId your.new.package.name

There's no need to rename your whole project

2
  • What about ios? @MobileMon Commented May 11, 2023 at 6:34
  • 2
    for iOS just change bundle identifier in xcode
    – MobileMon
    Commented May 13, 2023 at 20:18
5

In case, you are fine with creating new react-native project, and migrate your code there, you can simply do it using:

npx react-native init --package-name com.yourcompany.yourapp yourappname

, which will also setup the required and respective nested folder structure based on your custom package name. Then you can proceed with migrating your code there. It has worked in my case.

3

Go to Android Studio, open app, right click on java and choose New and then Package.

Give the name you want (e.g. com.something).

Move the files from the other package (you want to rename) to the new Package. Delete the old package.

Go to your project in your editor and use the shortcut for searching in all the files (on mac is shift cmd F). Type in the name of your old package. Change all the references to the new package name.

Go to Android Studio, Build, Clean Project, Rebuild Project.

Done!

Happy coding :)

3

After running this:

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

Make sure to also goto Build.gradle under android/app/... and rename the application Id as shown below:

defaultConfig {
        applicationId:com.appname.xxx
........
}
3

I will provide you step by step procedure.

First of all, we need to understand why we need to rename a package? Mostly for uniquely identifying App right? So React Native is a cross-platform to develop an app that runs on both iOS and Android. So What I recommended is to need the same identifier in both the platforms. In case Android Package Name is a unique identifier of your App and for iOS its bundle ID.

Steps:

  1. Firstly close all editors/studio eg: xcode android studio vscode and then Install package "react-native-rename" in the terminal by running the command (Keep your project folder copy in another folder for backup if you don't feel this safe):

npm install react-native-rename -g

  1. After sucessfully installing package open your project folder in the terminal and hit the below command where "Your app name Within double quotes" is app name and <Your Package Name without double/single quotes> is replaced with package/bundle name/id:

react-native-rename "< Your app name Within double quotes >" -b <Your Package Name without double/single quotes>

Example: react-native-rename "Aptitude Test App" -b com.vaibhavmojidra.aptitudetestapp

Note Make sure the package/bundle name/id is all in small case

  1. This is not yet done yet now every file will change where the it had bundle/package names except one in ios project which we manually need to do for that open the xcode>open a project or file> choose file from projectfolder/ios/projectname.xcodeproj and click open

  2. Click on your projectname.xcodeproj that is first file in the project navigator then in field of Bundle identifier enter the package name/Bundle ID as below:

enter image description here

  1. After that run in the terminal

cd ios

  1. Then run

pod install

  1. Then run

cd ..

  1. Now you are done for all the changes for ios just last step is to open Android Studio>Open an Existing Project> select projectfolder/android folder > Click on open

  2. Let it load and complete all the process and then in the Build Menu click "Clean Project" and the in File Menu > Close Project

  3. Close All editors and Now You can try the commands to run project on ios and android it will run with renamed packaged just while start server add extra flag --reset-cache:

npm start --reset-cache

Enjoy it will work now

1
  • this is just the best answer for this issue. Commented Mar 27, 2022 at 8:52
2

I fixed this by manually updating package name in following places

1) app.json               |  ./
2) index.js               |  ./
3) package.json           |  ./
4) settings.gradle        |  ./android/
5) BUCK                   |  ./android/app/
6) build.gradle           |  ./android/app/
7) AndroidManifest.xml    |  ./android/app/src/main/
8) MainActivity.java      |  ./android/app/src/main/java/**
9) MainApplication.java   |  ./android/app/src/main/java/**
10)strings.xml            |  ./android/app/src/main/res/values
11)ReactNativeFlipper.java|  ./android/app/src/debug/java/com/<package-name>/
2

I use the react-native-rename* npm package. Install it via

npm install react-native-rename -g

Then, from the root of your React Native project, execute the following:

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

For those coming from RN 0.72+.

Do what the top answers tells you to do and...

Please double check this android/app/build.gradle

// namespace needs to be the same as the top package import in MainApplication.java
    namespace "com.myapp"
    defaultConfig {
        applicationId "com.myapp.domain"
1

It's very simple you just install npm library for same

npm i react-native-rename

Use the link for follow steps: https://www.npmjs.com/package/react-native-rename

NOTE: DON'T FORGET TO RUN BELOW COMMANDS AFTER FINISH YOUR WORK:

watchman watch-del-all
npm start --reset-cache
0

very simple way :

cd /your/project/dir

run this command :

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

rename your folder

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

change to

android/app/src/main/java/com/yournew/newapp
0

After renaming package name everywhere, from android studio. File -> Invalidate caches/Restart may fix this type of errors

this worked for me

0

This information can be helpful for you so listen properly...

After updating package name and changing files, don't forget to change in 
package.json and app.json file at the root directory of your react native project

Otherwise you will get this error below

Invariant Violation: "Your new package name" has not been registered
0

Ivan Chernykh's answer is correct for react-native 0.67 and below For react-native 0.68 and above with the new architecture once you're down with the steps which Ivan Chernykh has mentioned

For android you have to go to app => src => main => jni folder

In MainApplicationTurboModuleManagerDelegate.h

change below line

static constexpr auto kJavaDescriptor =
      "Lcom/yournewpackagename/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate;";

In MainComponentsRegistry.h

 constexpr static auto kJavaDescriptor =
      "Lcom/yournewpackagename/newarchitecture/components/MainComponentsRegistry;"; 
1
  • 1
    Works, But it requires addition steps.. You also needs to change the "com.app" in each file inside "newarchitecture" folder
    – ROI
    Commented Sep 10, 2022 at 18:17
0

I just learned this today but adding this answer to help others. You just need to add a namespace to the app/build.gradle that references the old name, like this:

defaultConfig {
  applicationId "com.mycompany.myapp"
  namespace "com.myapp"
}

Then you can have a bash script that changes the applicationId with something like this:

function sedi {
  if [ "$(uname)" == "Linux" ]; then
    \sed -i "$@"
  else
    \sed -i "" "$@"
  fi
}

bundle_name=com.mycompany.myapp

sedi -E "s/applicationId \"[-0-9a-zA-Z._]*\"/applicationId \"${bundle_name}\"/" android/app/build.gradle
0

React [email protected] Tried to rename package name from com.x to com.y.z

I got through this painful process by doing these:

  1. Change displayName in app.json to z.
{
  "name": "<THIS_SHOULD_STAY_SAME>",
  "displayName": "<Z>"
}
  1. Change the content of the string app_name in strings.xml
<resources>
  ...
  <string name="app_name"><Z></string>
  ...
</resources>
  1. Search through your react-native project for com.x and replace all com.x with com.y.z

!important: In case you're using external services, and in case if you're generated a file and put it under /android you may want to make sure the services that you're using will still work. I recommend you to generate a new config file(s) using your new package name com.y.z and put it after the finishing the steps described below.

  1. Update the folder structure to this:
old: .../android/app/src/main/java/com/x
new: .../android/app/src/main/java/com/y/z
  1. Move all the files under .../android/app/src/main/java/com/x to .../android/app/src/main/java/com/y/z.

  2. Clean up.

  $ ./gradlew clean
  1. Build.
  $ react-native run-android
0

In my case,

I need to change the package com.yourProjectName to boonagency.connachttribune

enter image description here

So then I just do that:-

  1. yourApp/android/app/build.gradle

      defaultConfig {
      applicationId "com.connachtapp"
      minSdkVersion rootProject.ext.minSdkVersion
      targetSdkVersion rootProject.ext.targetSdkVersion
      versionCode 1
      versionName "1.0"
    

to

    defaultConfig {
    applicationId "boonagency.connachttribune"
    minSdkVersion rootProject.ext.minSdkVersion
    targetSdkVersion rootProject.ext.targetSdkVersion
    versionCode 1
    versionName "1.0"

enter image description here

  1. yourProjectName/android/app/src/main/AndroidManifest.xml

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.connachtapp">
    

to

  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="boonagency.connachttribune">
  1. change folder name

    yourProjectName/android/app/src/main/java/com/connachtapp
    

    to

     yourProjectName/android/app/src/main/java/boonagency/connachtapp 
    
  2. yourProjectName/android/app/src/main/java/boonagency/connachtapp/MainApplication.java

    package boonagency.connachttribune; // change here
    ...
    import boonagency.connachttribune.newarchitecture.MainApplicationReactNativeHost; // change here
    ...
     Class<?> aClass = Class.forName("boonagency.connachttribune.ReactNativeFlipper"); // change here
    
  3. yourProjectName/android/app/src/main/java/boonagency/connachtapp/MainActivity.java

    package boonagency.connachttribune; // change here
    
  4. yourProjectName/android/app/src/main/java/boonagency/connachtapp/newarchitecture/MainApplicationReactNativeHost.java

enter image description here

  1. yourProjectName/android/app/src/main/java/boonagency/connachtapp/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java

    package boonagency.connachttribune.newarchitecture.modules; // change here
    
  2. yourProjectName/android/app/src/main/java/boonagency/connachtapp/newarchitecture/components/MainComponentsRegistry.java

    package boonagency.connachttribune.newarchitecture.components; // change here
    
  3. last just run

    cd android && ./gradlew clean && cd .. && npm run android 
    
0

There are lots of way to rename a react native project But, I recommend a package named react-native-rename. It take care all the renaming procedures without any issues

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

0

To change the Package name in a react-native android project, you must do the following exactly

  1. android/app/src/main/java/com/reactNativeSampleApp/MainActivity.java, search old package name, replace with new
  2. android/app/src/main/java/com/reactNativeSampleApp/MainApplication.java, search old package name, replace with new
  3. android/app/build.gradle, search old package name, replace with new
  4. Under app>src>main>java, create a folder that matches the new package name and copy the old files into the last folder
  5. Under app>src>release>java, create a folder that matches the new package name and copy the old files into the last folder
  6. In the last step, change the old package name of the 'ReactNativeFlipper.java' which is the last file in the new folder to the new package name

For ios project, you can achieve that with a click on xcode.

Not the answer you're looking for? Browse other questions tagged or ask your own question.