Android Maps API需要openGL es 2

Maps v2文档指出:

由于Google Maps Android API的版本2需要OpenGL ES版本2,因此您必须在AndroidManifest.xml中将<uses-feature>元素添加为manifest元素的子元素:

 <uses-feature android:glEsVersion="0x00020000" android:required="true"/>` 

这通知外部服务的要求。 特别是,它会阻止Google Play商店在不支持OpenGL ES版本2的设备上显示您的应用。

实际上,如果不在清单中,它会抛出exception 。 我不想在商店中过滤我的应用程序,我打算继续使用旧设备的旧地图,并且只有在运行时检测到所需function时才显示新地图,而不是在安装之前检测到。

那我该怎么做? 它是否必须是不同的manifests多个APKs东西?

最终更新

截至2013年12月20日, Android仪表板显示大约100%的设备现在支持OpenGL 2.0+,所以这个答案不再相关。 你可能只需要清单中的OpenGL ES 2.0+。

更新

这是从Google Play服务SDK插件修订版7开始修复的。 使用<uses-feature android:glEsVersion="0x00020000" android:required="false"/>并在运行时检测OpenGL ES 2.0是安全的 。

原始答案

看来Google Maps Android API v2需要在AndroidManifest.xml显式<uses-feature android:glEsVersion="0x00020000" android:required="true/>声明,所以没有办法部署Google Maps Android API v2服务不包括所有OpenGL ES 1.x设备在撰写本文时, Google的Android Dashboard显示,在1.1和2.0设备中,90.8%的设备支持2.0。

在特定的设备(摩托罗拉XOOM),这个代码导致supportsEs2 = true Es2 supportsEs2 = true

 // Check if the system supports OpenGL ES 2.0. final ActivityManager activityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); final ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo(); final boolean supportsEs2 = configurationInfo.reqGlEsVersion >= 0x20000; 

但是,如果清单中没有<uses-feature>声明,MapFragment会抛出一个RuntimeException:

  Caused by: java.lang.RuntimeException: Google Maps Android API only supports OpenGL ES 2.0 andabove. Please add <uses-feature android:glEsVersion="0x00020000" android:required="true" /> into AndroidManifest.xml at maps.y.ae.a(Unknown Source) at maps.y.bu.a(Unknown Source) at maps.yponCreateView(Unknown Source) at com.google.android.gms.maps.internal.IMapFragmentDelegate$Stub.onTransact(IMapFragmentDelegate.java:107) at android.os.Binder.transact(Binder.java:297) at com.google.android.gms.maps.internal.IMapFragmentDelegate$a$a.onCreateView(Unknown Source) at com.google.android.gms.maps.SupportMapFragment$a.onCreateView(Unknown Source) at com.google.android.gms.internal.c$4.a(Unknown Source) at com.google.android.gms.internal.ca(Unknown Source) at com.google.android.gms.internal.c.onCreateView(Unknown Source) at com.google.android.gms.maps.SupportMapFragment.onCreateView(Unknown Source) at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:884) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1066) at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1168) at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:280) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:669) ... 22 more 

希望对地图库进行更新可以消除此限制,以便我们可以部署单个APK,并使用运行时API确定是否加载新的Google地图v2体验或回退到其他兼容的解决scheme。

这个问题已经解决,将会在问题#4699中提到的下一个版本的Maps Android API 发布

我有同样的问题,环顾四周,模拟器的大部分build议的解决方法不适合我。 然后我发现一个post是Genymotion模拟器被build议。 这个模拟器支持OpenGL ES版本2.它也比标准模拟器快得多。