如何在Flutter中更改包名?

492

有没有办法更改Flutter项目的软件包名称?

我想在Flutter项目中更改软件包名称和应用程序名称。


8
只需在所有文件中搜索并替换旧软件包名称的所有出现。目前还没有更新名称的命令或类似命令。 - Günter Zöchbauer
22
创建新项目时,您可以使用 flutter create --org com.domain app_name 指定包名。 - Victor
这个回答解决了您的问题吗?如何在Flutter中更改应用程序包名称而不使用Android Studio? - Jannie Theunissen
1
@JannieTheunissen 这个问题似乎比这个更具体。如果有什么的话,那个应该被关闭为这个问题的重复。 - cigien
@Victor app_name 将被附加为一个包,因此最终您将拥有类似于 com.domain.app_name 的东西。因此,如果您具有像 app.foo.com 这样的域子域,并且想要创建名称为 app 的应用程序,则最终将得到 com.foo.app.app,这很丑陋。 - Alex
34个回答

696

针对 Android 应用名称

您需要在 AndroidManifest.xml 文件中更改标签名称:

 <application
    android:name="io.flutter.app.FlutterApplication"
    android:label="TheNameOfYourApp"   

对于包名

在您的AndroidManifest.xml文件中更改包名(在主文件夹、调试文件夹和配置文件夹中的三个文件夹中,根据您想要部署的环境进行更改):

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="your.package.name">

同样在您的app文件夹内的build.gradle文件中

defaultConfig {
    applicationId "your.package.name"
    minSdkVersion 16
    targetSdkVersion 27
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

最后,在您的MainActivity.java类中更改包名(如果MainActivity.java不可用,请检查MainActivity.kt)。

    package your.package.name;

    import android.os.Bundle;
    import io.flutter.app.FlutterActivity;
    import io.flutter.plugins.GeneratedPluginRegistrant;
    public class MainActivity extends FlutterActivity {

更改目录名称:

原始内容:

  android\app\src\main\java\com\example\name

To:

  android\app\src\main\java\your\package\name
  

编辑日期:2018年12月27日

对于包名,只需在build.gradle文件中更改即可。

defaultConfig {
    applicationId "your.package.name"
    minSdkVersion 16
    targetSdkVersion 27
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

iOS设备

ios/Runner目录下的Info.plist文件中更改捆绑标识符。

<key>CFBundleIdentifier</key>
<string>com.your.packagename</string>

更新

为了避免重命名包和捆绑标识符,您可以在终端中使用此命令启动项目:

flutter create --org com.yourdomain appname

2
我还必须更新下面的目录名称(将“example”更改为“woods”)C:\ Users \ andytwoods \ IdeaProjects \ gear_log \ android \ app \ src \ main \ java \ com \ woods \ gearlog - andyw
35
我的包标识符是 $(PRODUCT_BUNDLE_IDENTIFIER)。那个变量藏在哪里? - Suragch
4
搜索变量:PRODUCT_BUNDLE_IDENTIFIER。 - diegoveloper
10
"PRODUCT_BUNDLE_IDENTIFIER" 存储在 project.pbxproj 文件和 ios/Runner.xcodeproj 目录下的多个位置。 - Safa Alai
11
值得一提的是,appID 必须采用由三个用点分隔的单词组成的格式。 - r_a_k
显示剩余15条评论

149

手动更改名称似乎无效,会导致gradle错误,在我的情况下确实会引发错误。

所以我通常会创建一个新的flutter项目。

我使用下面提到的命令来创建一个新的flutter应用程序。

flutter create --org com.yourdomain appname

你的项目的包名将会是 -> com.yourdomain.appname


如果你希望将你的包名仅保留为com.appname,请按照以下步骤进行更改。

flutter create --org com appname

如果想在 android 中添加 Java 而不是 kotlin,请添加 -a java

flutter create -a java --org com.yourdomain appname

编辑


如果您已经创建了一个项目,您可以使用change_app_package_name软件包来更改软件包名称。

flutter pub run change_app_package_name:main com.package.appname

7
如果您已经在现有项目中,请添加句号并且应该首先删除android和ios文件夹以重新生成它们:'flutter create --org com.yourcompany --project-name new_app_name .'。在回答之前,备份是一个重要的先决条件。请注意不要改变原意。 - Tommie C.
你可以创建一个新项目,然后复制 pubspec.yaml 中的依赖项,运行 pub get,最后从 lib 文件夹中复制你的 dart 文件。 - Filippos Zofakis

90

对于像我一样不想更改特定文件的人,我使用了https://pub.dev/packages/rename

使用它,您只需在终端中运行这些命令,您的应用程序名称和标识符就会被更改。 pub global run

安装:pub global activate rename

然后,在Flutter项目根目录内运行此命令。

pub global run rename --bundleId com.example.android.app --target android


这个包装盒一开箱就很好用。谢谢! - jwehrle
这个命令只是用来更改Android应用程序的包名,还是适用于任何平台? - undefined
@Ndrslmpk 我相信任何平台。至少文档上是这么说的。 - undefined

51

安卓

在安卓中,包名在AndroidManifest文件中:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    package="com.example.appname">

iOS

iOS中的包名是Info.plist中的Bundle Identifier:

<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>

可以在Runner.xcodeproj/project.pbxproj中找到:

PRODUCT_BUNDLE_IDENTIFIER = com.example.appname;

更改名称

包名称存在多个位置,因此要更改名称,您应该搜索整个项目以查找旧项目名称的出现并全部更改。

Android Studio 和 VS Code:

  • Mac: Command + Shift + F
  • Linux/Windows: Ctrl + Shift + F

感谢diegoveloper提供的iOS帮助。

更新:

多次访问此页面后,我认为更容易和更干净的方法是使用正确的名称启动一个新项目,然后将旧文件复制过来。


嗨,我有一个问题。这可能与Flutter主题无关,但如果我创建一个新项目,如何将重命名的项目推送到github上的当前项目? - Ooto
1
@Ooto,你可以删除旧项目(除了根目录下的.git目录),然后将新项目放在与旧项目相同的目录中。然后提交并推送更改。 - Suragch

34

尽可能简单地使用此change_app_package_name包,首先添加依赖项

 dev_dependencies: 
  change_app_package_name: lates version

然后运行这个命令

flutter pub run change_app_package_name:main com.new.package.name

但是在lib/文件夹/file.dart中并没有更改所有的包名,我们必须搜索所有旧名称并替换所有。有人遇到同样的问题吗? - Yogi Arif Widodo

33

这是我如何重命名iOS和Android的包名

  1. 打开应用程序模块的build.gradle文件,将applicationId "com.company.name"重命名。
  2. 打开app/src/main下的Manifest.xml文件,将package="com.company.name"android:label="App Name"重命名。
  3. 打开app/src/debug下的Manifest.xml文件,将package="com.company.name"重命名。
  4. 打开app/src/profile下的Manifest.xml文件,将package="com.company.name"重命名。
  5. 打开app/src/main/kotlin/com/something/something/MainActivity.kt文件,将package="com.company.name"重命名。
  6. 打开app/src/main/kotlin/目录,将每个目录重命名为app/src/main/kotlin/com/company/name/的结构形式。
  7. 打开项目中的pubspec.yaml文件,将name: something更改为name: name。例如:如果包名为com.abc.xyz,则将name: xyz更改为name: name
  8. 打开lib文件夹中的每个dart文件,将导入项重命名为已修改的名称。
  9. 打开XCode并打开runner文件,点击项目浏览器中的Runner。
  10. 转到"General" -> 双击Bundle标识符 -> 将其重命名为com.company.name
  11. 打开Info.plist文件,单击Bundle名称 -> 将其重命名为您的应用程序名称。
  • 关闭所有内容 -> 到您的Flutter项目并在终端中运行此命令flutter clean

  • 我没有Kotlin文件夹,也不确定为什么。 - Swift

    30

    修改 pubspec.yaml(第1行)中的 name 属性。

    要更改 APK 名称,请在 AndroidManifest.xml 中更改 android:label


    2
    需要更改 MainActivity.java 或 mainActivity.kt。 - Epsi95
    根据你所说的去做之后出现了无数的问题。 Flutter 3.13.6 2023年 - undefined

    22

    最快、最干净的更改包名的方法!

    警告:

    如果您已编辑了文件夹android/ios/windows/的内容,则需要在继续之前确保您已将这些更改备份到其他地方。

    1. 删除Flutter项目根目录下的以下文件夹:

    • android/
    • ios/
    • windows/
    • build/

    假设您想要将包名从com.oldcompany.oldproject更改为com.newcompany.newproject

    2. 在项目根目录下运行以下命令:

    flutter create --org com.newcompany --project-name newproject .
    

    如果您想将项目限制在特定平台上(例如Android和iOS),请运行以下命令:
    flutter create --platforms=android,ios --org com.newcompany --project-name newproject .
    

    注意:
    为确保一切设置正确,您可以通过运行以下命令在文件中搜索您的软件包名称。

    grep --color -r com.oldcompany.oldproject *
    

    grep --color -r com.newcompany.newproject *
    

    2
    这是最好的答案,绝对是最干净和快速的解决方案!如果您修改了特定于平台的文件,请确保备份它们并将更改放回。最简单的方法是使用GIT存储库并查看此过程所做的更改。 - Micer
    2
    这是目前最快速和最直接的解决方案。请记得在删除它们之前备份 android/ios/ 中的任何文件! - gmdev
    1
    我也删除了macos/和web/文件夹;但是我没有删除build/文件夹(我没有它)。然后flutter create命令以干净的方式重新生成了所有这些文件夹。太好了。 - Yoric

    18
    1. 首先,在终端中运行以下命令:

      dart pub global activate rename

    2. 在你的Flutter项目根目录下运行以下命令:

      dart pub global run rename --bundleId com.company.appname --target android

    这将在defaultConfig中更新gradle构建文件的正确ID。

     defaultConfig {
            applicationId "com.company.appname"
            minSdkVersion 21
            targetSdkVersion 33
            versionCode flutterVersionCode.toInteger()
     }
    

    这就是全部内容了,现在你已经更改了你的包名 :)

    enter image description here


    在我的情况下,这还不够……许多错误发生是因为许多自动生成的文件夹和代码内部的导入具有旧的包名称。我不得不手动更改MainActivity.kt导入,以及许多其他文件夹和代码更改。更糟糕的是……我忘记了我的本地git和远程git……最好创建一个新分支来尝试这个……以防万一…… - Ramiro G.M.

    16

    如果您还没有开始这个项目,这是最好的可能方式。

    flutter create --org com.yourdomain appname
    
    如果您已经创建了项目,请在dev_dependencies中安装此软件包,然后运行此命令。
    flutter pub run change_app_package_name:main com.new.package.name
    

    这将更改在Android中更改包名称的所有复杂内容。然后,在flutter的iOS文件夹上右键单击并使用Xcode打开。

    Xcode 中,选择 Runner > 在 general 选项卡中,您可以更改 bundle Identifier。

    如果您已经创建了项目并不知道更改包名称的复杂性,那么这是最简单的方法。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接