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

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

我尝试在AndroidManifest.xml中更改它,但它创建了其他错误,所以我假设这不是方法。

任何想法?


当前回答

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

 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

前两个文件的包名如下所示。

 package com.WHATEVER_YOUR_PACKAGE_NAME_IS;

将其更改为所需的包名称。

 package com.YOUR_DESIRED_PACKAGE_NAME;

您还必须在另外两个文件中编辑包名。

  android/app/build.gradle

  android/app/src/main/AndroidManifest.xml

注意你是否有谷歌服务。Json文件,那么你还必须改变该文件中的包名。

在这之后,你必须清理你的项目。

其他回答

我重命名了项目的子文件夹从:“android/app/src/main/java/MY/ app/ OLD_ID/”到:“android/app/src/main/java/MY/ app/ NEW_ID/”

然后手动切换新旧包id:

: android / app / src / main / java /我的/ app / NEW_ID / MainActivity.java:

package MY.APP.NEW_ID;

在android / app / src / main / java /我的/ 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 /美元:

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

Gradle'清理结束(在/android文件夹):

./gradlew clean

进入文件android/app/src/main/AndroidManifest.xml -

更新:

attr android:元素应用程序的标签为:

旧值- android:label="@字符串/app_name" android:label="(你想放的字符串)"

and

attr android:标签的元素活动为:

旧值- android:label="@字符串/app_name" android:label="(你想放的字符串)"

为我工作过,希望能有所帮助。

我会给你提供循序渐进的程序。

首先,我们需要了解为什么我们需要重命名一个包? 主要用于唯一识别应用程序,对吗?React Native是一个跨平台的应用程序,可以在iOS和Android上运行。所以我的建议是在两个平台中需要相同的标识符。Android包名是你应用的唯一标识符,iOS是它的捆绑包ID。

步骤:

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

NPM安装react-native-rename -g

成功安装包后,在终端中打开你的项目文件夹,点击以下命令,其中“your app name Within double quotes”是app名称,< your package name without双/单引号>被替换为package/bundle name/id:

react-native-rename "<你的应用名称包含双引号>" -b <你的包名称不包含双引号或单引号>

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

注意:确保包/包名/id都是小写的

这还没有完成,现在每个文件都会改变它有包/包的名字,除了一个在ios项目,我们手动需要做的,打开xcode>打开一个项目或文件>选择文件从projectfolder/ios/projectname。Xcodeproj,然后单击打开 单击您的项目名。xcodeproj是项目导航器中的第一个文件,然后在Bundle identifier字段中输入包名/Bundle ID,如下所示:

之后在终端上运行

cd ios

然后运行

正在安装

然后运行

cd . .

现在你完成了ios的所有更改,最后一步是打开Android Studio>打开现有项目>选择projectfolder/ Android文件夹>单击打开 让它加载并完成所有过程,然后在构建菜单中单击“清理项目”,然后在文件菜单中>关闭项目 关闭所有编辑器,现在你可以尝试在ios和android上运行项目的命令,它将以重命名的打包方式运行,同时启动服务器,添加额外的标志——reset-cache:

NPM start -reset-cache

现在就享受吧

我有一个基于@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注释。它在评论中有“包”这个词。由于脚本的工作方式,它将任何带有“包”字样的行替换掉。因此,此脚本可能无法在未来进行验证,因为在其他地方可能会使用相同的单词。

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

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

这些信息对你很有帮助,所以仔细听……

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