Change package name for Android in React Native

后端 未结 20 1799
鱼传尺愫
鱼传尺愫 2020-11-30 16:13

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.

相关标签:
20条回答
  • 2020-11-30 16:59

    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)

    0 讨论(0)
  • 2020-11-30 17:00

    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
    
    0 讨论(0)
  • 2020-11-30 17:01

    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.

    0 讨论(0)
  • 2020-11-30 17:01

    Use npx react-native-rename <newName>

    With custom Bundle Identifier (Android only. For iOS, please use Xcode)

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

    First, Switch to new branch (optional but recommended)

    $ git checkout -b rename-app
    

    Then, Rename your app $ npx react-native-rename "Travel App"

    With custom Bundle Identifier

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

    After you change the name, please make sure you go to the android folder and run gradlew clean. then go back to the main project and run npx react-native run-android.

    Also If you have google-services.json file in your previous project, change accordingly with the new one ... then you are good to go :)

    See More here https://github.com/junedomingo/react-native-rename#readme

    0 讨论(0)
  • 2020-11-30 17:02

    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/

    0 讨论(0)
  • 2020-11-30 17:03

    The simplest one:

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

    0 讨论(0)
提交回复
热议问题