谷歌播放说:“你需要使用不同的包名” - 为什么?

时间:2013-07-05 15:47:14

标签: android

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

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

您需要使用其他软件包名称,因为“com.mycompany.mygame”已被其他某个应用程序使用

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

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

6 个答案:

答案 0 :(得分:9)

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

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分: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 Tools”,然后选择“重命名应用程序包”

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

答案 5 :(得分:0)

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

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