2016-05-23 20 views
56

我使用react-native init MyApp初始化新的React Native应用程序。 这创建了包含com.myapp包的Android项目。在React Native中更改Android的包名称

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

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

有什么想法?

+0

软件包名称左键点击并去重构 - >重命名选项来命名包名。 – kunal

+0

现在最适合我的是找到并替换 – mllm

+0

你也可以试试https://saumya.github.io/ray/articles/72/ – Andy

回答

129

我从发生改变的项目”子文件夹名称: “的Android /应用/ src目录/主/ JAVA/MY/APP/OLD_ID/” 到:“的Android /应用/ src目录/主/ JAVA/MY/APP/NEW_ID/

然后手动切换新旧包IDS:

在: 机器人/应用/ SRC /主/爪哇/ MY/APP/NEW_ID/MainActivity。 java

package MY.APP.NEW_ID; 

机器人/应用/ SRC /主/爪哇/ MY/APP/NEW_ID/MainApplication.java

package MY.APP.NEW_ID; 

机器人/应用/ SRC /主/ AndroidManifest.xml中

package="MY.APP.NEW_ID" 

可选)在机器人/应用/ BUCK

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

而且在的Android /应用/的build.gradle

applicationId "MY.APP.NEW_ID" 

摇篮”到底清洗(在/安卓文件夹):

./gradlew clean 
+12

我还需要编辑文件BUCK来替换旧的包值新的。BTW,2文件MainAcitivity.java和MainApplication.java应该重新定位到新的物理路径。 – Donald

+0

@唐纳德好赶,会更新答案,谢谢 – Cherniv

+1

我也把目录'android/app/src/main/java/com/old_app_name /'改名为'... com/new_app_name /',它似乎工作正常。 – nicholas

-9

转到文件android/app/src/main/AndroidManifest。XML -

更新:

ATTR 安卓元素应用的标签为:

原值 - 机器人:标签= “@字符串/ APP_NAME”

新值 - android:label =“(要放的字符串)”

ATTR 安卓元素活动的标签为:

原值 - 机器人:标签= “@字符串/ APP_NAME”

新值 - android:label =“(你想要放的字符串)”

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

+0

我真的不认为这个答案应该像过去一样被低估。但是,这个答案_does_ **不是**地址在问题中提出的问题 - 如何更改包名**。但是,它回答了“如何更改启动器中显示的应用程序的标题”这一问题。这是相关的答案吗?不是真的。它是否包含有用的信息?是。因此,我建议你找到一个问题,询问有关启动器的标题,并发布你的解决方案_there_而不是在这里。 –

1

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

不管怎么说,我的解决方案并没有做切尔诺夫的工作,除了我为它制作了一个bash shell脚本,因为我使用一组代码构建了多个应用程序,并希望能够在我运行我的npm时轻松地更改包名脚本。

这是我使用的bash脚本。你需要修改你想使用的packageName,并添加你想要的任何东西......但这里有一些基础知识。您可以创建一个sh文件,给予许可,然后再从您从反应本地同一文件夹中运行它:

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 

免责声明:您需要编辑附近的底部MainApplication.java的评论首先是java文件。它在评论中有'包'这个词。由于脚本的工作原理,它会在其中包含“包”一词并替换它。正因为如此,这个脚本可能不会被未来证明,因为可能有其他地方使用的同一个词。

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

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

23

我使用react-native-rename npm包。

使用

npm install react-native-rename -g 

然后从根部安装你的阵营本地项目执行以下

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

react-native-rename on npm

+0

这是一个简单而棘手的问题,我只需要手动更新MainApplication.java。 –

+0

使用这种方法,它像一个魅力工作.. – FaISalBLiNK

+0

简单,只是工程。 – BlaShadow

0

如果您使用的是Android工作室 -

改变com.myappcom.mycompany.myapp

  1. 创建采用Android工作室GUI

  2. Android的工作室将负责把适当的包装下android/app/src/main/java

  3. 复制从com.myapp所有类新包层次com.mycompany.myapp到com.mycompany.myapp所有复制类的名称。如果您有一些自定义模块并且不想在所有.java文件中手动替换,这很有用。

  4. 更新android/app/src/main/AndroidManifest.xml和​​(更换com.myappcom.mycompany.myapp

  5. 同步项目(gradle这个版本)