Android:如何删除 Amazon AppStore 和 Kindle 的地图功能

Posted

技术标签:

【中文标题】Android:如何删除 Amazon AppStore 和 Kindle 的地图功能【英文标题】:Android: How to remove map features for Amazon AppStore & Kindle 【发布时间】:2012-10-26 00:19:26 【问题描述】:

我有一个在 Google Play 和 Amazon AppStore 上发布的应用程序。我最近向这个应用程序添加了地图 API 功能,所以我不得不使用 Google APIs SDK 来构建它。我已在 Google Play 上成功发布了我的新版本,但在 Amazon 上遇到了问题。

亚马逊 AppStore 拒绝了该应用程序,因为他们说 Kindle 系列设备不支持它。经过进一步研究,我下载了新的 Kindle 模拟器,发现它们不支持 Google API。由于 Kindle Fire 平板电脑似乎是人们通过 Amazon AppStore 购买应用程序的主要设备,因此我意识到我需要提交一个不包含地图功能的应用程序版本,否则是同一个应用程序。

所以我的问题是:如何创建基于标准 android SDK 且不包含映射 API,但使用相同 Java 源文件的应用程序的第二个版本?作为一名长期的 C++ 程序员,我可以使用条件编译标志在 C++ 中轻松完成此操作,但我开始意识到 Java 不支持条件编译。而且我当然不知道如何从一个 Android Eclipse 构建中排除库并将它们包含在另一个构建中。

谁能给我一些关于如何在 Android 中实现我想要的结果的提示?我知道我可以创建两个单独的应用程序,但是会有很多代码重叠,当我必须进行更新时,这对我来说会做更多的工作,我真的不想为了支持 Kindle 而维护两个单独的代码库着火了!

【问题讨论】:

我认为这可能会作为一个图书馆项目运作良好。将所有公共代码移动到一个库中,您可以创建两个都继承该库的项目,并且您可以根据正在编译的项目有条件地包含/排除代码。我对如何做到这一点进行了相当详细的解释in this answer。 谢谢蒂姆,我一直在玩弄这个想法。我看到你在你的答案中已经完全开发了它,所以我会尝试一下——看起来很有希望! @AlanMoore 你最后做了什么?我的情况非常相似。 @mattblang -- 我最终构建了一个没有映射功能的应用程序版本,有一天我打算学习亚马逊 API,但到目前为止我还没有时间! 【参考方案1】:

您可以检查 Build.Manufacturer 是否等于“Amazon”或检查应用程序是否为 installed from the Amazon AppStore(例如在 Fire 设备上或现在在 Blackberry 上)以及它是否未初始化或调用谷歌地图功能(如果图书馆在那里,只要它们不活跃,似乎不会受到伤害)

boolean isAmazonDevice = Build.MANUFACTURER.equalsIgnoreCase("amazon");

final Application application = getApplication();
String installerName = application.getPackageManager().getInstallerPackageName(application.getPackageName());
boolean fromAmazonStore = installerName != null && installerName.equalsIgnoreCase("com.amazon.venezia");

然后检查以下值:

isAmazonDevice || fromAmazonStore

【讨论】:

我必须尝试一下,总的来说肯定会让我的生活更轻松!

以上是关于Android:如何删除 Amazon AppStore 和 Kindle 的地图功能的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 应用程序中播放来自 Amazon S3 的视频?

如何直接从我的 Android 应用程序打开 Amazon AppStore?

如何将 Amazon Alexa SDK 集成到 Android 应用程序?

仅当表存在时如何删除 Amazon Redshift 中的表

如何真正快速地从 Amazon SQS(简单队列服务)队列中删除事件?

如何使用 Intent 在 android TV 上启动 amazon prime video 应用程序