web-dev-qa-db-fra.com

Android API Maps nécessite openGL es 2

La documentation de Maps v2 indique:

Étant donné que la version 2 de Google Maps Android nécessite OpenGL ES version 2, vous devez ajouter un <uses-feature> élément en tant qu'enfant de l'élément manifest dans AndroidManifest.xml:

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

Cela informe les services externes de l'exigence. En particulier, cela a pour effet d'empêcher Google Play Store d'afficher votre application sur des appareils qui ne prennent pas en charge OpenGL ES version 2.

En fait, il lance un exception si ce n'est pas dans le manifeste. Je ne veux pas filtrer mon application dans la boutique, je prévois de continuer à utiliser les anciennes cartes pour les anciens appareils et à n'afficher les nouvelles cartes que si les fonctionnalités requises sont présentes, détectées au moment de l'exécution plutôt qu'avant l'installation.

Alors, comment je fais ça? Doit-il s'agir de quelque chose comme plusieurs APKs avec différents manifests?

34
rockgecko

Mise à jour finale

Depuis le 20/12/2013, le Tableau de bord Android montre qu'environ 100% des appareils prennent désormais en charge OpenGL 2.0+, donc cette réponse n'est plus pertinente. Vous pouvez simplement avoir besoin d'OpenGL ES 2.0+ dans votre manifeste.

Mise à jour

Ce problème est résolu à partir de la version 7 du module complémentaire SDK des services Google Play. Il est sûr d'utiliser <uses-feature Android:glEsVersion="0x00020000" Android:required="false"/> et à détecter OpenGL ES 2.0 lors de l'exécution .

Réponse originale

Il semble que Google Maps Android API v2 nécessite un _ <uses-feature Android:glEsVersion="0x00020000" Android:required="true/> déclaration dans AndroidManifest.xml il n'y a donc aucun moyen de déployer Google Maps Android API v2 sans exclure tous les appareils OpenGL ES 1.x. Au moment d'écrire ces lignes, Google Android Dashboard montre que, parmi les appareils 1.1 et 2.0, 90,8% des appareils prennent en charge 2.0.

Sur un appareil particulier (Motorola XOOM), ce code entraîne 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;

Cependant, lorsqu'il n'y a pas de <uses-feature> déclaration dans le manifeste, MapFragment lève une 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

Nous souhaitons qu'une mise à jour de la bibliothèque Maps supprime cette limitation afin que nous puissions déployer un seul fichier APK et utiliser les API d'exécution pour déterminer s'il faut ou non charger la nouvelle expérience Google Maps v2 ou revenir à une autre solution compatible.

35
James Wald

Ceci est corrigé et sera publié avec la prochaine version de Maps Android API comme mentionné dans problème # 4699

2
chrulri

J'ai eu le même problème, j'ai regardé autour de moi et la plupart des solutions de contournement suggérées pour l'émulateur n'ont pas fonctionné pour moi. Ensuite, j'ai trouvé un article où l'émulateur Genymotion a été suggéré. Cet émulateur prend en charge OpenGL ES version 2. Il est également beaucoup plus rapide que l'émulateur standard.

1
Roy08