从相同的代码生成略有不同的 APK
Posted
技术标签:
【中文标题】从相同的代码生成略有不同的 APK【英文标题】:Generate slightly different APKs from the same code 【发布时间】:2015-07-06 00:49:09 【问题描述】:我开发了一个使用Parse
和push notifications
(GCM,Google Cloud Messaging
)的小游戏。但是,当我尝试将我的应用上传到亚马逊商店时,他们说它不会在某些设备上发布,因为它使用 GCM。
所以,解决方法很简单,只需删除 notifications
。
我遇到的问题是我想尽可能多地自动化 apk 生成。
在 ios 下(我是 iOS 开发人员,android 新手),我只创建 2 个目标并使用 DEFINE 我可以根据目标修改代码。
我想要类似的东西,所以我在亚马逊版本中使用了另一个manifest
,当然我删除了推送代码。
使用Android Studio
时,我该怎么做?
我怀疑我必须使用gradle或者模块的概念,因为在Android Studio
中创建signed apk
时我必须选择“app” module
。
您有什么想法、建议或链接吗?谢谢。
【问题讨论】:
单个应用程序应包含单个 Manifest。 你不能肯定有两个清单。我猜你可以有两个应用程序模块,但我建议有两个单独的 VCS 分支,而不是复制整个代码。 【参考方案1】:您可以使用产品风味来完成此操作。每个产品风格都可以有自己的 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'
【讨论】:
谢谢!我不知道构建变体。这正是我想要的。【参考方案2】:在使用 Android Studio 时如何做到这一点?
这是product flavors 的工作。创建 google
风味和 amazon
风味。那么:
使用 googleCompile
,而不是 compile
,作为您的 Play Services SDK 依赖项。
仅在您的 google
风格的清单版本中包含播放服务元数据。
将依赖于 Play 服务 SDK 的代码放在 google
风格的源集中。请注意,您可能需要将该代码的一些挂钩抽象到您在每种风格中实现的 NotificationStrategy
类中,其中 google
用于播放服务工作,amazon
风格用于其他(或什么都不做) .然后,您在 main
中的代码可以引用 NotificationStrategy
并为每种风格获得正确的实现。
【讨论】:
以上是关于从相同的代码生成略有不同的 APK的主要内容,如果未能解决你的问题,请参考以下文章
无法从您的 Ionic 应用生成 Android App Bundle(没有 Android Studio)