首页 文章

在React Native中更改Android的包名称

提问于
浏览
87

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

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

我尝试在 AndroidManifest.xml 中更改它但是它创建了其他错误,所以我不是这样的 .

任何的想法?

9 回答

  • 204

    我有一个基于@Cherniv答案的解决方案(适用于macOS) . 两个不同之处:我在java文件夹中有一个Main2Activity.java,我做同样的事情,而且我不打扰调用./gradlew clean,因为看起来反应原生包装器会自动执行此操作 .

    无论如何,我的解决方案做了切尔诺夫的工作,除了我为它制作了一个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的注释 . 它在评论中有“包”字样 . 由于脚本的工作方式,它需要包含“package”一词的任何行并替换它 . 因此,此脚本可能无法进行验证,因为在其他地方可能会使用相同的单词 .

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

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

  • 1

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

    • 对于react应用程序的iOS应用程序,请使用xcode - 一般情况下 .

    • 对于Android应用程序,在模块级别打开build.gradle . android / app文件夹中的那个 . 你会找到

    ... defaultConfig { applicationId com.myapp ... } ...

    将“com.myapp”更改为您需要的任何内容 .

    希望这可以帮助 .

  • 3

    转到档案 android/app/src/main/AndroidManifest.xml -

    更新:

    元素 application 的attr android:label 如下:

    旧值 - android:label =“@ string / app_name”新值 - android:label =“(你要放的字符串)”

    元素 activity 的attr android:label 如下:

    旧值 - android:label =“@ string / app_name”新值 - android:label =“(你要放的字符串)”

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

  • 52

    如果您使用的是Android Studio-

    com.myapp 更改为 com.mycompany.myapp

    • android/app/src/main/java 下创建一个新的包层次结构com.mycompany.myapp

    • 使用Android studio GUI将所有类从 com.myapp 复制到 com.mycompany.myapp

    • Android studio将负责为所有复制的类添加合适的包名称 . 如果您有一些自定义模块并且不想在所有.java文件中手动替换,这将非常有用 .

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

    • 同步项目(gradle build)

  • 1

    init脚本根据您提供的名称为Android生成唯一标识符(例如 com.acmeapp 表示 AcmeApp ) .

    您可以通过在 android/app/build.gradle 中查找applicationId键来查看生成的名称 .

    如果您需要更改该唯一标识符,请按照以下说明立即执行:

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

    然后使用以下命令更改目录结构:

    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/

  • -8

    转到Android工作室

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

    它会在任何地方重命名您的包名称 .

  • 2

    我使用 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

  • 1

    我've changed project'子文件夹名称来自:“android / app / src / main / java / MY / APP / OLD_ID / " to: " 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 / build.gradle中:

    applicationId "MY.APP.NEW_ID"
    

    (可选)在android / app / BUCK中:

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

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

    ./gradlew clean
    
  • 4

    按照简单的步骤重命名 app namePackage name

    • 简单地改变 package.json 文件中的 name 根据需要保存 .

    • 删除名为android的文件夹

    • 运行命令 react-native upgrade

相关问题