从相同的代码生成略有不同的 APK

Generate slightly different APKs from the same code

我开发了一个使用Parsepush notifications(GCM,Google Cloud Messaging)的小游戏。但是,当我尝试将我的应用程序上传到亚马逊商店时,他们说它不会在某些设备上发布,因为它使用的是 GCM。

所以,解决方法很简单,只需删除notifications。 我遇到的问题是我想尽可能地自动化 apk 生成。 在 iOS 下(我是 iOS 开发人员,Android 的新手),我只创建了 2 个目标并使用 DEFINE 我可以根据目标修改代码。 我也想有类似的东西,所以我又用了一个亚马逊版的manifest,当然去掉了推送码

使用 Android Studio 时我该怎么做? 我怀疑我必须使用 gradle 或者模块的概念,因为在 Android Studio 中创建 signed apk 时我必须 select “app” module.

您有什么想法、建议或link吗?谢谢。

您可以使用产品风味来完成此操作。每个产品风格都可以有自己的 AndroidManifest,每个风格的清单将在编译时与主要应用程序清单合并。请参阅文档的 build variants 部分。

例如,您可以定义以下产品口味

productFlavors {
    amazon
    googleplay
}

然后您可以设置以下清单文件

src/main/AndroidManifest.xml
src/amazon/AndroidManifest.xml
src/googleplay/AndroidManifest.xml <-- put GCM permissions here

您还可以将所有 Google Play 服务代码和依赖项放入您的 googleplay 风格中,例如:

dependencies {
    googleplayCompile 'com.google.android.gms:play-services-location:7.0.0'
}

How can I do that when using Android Studio?

这是 product flavors 的工作。创建 google 风味和 amazon 风味。那么:

  • 为您的 Play 服务 SDK 依赖项使用 googleCompile,而不是 compile

  • 仅在您的 google 版本清单中包含 Play 服务元数据。

  • 将依赖于 Play 服务 SDK 的代码放在 google 风格的源集中。请注意,您可能需要将该代码的一些挂钩抽象为您在每种风格中实现的 NotificationStrategy class,其中 google 负责 Play 服务工作,[=11] =] flavor 做其他事情(或什么都不做)。然后,您在 main 中的代码可以引用 NotificationStrategy 并针对每种风格获得正确的实现。