在React Native中更改Android的包名称

我使用了react-native init MyApp来初始化一个新的React Native应用程序。 这其中包括com.myapp包创buildAndroid项目。

什么是改变这个软件包名称的最好方法,例如: com.mycompany.myapp

我试图改变它在AndroidManifest.xml但它创造了其他的错误,所以我假设它不是这样。

任何想法?

我把项目的子文件夹名称改为:“ 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 / BUCK中

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

并在android /应用程序/ build.gradle

 applicationId "MY.APP.NEW_ID" 

Gradle'清理到底(在/ android文件夹中):

 ./gradlew clean 

我使用react-native-rename npm包。

安装使用

 npm install react-native-rename -g 

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

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

在npm上进行react-native-rename

我有一个解决scheme基于@切尔尼夫的答案(macOS工作)。 两个不同之处:我在java文件夹中有一个Main2Activity.java,我做同样的事情,我不打扰调用./gradlew clean,因为它好像是react-native packager自动执行的那样。

无论如何,我的解决scheme做什么切尔尼诺的做,除了我做了一个bash shell脚本,因为我使用一套代码构build多个应用程序,并希望能够轻松地更改包名称,只要我运行我的npm脚本。

这是我使用的bash脚本。 你需要修改你想使用的packageName,并添加任何你想要的东西…但这里是基础知识。 您可以创build一个.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的注释。 它在评论中有'包'这个词。 由于脚本是如何工作的,它会将任何包含单词“包”的行取代。 正因为如此,这个脚本可能不会有未来的certificate,因为可能有相同的词在别的地方使用。

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

第三个免责声明:您需要编辑packageNamevariables,使其与脚本顶部的path和底部(com.MyWebsite.MyAppName到com / MyWebsite / MyAppName)

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

更新:

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

旧值 – android:label =“@ string / app_name”

新的价值 – android:label =“(你想要放的string)”

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

旧值 – android:label =“@ string / app_name”

新的价值 – android:label =“(你想要放的string)”

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