我使用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中更改它,但它创建了其他错误,所以我假设这不是方法。
任何想法?
当前回答
init脚本根据你给它的名字为Android生成一个唯一的标识符(例如com。acmeapp for acmeapp)。
你可以通过在android/app/build.gradle中查找applicationId键来查看生成的名称。
如果你需要改变唯一的标识符,现在就做如下所述:
在/android文件夹中,替换所有出现的com。Acmeapp由com.acme.app提供
然后使用如下命令修改目录结构:
mkdir android / app / src / 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/
其他回答
我通过在以下位置手动更新包名来解决这个问题
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>/
我今天才知道这个答案,但添加这个答案是为了帮助别人。你只需要在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
init脚本根据你给它的名字为Android生成一个唯一的标识符(例如com。acmeapp for acmeapp)。
你可以通过在android/app/build.gradle中查找applicationId键来查看生成的名称。
如果你需要改变唯一的标识符,现在就做如下所述:
在/android文件夹中,替换所有出现的com。Acmeapp由com.acme.app提供
然后使用如下命令修改目录结构:
mkdir android / app / src / 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/
我重命名了项目的子文件夹从:“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
我有一个基于@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