我使用React - Native init MyApp初始化一个新的React Native应用程序。 这创建了一个带有com.myapp包的Android项目。
更改这个包名称的最佳方法是什么,例如:com.mycompany.myapp?
我尝试在AndroidManifest.xml中更改它,但它创建了其他错误,所以我假设这不是方法。
任何想法?
我使用React - Native init MyApp初始化一个新的React Native应用程序。 这创建了一个带有com.myapp包的Android项目。
更改这个包名称的最佳方法是什么,例如:com.mycompany.myapp?
我尝试在AndroidManifest.xml中更改它,但它创建了其他错误,所以我假设这不是方法。
任何想法?
当前回答
非常简单的方法:
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
其他回答
我有一个基于@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
转到Android Studio,打开应用程序,右键单击java并选择 新建,然后打包。
给出你想要的名字(例如com.something)。
将文件从另一个包(要重命名)移动到新包。删除旧包。
在编辑器中找到你的项目,使用快捷方式搜索所有文件(在mac上是shift cmd F)。输入旧包的名称。更改对新包名的所有引用。
点击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文件,那么你还必须改变该文件中的包名。
在这之后,你必须清理你的项目。
我今天才知道这个答案,但添加这个答案是为了帮助别人。你只需要在app/build中添加一个命名空间。Gradle引用旧的名字,像这样:
defaultConfig {
applicationId "com.mycompany.myapp"
namespace "com.myapp"
}
然后你可以有一个bash脚本,用这样的东西改变applicationId:
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
如果你使用VSCode和Windows。
1.按Control + Shift + F。
2.找到您的包名,并用新的包名替换所有的包名。
输入cd android 类型”。/ gradlew干净”