36

Mapsv2のドキュメントには次のように記載されています。

Google Maps AndroidAPIのバージョン2にはOpenGLESバージョン2が必要なため、AndroidManifest.xml<uses-feature>の要素の子として要素を 追加する必要があります。manifest

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

これにより、外部サービスに要件が通知されます。特に、OpenGLESバージョン2をサポートしていないデバイスでGooglePlayストアがアプリを表示しないようにする効果があります。

実際、exceptionこれがマニフェストにない場合は、をスローします。ストアでアプリをフィルタリングしたくないので、古いデバイスの古いマップを引き続き使用し、インストール前ではなく実行時に検出された、必要な機能が存在する場合にのみ新しいマップを表示する予定です。

では、どうすればよいですか?APKsそれは異なる複数のようなものでなければなりmanifestsませんか?

4

3 に答える 3

36

最終更新

2013 年 12 月 20 日の時点で、Android ダッシュボードは、デバイスの約 100% が OpenGL 2.0+ をサポートしていることを示しているため、この回答はもはや関係ありません。マニフェストで OpenGL ES 2.0+ を要求するだけです。

アップデート

これは、Google Play Services SDK アドオンのリビジョン 7 で修正されました。安全に使用でき、実行時に OpenGL ES 2.0<uses-feature android:glEsVersion="0x00020000" android:required="false"/>を検出できます。

元の答え

Google マップ Android API v2 では明示的な<uses-feature android:glEsVersion="0x00020000" android:required="true/>宣言が必要なようです。AndroidManifest.xmlそのため、すべての OpenGL ES 1.x デバイスを除外せずに Google マップ Android API v2 サービスをデプロイする方法はありません。これを書いている時点で、Google の Android ダッシュボードは、1.1 と 2.0 のデバイスのうち、デバイスの 90.8% が 2.0 をサポートしていることを示しています。

特定のデバイス (Motorola XOOM) では、このコードは次の結果になり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.y.p.onCreateView(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.c.a(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 エクスペリエンスをロードするか、別の互換性のあるソリューションにフォールバックするかを決定できるようになることを願っています。

于 2012-12-05T17:42:31.723 に答える
2

これは修正されており、問題 #4699で説明されているように、Maps Android API の次のリリースでリリースされる予定です。

于 2013-02-01T10:27:13.700 に答える