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

时间:2015-04-27 14:00:47

标签: android android-studio android-productflavors amazon-appstore

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

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

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

您有任何想法,建议或链接吗?感谢。

2 个答案:

答案 0 :(得分:7)

您可以使用产品口味来实现这一目标。每个产品风味都可以拥有自己的AndroidManifest,每个风味的清单将在编译时与主应用程序清单合并。请参阅文档的build variants部分。

例如,您可以定义以下产品风格

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

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

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

您还可以将所有Google Play服务代码和相关内容放入googleplay风格中,例如:

_id

答案 1 :(得分:3)

  

使用Android Studio时该怎么办?

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

  • 使用googleCompile代替compile,用于Play Services SDK依赖项。

  • 仅在您的google风格版清单中提供Play服务元数据。

  • 将依赖于Play Services SDK的代码放在google flavor的sourceset中。请注意,您可能需要将该代码的一些钩子抽象到您在每种风格中实现的NotificationStrategy类,其中google一个使Play服务工作,amazon风格别的东西(或什么都没有)。然后,main中的代码可以引用NotificationStrategy并为每种风格获得正确的实现。