5

在我的应用程序中支持两个 android 地图 api 的最佳方式是什么?

Google发布了 android google map api v2,而v1仍然存在(并且更适用于旧手机)。

到目前为止,我看到了两个场景。

1) 两个 apk:每个 api 一个 apk

我可以使用google play.

  • 我将如何区分google play?关于opengl的支持?

这种情况意味着每次我想构建我的项目时,我都必须复制/粘贴一些文件,更新其他文件,这可能很麻烦。

除非我使用定制的构建过程(使用 ant 或 maven)。

  • 关于这件事有什么建议吗?

2)一个APK

可以使用if/else语句来实现这一点,包括在manifest文件中对两个api 的声明。

  • 有没有人试过这个?

注意:旧手机的谷歌地图

首先,新的 v2 api 是基于矢量的,它在 CPU/GPU 上更重(v1 api 使用位图块)。

其次,新的 v2 api 需要 opengl 2.0。据说在所有运行froyo或更高版本的 Android 设备中都支持。 不幸的是,这不是真的

例如,一个古老的 HTC 魔术运行姜饼(在自定义 rom 上)不被 google play/market 识别以支持 opengl 2.0。

也许还有更多……

4

2 回答 2

5

可以使用 if/else 语句来实现这一点,包括在清单文件中两个 api 的声明。

好吧,清单中不能有“if/else 语句”。

从我的角度来看,基本上有三种情况:

  1. 设备没有 OpenGL ES 2.0 或更高版本
  2. 该设备确实有 OpenGL ES 2.0 或更高版本,但目前没有 Google Play 服务(可能是因为它没有 Play 商店)
  3. 该设备具有 OpenGL ES 2.0 或更高版本并具有 Google Play 服务

正如您在对另一个答案的评论中指出的那样,我的场景 #1 不能与其他两个共存,仅仅是因为您必须拥有<uses-feature>调用 OpenGL ES 2.0 的元素。而且,由于 Play Store 不支持基于 OpenGL ES API 级别的多个 APK 文件,因此您不能同时支持场景 #1 和其他两个场景用于同一个 Play Store 列表。您必须在 Play 商店中拥有两个完全独立的应用程序:一个只使用适用于所有 Android 设备的 Maps V1,另一个使用 Maps V2(在我的场景 #2 中回退到其他东西,例如 Maps V1)适用于 OpenGL ES 2.0+ 设备。

此外,请记住Maps V1 API 密钥在 2013 年 3 月 3 日之后将不再可用。在那之后进行 Maps V1 开发的风险越来越大,因为如果您的开发环境出现问题,您将无法获得新的 API 密钥。

基本上,这意味着开发依赖于谷歌地图的应用程序在新的和有趣的方式上很糟糕,与以前的方式相比。即使您说您将彻底放弃 Maps V1,也有属于我的场景 #2 的设备。希望没有那么多,尽管肯定有一些(例如坐在我附近的 HTC EVO 3G)。不应该有这样的设备运行 Android 3.0 及更高版本——我很确定 OpenGL ES 2.0 是 Android 3.0 的硬性要求,并且 Play 商店应该在所有这些设备上(因此, Google Play 服务应该可供所有人使用)。

坦率地说,对于一些开发人员来说,最好的答案是完全放弃 Google 的地图,并使用 OpenStreetMap 或其他更稳定的东西,如果他们想支持 Android 1.x/2.x 设备。

于 2012-12-22T15:26:15.377 回答
1

OpenGL 2.0 的要求更多是从支持的角度来看的。例如,我发现 Google Maps Android API v2 在 HTC Wildfire 上运行良好!

简短回答您的问题:不要这样做。选一个,坚持。

中等答案:不要这样做。选一个,坚持。如果您确实需要一些旧功能并且无法在新的 v2 API 中重新创建它们,那么这表明您应该坚持使用 v1。

如果您担心的只是一些旧的 2.1 设备 - 不用担心,人们真的不应该再使用 2.1 了,因为它存在安全漏洞,您通过不支持它来提供公共服务(鼓励用户更新他们的手机......从环保的角度来看有点可悲,但制造商和运营商已经强迫这个问题,所以不要让它成为你的问题!)。

如果您担心的只是一些非 OpenGL 2.0 设备,那么请忽略功能要求,尽管可能会出现一些疯狂的问题。可能最好提供一个明确的警告,即在非 OpenGL 2.0 设备上可能会出现问题。

如果你真的,真的必须支持这两个版本,那就去做吧。没有多少人会疯狂到做同样的事情,以至于你会发现一个“最佳实践”列表。不过,您可能想使用其中一种 v1 API MapFragment 解决方案,碰巧我写了一个:https ://github.com/coreform/android-tandemactivities

于 2012-12-22T02:49:52.563 回答