在React Native中更改Android包的名称

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

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

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

任何想法?

208537 次浏览

我已经将项目的子文件夹重命名为::“android / app / src / main / java /我的/ app / < >强NEW_ID < / >强/"

然后手动切换新旧包id:

< p >: android / app / src / main / java /我的/ app / NEW_ID / MainActivity.java < / em >:

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'清理结束(在/安卓文件夹中):

./gradlew clean

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

更新:

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

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

新值- Android:label="(你想放的字符串)"

而且

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

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

新值- Android:label="(你想放的字符串)"

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

我有一个基于@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

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

npm install react-native-rename -g

然后,从你的React Native项目的根目录,执行以下命令:

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

如果您正在使用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工作室将负责为所有复制的类放置合适的包名。如果您有一些自定义模块,并且不想手动替换所有的.java文件,这是非常有用的。

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

  5. 同步项目(gradle build)

Goto Android工作室

右键单击你的包(最可能是com)-> Refractor -> Rename ->在对话框中输入新的包名称-> Do Refractor

它将重命名您的包的名称。

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

  1. 对于react应用的iOS应用,在general下使用xcode -。
  2. 对于android应用程序,打开构建。在模块级Gradle。android/app文件夹中的那个。你会发现
// ...
defaultConfig {
applicationId com.myapp
// ...
}
// ...

com.myapp更改为您需要的任何值。

希望这能有所帮助。

init脚本根据你给它的名字为Android生成一个唯一的标识符(例如com.acmeappAcmeApp)。

你可以通过在android/app/build.gradle中查找applicationId键来查看生成了什么名称。

如果你需要改变唯一的标识符,现在就做如下所述:

/android文件夹中,用com.acme.app替换所有出现的com.acmeapp

然后使用如下命令修改目录结构:

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/

你可以简单地使用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.javaMainApplication.java。 在更改包名之前,对这两个文件进行备份,并在更改包名后将其放回原处。这个解决方案对我有效

< p >更多信息: react-native-rename < / p >

在VS Code中,按Ctrl + Shift + F并在“Find”中输入旧的包名,在“Replace”中输入新包。然后按“替换所有事件”。

绝对不是务实的方式。但是,这对我来说很管用。

进入Android Studio,打开应用程序,右键单击java并选择 新建,然后打包。< / p >

给出你想要的名字(例如com.something)。

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

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

点击Android Studio,构建,清洁项目,重建项目。

完成了!

快乐编码:)

运行后:

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

确保也去android/app/...下的Build.gradle 重命名应用程序Id,如下所示:

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

如果你正在使用VSCodeWindows

1.按Control + Shift + F

2.用你的new Package Name找到你的Package NameReplace All

  1. < p > "cd android"类型

  2. < p > "./gradlew clean"类型

非常简单的方法:

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

重命名包名后, 来自android studio。文件→无效缓存/重新启动可以修复这类错误

这对我很有效

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

 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文件,那么你还必须改变该文件中的包名。

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

2021年没有世博会

设原应用名称为: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
    

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

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

. 0

步骤:

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

NPM安装react-native-rename -g

  1. 成功安装包后,在终端中打开你的项目文件夹,点击下面的命令,其中“你的应用程序名称在双引号内”;是应用程序名称和你的包名称,不带双引号/单引号替换为包/bundle名称/id:

react-native-rename“& lt;你的应用名称在双引号>"-b <您的包名,不带双引号/单引号>

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

请注意确保包/bundle名称/id都是小写的

  1. 这还没有完成,现在每个文件都会改变它有包/包的名字,除了一个在ios项目中,我们手动需要这样做,打开Xcode>选择projectfolder/ios/projectname.xcodeproj文件点击打开

  2. 单击您的项目名。xcodeproj是项目导航器中的第一个文件,然后在Bundle标识符字段中输入包名/Bundle ID,如下所示:

enter image description here

  1. 之后在终端上运行

cd ios

  1. 然后运行

圆荚体安装

  1. 然后运行

cd . .

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

  2. 让它加载并完成所有过程,然后在构建菜单中单击“;清洁项目"和文件菜单>关闭项目中的

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

NPM start -reset-cache

Enjoy it will work now

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

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

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

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
Ivan Chernykh的答案是正确的react-native 0.67及以下 对于新体系结构的react-native 0.68及以上,一旦你遵循Ivan Chernykh提到的步骤

对于android,你必须去app =>src =比;main =比;jni文件夹

MainApplicationTurboModuleManagerDelegate.h

以下更改

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

MainComponentsRegistry.h

 constexpr static auto kJavaDescriptor =
"Lcom/yournewpackagename/newarchitecture/components/MainComponentsRegistry;";

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

npm install react-native-rename -g

然后,从你的React Native项目的根目录,执行以下命令:

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

我今天才知道这个答案,但添加这个答案是为了帮助别人。你只需要在引用旧名称的namespace中添加一个namespace,就像这样:

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

然后你可以用bash脚本修改它们,就像这样:

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
sedi -E "s/package=\"[-0-9a-zA-Z._]*\"/package=\"${bundle_name}\"/" android/app/src/main/AndroidManifest.xml

否则,如果你只是改变app/build中的值。gradle和AndroidManifest你会有问题,例如,BuildConfig等。