【问题标题】:Google play says: "You need to use a different package name" - why?谷歌播放说:“你需要使用不同的包名” - 为什么?
【发布时间】:2013-07-03 18:43:30
【问题描述】:

我已经在 google play 上发布了一个名为 com.mycompany.mygame 的应用程序。

然后我决定发布它的无广告版本。我没有在 Eclipse 中更改包名称,因为我注意到在“导出”过程中,您有机会将最终的 apk 设置为您喜欢的任何内容。所以我将它设置为 com.mycompany.mygameaf - 注意最后的附加“af”。但后来当试图将其上传到市场时,谷歌说:

您需要使用不同的包名称,因为“com.mycompany.mygame”已被您的其他应用程序之一使用

所以现在我很困惑。投诉是因为我不允许拥有一个作为以前应用程序的名称和扩展名的 apk 吗?或者最终的 apk 是否知道原始名称是什么?

解决此问题的最简单方法是什么?

【问题讨论】:

标签: android


【解决方案1】:

除了更正 Manifest 中的应用名称外,我还必须在应用的 gradle.build 文件中更改 applicationId

 defaultConfig {
    applicationId "com.example.changednameofmyapp"
    ...
}

另外,如果您使用 ProGuard,请不要忘记更改 proguard-rules.pro

中的相应规则

只需在整个项目中搜索旧包名并更改即可。

【讨论】:

  • 同时更改 google-services.json 文件中的包名
【解决方案2】:

无论.apk文件的名称是什么,里面的Application内容的包名都必须是唯一的。

您可以使用 refactor-rename 来更改它,但要确保更改渗透到清单文件、proguard 配置等。

【讨论】:

  • 我必须在哪里进行此更改?
  • 在提出问题并编写此答案的时代,解决问题的最简单方法是Eclipse IDE中提到的refactor-rename命令。其他答案为基于 Android Studio 和 gradle 的后续工作流提供了解决方案,并且推测未来的答案可能会解决尚未引入的工作流的问题。
【解决方案3】:

APK 的名称无关紧要,重要的是 AndroidManifest 文件中的包名称。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.yourcompany.yourapp"

市场上只有一个应用程序具有该软件包名称,因此为了发布您的无广告版本,您必须更改清单文件中的软件包名称,例如将 af 添加到清单中包名称的末尾。

【讨论】:

    【解决方案4】:

    正如其他答案中提到的,如果您将所有共享代码和资产放在一个公共库项目中,该项目依赖于您的付费和免费版本,您的开发会更简单。

    您可能还希望使用新的 Gradle 构建系统(在 Android Studio 中),它允许您在运行时动态设置包名称等内容。它还允许您在构建时切换资源,非常方便;你可以有一个boolean resource 代表当前应用程序是否是付费版本。这允许您根据对该值的检查来启用/禁用应用功能。

    【讨论】:

      【解决方案5】:

      APK 的文件名无关紧要,您的应用程序的包名用作唯一标识符 - 它位于 AndroidManifest.xml 的根元素中

      <?xml version="1.0" encoding="utf-8"?>
      <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         package="com.example.packagename"
         android:versionCode="1"
         android:versionName="1.0" >
      

      当您最初在 Eclipse 中创建项目时,它会创建一个与此包名称匹配的实际包结构,以便您将源文件放入其中。

      您实际上可以通过修改此清单值来更改您的包名称,并且您可以保持文件夹/包结构不变 - 它不需要与您的实际应用程序包名称匹配。

      或者,在 Eclipse 中右键单击您的项目,转到“Android 工具”,然后选择“重命名应用程序包”

      完成此操作后,您应该能够提交二进制文件

      【讨论】:

        【解决方案6】:

        清单中的包名称用于在 Android 和 Google Play 中识别应用程序。所以不同的应用需要不同的名字。

        最简单的解决方法可能是只创建一个新包,其中不包含任何代码,并将其用作清单中应用的包名称。

        我为解决来自一个代码库的多个应用程序问题所做的工作是将所有应用程序的代码放入一个库项目中,然后我有几个应用程序项目使用该库。应用项目不包含代码,仅包含清单和自定义资源。

        【讨论】:

          猜你喜欢
          • 2016-10-17
          • 2011-05-21
          • 2012-01-24
          • 2017-09-09
          • 1970-01-01
          • 2011-09-15
          • 1970-01-01
          • 2021-12-26
          • 2021-08-18
          相关资源
          最近更新 更多