【问题标题】:Change package name for Android in React Native在 React Native 中更改 Android 的包名称
【发布时间】:2016-09-20 06:28:43
【问题描述】:

我使用react-native init MyApp 来初始化一个新的 React Native 应用程序。 这创建了一个带有 com.myapp 包的 Android 项目。

更改此包名称的最佳方法是什么,例如:com.mycompany.myapp?

我尝试在 AndroidManifest.xml 中更改它,但它产生了其他错误,所以我假设它不是这样。

有什么想法吗?

【问题讨论】:

  • 左键点击包名并选择Refactor-->重命名选项来重命名包名。
  • 现在最适合我的就是查找和替换
  • 你也可以试试这个saumya.github.io/ray/articles/72
  • 对我来说搜索和替换工作
  • 务实的做法:1-npx react-native init MycompanyMyapp,2-仅更改android/app/build.gradle中的applicationId "com.mycompany.myapp"。 “但是,应用 ID 和包名是相互独立的”——developer.android.com/studio/build/application-id

标签: android react-native react-native-android


【解决方案1】:

我已将项目的子文件夹从:“android/app/src/main/java/MY/APP/OLD_ID/”重命名为:“android/app/src/main/java/MY/APP/NEW_ID/"

然后手动切换新旧包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

【讨论】:

  • 我还需要编辑文件 BUCK 以将旧包值替换为新包值。顺便说一句,MainAcitivity.java 和 MainApplication.java 这两个文件应该重新定位到新的物理路径。
  • 我还将目录android/app/src/main/java/com/old_app_name/ 重命名为...com/new_app_name/,它似乎可以工作。
  • 我有错误“无法完成会话:INSTALL_FAILED_UPDATE_INCOMPATIBLE”,直到我手动强制清理 android 设备模拟器:adb uninstall my.package.name ... 所以方向很好,但 android 模拟器可以“坚持”以一种糟糕的方式保留旧信息,这使得它看起来像方向不起作用。 (并且简单地卸载应用程序并不能解决这个问题!)
  • 对于 RN 0.60+,MainApplication#initializeFlipper: Class<?> aClass = Class.forName("MY.APP.NEW_ID"); 中还有另一个 LoC 需要更改
  • 如果您使用的是firebase,那么您还需要在google-services.json 中的两个package_name 实例中替换旧包值
【解决方案2】:

我使用react-native-rename* npm 包。通过安装它

npm install react-native-rename -g

然后,从您的 React Native 项目的根目录执行以下操作:

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

【讨论】:

  • 简单而棘手的一个,我只需要手动更新MainApplication.java。
  • 谢谢,破坏了项目
  • 它破坏了我的项目,不得不创建一个新项目:(
  • @AchaBill 这个答案是从 2017 年开始,事情发生了变化……小心外面。
  • 这对我有用。确保创建一个 git 分支以防万一:git checkout -b newBranchName
【解决方案3】:

要将包名从com.myapp 更改为:com.mycompany.myapp(例如),

  1. 对于 react 应用的 iOS 应用,使用 xcode - 下一般。
  2. 对于 android 应用,在模块级别打开 build.gradle。 android/app 文件夹中的那个。你会发现
// ...
defaultConfig {
     applicationId com.myapp
     // ...
}
// ...

将com.myapp 更改为您需要的任何内容。

希望这会有所帮助。

【讨论】:

  • 这是更改软件包名称的最简单方法。 Tho,不更改您的本地包名称,这将更改您的下一个构建包。谢谢!完成此操作后,执行./gradlew clean,然后执行./gradlew app:assembleRelease。
  • “但是,applicationId 和本地 package 名称是相互独立的”,“applicationId 唯一标识您的应用在设备上和 Google Play 商店中” – developer.android.com/studio/build/application-id
  • 不适合我No matching client found for package name 'xxxxx'
  • 为了更改android的包名,我遇到了这个错误并修复了stackoverflow.com/questions/35131769/…
【解决方案4】:

你可以简单地使用 react-native-rename npm 包。

使用安装

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

【讨论】:

  • 不更改应用名称无效“请尝试其他名称。”
  • 实际上,我为我的项目尝试了不同的名称。但是当我更改我的项目名称时,react-native-rename 会从我的项目中删除这两个文件。
【解决方案5】:

转到 Android 工作室

右键单击您的包(很可能是 com)-> Refractor -> 重命名 -> 在对话框中输入新包名称 -> Do Refractor

它会在任何地方重命名你的包名。

【讨论】:

  • 我猜它不会影响整个项目结构。
  • React-Native JS 项目怎么做?
【解决方案6】:

最简单的一个:

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

【讨论】:

  • 警告 - 这个包似乎几年前没有维护过。
【解决方案7】:

如果您使用的是 Android Studio-

将com.myapp 更改为com.mycompany.myapp

  1. 在android/app/src/main/java下新建包层次结构com.mycompany.myapp

  2. 使用 Android Studio GUI 将所有类从 com.myapp 复制到 com.mycompany.myapp

  3. Android Studio 将负责为所有复制的类放置合适的包名称。如果您有一些自定义模块并且不想在所有 .java 文件中手动替换,这将非常有用。

  4. 更新android/app/src/main/AndroidManifest.xml和android/app/build.gradle(将com.myapp替换为com.mycompany.myapp

  5. 同步项目(gradle build)

【讨论】:

    【解决方案8】:

    init 脚本会根据您给它的名称生成一个唯一的 Android 标识符(例如,com.acmeapp 对应于 AcmeApp)。

    您可以通过在android/app/build.gradle 中查找 applicationId 键来查看生成的名称。

    如果您需要更改该唯一标识符,请立即按照以下说明进行操作:

    在/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/

    【讨论】:

      【解决方案9】:

      在 VS Code 中,按Ctrl + Shift + F 并在“查找”中输入您的旧包名称,并在“替换”中输入您的新包。然后按“替换所有匹配项”。

      绝对不是务实的方式。但是,它对我来说已经成功了。

      【讨论】:

      • 这在 Mac 上运行良好。就我而言,我在 iOS 和 Android 上有一个 RN 项目。我只需要确保我没有对 iOS 项目进行任何更改。
      • 可能还想搜索/替换 com/you/package 映射以及 com.your.package。
      【解决方案10】:

      react-native-rename 在撰写此答案之日起非常适合重命名我的项目的应用程序和捆绑标识符。

      1. 要更新应用名称: npx react-native-rename "New App Label"

      2. 更新包标识符:npx react-native-rename -b "appname.example.com"

      【讨论】:

        【解决方案11】:

        反应 0.64 | 2021 无世博会

        设原App名称为:com.myApp 让新应用名称:'com.newname.myApp`

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

        重命名 xml 属性:`package="com.newname.myApp"


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

        将第一行从package com.myApp;重命名为package com.newname.myApp;


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

        将第一行重命名为package com.newname.myApp;

        在课堂上private static void initializeFlipper 重命名这一行:

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

        到

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


        1. android\app\build.gradle

        在defaultConfig上重命名applicationId

        到“com.newname.myApp”


        1. 在命令行上运行:

            $ npx react-native start
            $ npx react-native run-android
          

        【讨论】:

        • 如果你也有,请检查 google-services.json。
        【解决方案12】:

        我有一个基于@Cherniv 回答的解决方案(适用于我的 macOS)。两个不同之处:我在 java 文件夹中有一个 Main2Activity.java ,我对它执行相同的操作,并且我不费心调用 ./gradlew clean ,因为看起来 react-native 打包程序无论如何都会自动执行此操作。

        无论如何,我的解决方案和 Cherniv 一样,除了我为它制作了一个 bash shell 脚本,因为我正在使用一组代码构建多个应用程序,并且希望能够在运行我的 npm 脚本时轻松更改包名称.

        这是我使用的 bash 脚本。您需要修改要使用的 packageName,并添加您想要的任何其他内容......但这里是基础知识。您可以创建一个 .sh 文件,授予权限,然后从您运行 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
        

        免责声明:您需要首先在 java 文件底部附近编辑 MainApplication.java 的注释。它在评论中有“包裹”这个词。由于脚本的工作方式,它会在其中包含单词“package”的任何行并替换它。因此,此脚本可能无法在未来得到验证,因为在其他地方可能会使用相同的词。

        第二个免责声明:前 3 个 sed 命令编辑名为 javaFiles 的目录中的 java 文件。我自己创建了这个目录,因为我想要从那里复制一组 java 文件(因为我将来可能会向它添加新包)。你可能想做同样的事情。因此,从 java 文件夹中复制所有文件(通过其子文件夹查找实际的 java 文件)并将它们放在一个名为 javaFiles 的新文件夹中。

        第三免责声明:您需要编辑 packageName 变量,使其与脚本顶部和底部的路径一致(com.MyWebsite.MyAppName 到 com/MyWebsite/MyAppName)

        【讨论】:

          【解决方案13】:

          使用 npx react-native-rename <newName>

          使用自定义 Bundle Identifier(仅限 Android。对于 iOS,请使用 Xcode)

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

          首先,切换到新分支(可选但推荐)

          $ git checkout -b rename-app
          

          然后,重命名您的应用 $ npx react-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

          【讨论】:

            【解决方案14】:

            我使用了react-native-rename 包。

            在终端运行命令安装:

            npm install react-native-rename -g
            

            在您的 React Native 项目的根目录中,运行以下命令:

            react-native-rename "NewNameOfApp" -b com.companyname.newnameofapp
            

            【讨论】:

              【解决方案15】:

              如果您使用的是VSCode 和Windows。

              1.按Control + Shift + F。

              2.使用您的new Package Name 查找您的Package Name 和Replace All。

              1. 输入"cd android"

              2. 输入"./gradlew clean"

              【讨论】:

                【解决方案16】:

                要更改包名称,您必须编辑项目中的四个文件:

                 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;
                

                您还必须在其他 2 个文件中编辑包名称。

                  android/app/build.gradle
                
                  android/app/src/main/AndroidManifest.xml
                

                请注意,如果您的项目中有 google-services.json 文件,那么您还必须更改该文件中的包名称。

                在此之后,您必须 ./gradlew 清理您的项目。

                【讨论】:

                  【解决方案17】:

                  如果您没有在 android 文件夹中进行任何自定义更改(即您刚刚初始化项目)

                  1. 只需根据需要更改package.json文件中的name并保存即可。
                  2. 删除名为 android 的文件夹
                  3. 运行命令react-native upgrade

                  注意:正如评论中提到的ivoteje50,如果您已经按照官方说明生成密钥库,请不要删除android文件夹,因为它会删除密钥库并且您无法再次签署新应用程序.

                  【讨论】:

                  • 如果您已经按照官方说明生成密钥库,请不要删除 android 文件夹,因为它会删除密钥库并且您无法再次签署新应用程序。
                  • 别这样!您可能在 android 代码中有大量无法重新创建的自定义代码
                  【解决方案18】:

                  进入Android Studio,打开app,右键java,选择 新建,然后打包。

                  提供您想要的名称(例如 com.something)。

                  将文件从另一个包(您要重命名)移动到新包。删除旧包。

                  在编辑器中转到您的项目并使用快捷方式搜索所有文件(在 mac 上是 shift cmd F)。输入旧包的名称。更改对新包名称的所有引用。

                  转到 Android Studio,构建,清理项目,重新构建项目。

                  完成!

                  编码愉快:)

                  【讨论】:

                    【解决方案19】:

                    我通过在以下位置手动更新包名称来解决此问题

                    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>/
                    

                    【讨论】:

                      【解决方案20】:

                      运行后:

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

                      确保也转到Build.gradle 下的android/app/... 并重命名应用程序ID,如下所示:

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

                      【讨论】:

                        【解决方案21】:

                        在更改您的 react native 包名称之前!请备份 MainActivity.java 和 MainApplication.java 文件。因为这个库删除了你的 MainActivity.java 和 MainApplication.java。

                        完成此操作后,您可以简单地使用 react-native-rename npm 包。

                        安装

                        npm install react-native-rename -g

                        然后从你的 React Native 项目的根目录执行以下操作

                        react-native-rename "new_project_name" -b com.mycompany.newprojectname

                        最后,您可以在 AndroidManifest.xml 中查看您的新包名称。 不要忘记在 MainActivity.java 和 MainApplication.java 中重命名包名。

                        谢谢。

                        【讨论】:

                        • 现在不需要npm install -g react-native-rename。可以运行npx react-native-rename "new_project_name" -b com.mycompany.newprojectname。此外,您必须手动更正文件,例如google-services.json。
                        【解决方案22】:

                        您可以使用 react-native-rename 包,它将在

                        下对包名进行所有必要的更改

                        app/mainapplication.java

                        AndroidManifest.xml

                        但请确保手动更改 java/com 文件夹下所有文件的包名。因为当我创建启动屏幕活动时,旧的包名称没有更新。

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

                        【讨论】:

                          【解决方案23】:

                          只需使用我的 IDE 的搜索和替换工具就可以了。

                          【讨论】:

                            【解决方案24】:

                            非常简单的方法:

                            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
                            

                            【讨论】:

                              【解决方案25】:

                              要更改包,我已经搜索并尝试了很多方法,但有些方法非常困难,有些方法已经过时。在搜索时,我发现一个网站讨论了一个非常简单的方法,经过测试,我个人也使用过这个方法。链接:https://www.geoclassifieds.in/2021/02/change-package-name-react-native.html

                              【讨论】:

                              • 链接已损坏。 Stackoverflow 规则说在这里描述比发布链接更好。
                              【解决方案26】:

                              在各处重命名包名后, 来自安卓工作室。文件 -> 使缓存无效/重新启动可能会修复此类错误

                              这对我有用

                              【讨论】:

                                【解决方案27】:

                                我在尝试更改包名称时发现的一种最简单的方法是使用“搜索”选项并替换 VS Code 中的所有内容。

                                在搜索中使用 (com.yourprojectname) 并将其替换为 (com.newProjectName)

                                “react-native-rename”npm 包做同样的事情,所以如果你不想安装任何包,你可以试试上面的那个。

                                但如果您使用的是 firebase,则步骤会有所不同

                                【讨论】:

                                  【解决方案28】:

                                  我会为你提供一步一步的过程。

                                  首先,我们需要了解为什么我们需要重命名一个包? 主要用于唯一标识 App 对吗?所以 React Native 是一个跨平台的开发应用程序,可以在 iOS 和 Android 上运行。所以我建议在两个平台上都需要相同的标识符。如果 Android Package Name 是您的应用程序的唯一标识符,对于 iOS 是它的 bundle ID。

                                  步骤:

                                  1. 首先关闭所有编辑器/工作室,例如:xcode android studio vscode,然后通过运行命令在终端中安装包“react-native-rename”(如果您不这样做,请将您的项目文件夹副本保存在另一个文件夹中以进行备份'感觉不安全):

                                  npm install react-native-rename -g

                                  1. 成功安装包后,在终端中打开您的项目文件夹并点击以下命令,其中“双引号内的您的应用名称”是应用名称, 替换为包/捆绑名称/编号:

                                  react-native-rename "" -b

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

                                  注意确保包/捆绑包名称/id都是小写

                                  1. 这还没有完成,现在每个文件都将更改它的包/包名称,除了 ios 项目中的一个,我们需要手动打开 xcode>打开一个项目或文件> 选择文件从 projectfolder/ios/projectname.xcodeproj 并点击打开

                                  2. 点击 项目导航器 中的第一个文件 projectname.xcodeproj,然后在 Bundle identifier 字段 输入包名称/Bundle ID,如下所示:

                                  1. 然后在终端中运行

                                  cd ios

                                  1. 然后运行

                                  吊舱安装

                                  1. 然后运行

                                  cd ..

                                  1. 现在你已经完成了对 ios 的所有更改,最后一步是打开 Android Studio>打开现有项目>选择 projectfolder/android 文件夹>点击打开

                                  2. 让它加载并完成所有过程,然后在Build菜单中点击“Clean Project”,然后在File Menu>Close Project

                                  3. 关闭所有编辑器,现在您可以尝试在 ios 和 android 上运行项目的命令,它将在启动服务器时使用重命名的打包运行添加额外的标志 --reset-cache:

                                  npm start --reset-cache

                                  享受它现在就可以工作了

                                  【讨论】:

                                    【解决方案29】:

                                    此信息可能对您有所帮助,因此请认真聆听...

                                    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
                                    

                                    否则你会在下面得到这个错误

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

                                    【讨论】:

                                      【解决方案30】:

                                      转到文件 android/app/src/main/AndroidManifest.xml -

                                      更新:

                                      元素 application 的

                                      attr android:label 为:

                                      旧值 - android:label="@string/app_name"

                                      新值 - android:label="(你要放置的字符串)"

                                      和

                                      元素 activity 的

                                      attr android:label 为:

                                      旧值 - android:label="@string/app_name"

                                      新值 - android:label="(你要放置的字符串)"

                                      为我工作,希望它会有所帮助。

                                      【讨论】:

                                      • 老实说,我认为这个答案不应该像以前那样被否决。但是,这个答案确实 不解决了问题中的问题 - 如何更改包名称。然而,它回答了“如何更改出现在启动器中的应用程序的标题”的问题。这是一个相关的答案吗?并不真地。它是否包含有用的信息?是的。因此,我建议您找到一个询问启动器标题的问题,然后在 there 而不是在此处发布您的解决方案。
                                      猜你喜欢
                                      • 2020-04-17
                                      • 2017-09-03
                                      • 2016-04-20
                                      • 2012-05-04
                                      • 1970-01-01
                                      • 2016-02-15
                                      • 2017-03-30
                                      • 1970-01-01
                                      • 2016-02-15
                                      相关资源
                                      最近更新 更多