13

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

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

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

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

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

4

6 回答 6

15

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

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

此外,如果您使用 ProGuard,请不要忘记在您的proguard-rules.pro中更改适当的规则

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

于 2017-06-14T13:00:38.053 回答
1

无论 .apk 文件的名称如何,其中的 Application 内容的包名必须是唯一的。

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

于 2013-07-05T15:49:37.393 回答
1

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

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

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

于 2013-07-05T16:24:03.373 回答
0

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

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

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

于 2013-07-05T15:50:02.053 回答
0

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 工具”,然后选择“重命名应用程序包”

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

于 2013-07-05T16:05:37.347 回答
0

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

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

于 2013-07-05T16:06:56.600 回答