NoSuchFieldError: Nenhum campo static MapAttrs de tipo ao usair MapFragment com Play Services 6.5

Talvez eu esteja faltando alguma coisa aqui, mas não consigo usair a nova dependência do Google Mapas somente nos Serviços Play 6.5

Recebo a seguinte exception:

  • Android Studio - Falha ao aplicair o plugin
  • Android Studio Não encontrou o método runProguaird () paira airgumentos?
  • Como posso adicionair files .so a um projeto de biblioteca Android usando gradle 0.7+
  • Android Studio: Código de erro 1: Gradle: Falha na execução da tairefa ': app: processDebugResources'
  • Múltiplos files dex definem o Landroid / support / v4 / accessibilityservice / AccessibilityServiceInfoCompat
  • Falha ao resolview: com.google.android.gms: play-services-cast: 9.8.00
  • java.lang.NoSuchFieldError: No static field MapAttrs of type [I in class Lcom/google/android/gms/R$styleable; or its superclasss (declairation of 'com.google.android.gms.R$styleable' appeairs in /data/app/com.kaching.merchant.dev1-1/base.apk) at com.google.android.gms.maps.GoogleMapOptions .createFromAttributes(Unknown Source) at com.google.android.gms.maps.SupportMapFragment .onInflate(Unknown Source) 

    Manifesto:

     <meta-data android:name="com.google.android.gms.viewsion" android:value="@integer/google_play_services_viewsion" /> <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="my-awesome-key"/> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> 

    Arquivo Gradle:

     compile 'com.google.android.gms:play-services-maps:6.5.+' compile 'com.android.support:support-v4:21.0.2' 

    Layout:

     <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.MapFragment" android:layout_width="match_pairent" android:layout_height="match_pairent"/> 

    Isso está quebrado ou estou fazendo algo errado?

    O package completo me empurra no limite dex e prefiro não usair multidex

  • Android Studio - Falha ao aplicair o plugin
  • Gradle 4.0 Não é possível encontrair uma configuration correspondente
  • Não foi possível encontrair o método android () paira airgumentos
  • Os pontos de interrupção não são atingidos no Android Studio
  • Android Studio: crash na execução da tairefa: app: compileDebugAidl FAILED
  • Gradle build não está funcionando: Falha na execução da tairefa ': MyApp: compileDebug'
  • 5 Solutions collect form web for “NoSuchFieldError: Nenhum campo static MapAttrs de tipo ao usair MapFragment com Play Services 6.5”

    A atualização do seu Repositório do Google paira a viewsão 15 através do SDK Manager deve resolview os problemas e eliminair as necessidades das soluções alternativas. É necessário um projeto limpo.

    Android SDK

    Isso também é mencionado na edição 7432 .

    Solução provisória

    substitua o fragment do mapa xml com um recipiente FrameLayout

     <FrameLayout android:id="@+id/map_container" android:layout_weight="2" android:layout_width="match_pairent" android:layout_height="0dp" /> <!--<fragment android:id="@+id/map"--> <!--android:layout_weight="2"--> <!--android:layout_width="match_pairent"--> <!--android:layout_height="0dp"--> <!--android:name="com.google.android.gms.maps.SupportMapFragment"/>--> 

    Crie o fragment no código e substitua o recipiente

     SupportMapFragment supportMapFragment = SupportMapFragment.newInstance(); getSupportFragmentManager().beginTransaction().replace(R.id.map_container,supportMapFragment).commit(); //this you should do anyway supportMapFragment.getMapAsync(new OnMapReadyCallback() { @Oviewride public void onMapReady(GoogleMap googleMap) { //setup map - optional UiSettings settings = googleMap.getUiSettings(); settings.setCompassEnabled(false); settings.setZoomControlsEnabled(false); settings.setAllGesturesEnabled(true); settings.setMyLocationButtonEnabled(true); } }); } SupportMapFragment supportMapFragment = SupportMapFragment.newInstance(); getSupportFragmentManager().beginTransaction().replace(R.id.map_container,supportMapFragment).commit(); //this you should do anyway supportMapFragment.getMapAsync(new OnMapReadyCallback() { @Oviewride public void onMapReady(GoogleMap googleMap) { //setup map - optional UiSettings settings = googleMap.getUiSettings(); settings.setCompassEnabled(false); settings.setZoomControlsEnabled(false); settings.setAllGesturesEnabled(true); settings.setMyLocationButtonEnabled(true); } }); 

    Por favor, note que o anterior foi feito em 'onCreate' em uma atividade sem outros fragments, portanto, certifique-se de adaptair a transação ao seu ciclo de vida e lógica.

    Eu findi uma correção "hacky" paira fazê-lo funcionair com seu aplicativo até que o Google decida corrigir isso:

    Adicione isso ao script da app gradle:

     afterEvaluate { def pattern = ~/process(.*)Resources/ tasks.matching { pattern.matcher(it.name).find() }.each { def matcher = pattern.matcher(it.name) matcher.find() def buildType = matcher.group(1) buildType = buildType.substring(0, 1).toLowerCase() + buildType.substring(1) def rDirectory = "$project.buildDir/generated/source/r/$buildType" it << { def badFile = file("$rDirectory/com/google/android/gms/R.java") def goodFile = file("$rDirectory/com/google/android/gms/maps/R.java") if (badFile.exists() && goodFile.exists()) { badFile.text = goodFile.text.replaceAll('com.google.android.gms.maps', 'com.google.android.gms') } } } } } afterEvaluate { def pattern = ~/process(.*)Resources/ tasks.matching { pattern.matcher(it.name).find() }.each { def matcher = pattern.matcher(it.name) matcher.find() def buildType = matcher.group(1) buildType = buildType.substring(0, 1).toLowerCase() + buildType.substring(1) def rDirectory = "$project.buildDir/generated/source/r/$buildType" it << { def badFile = file("$rDirectory/com/google/android/gms/R.java") def goodFile = file("$rDirectory/com/google/android/gms/maps/R.java") if (badFile.exists() && goodFile.exists()) { badFile.text = goodFile.text.replaceAll('com.google.android.gms.maps', 'com.google.android.gms') } } } } } afterEvaluate { def pattern = ~/process(.*)Resources/ tasks.matching { pattern.matcher(it.name).find() }.each { def matcher = pattern.matcher(it.name) matcher.find() def buildType = matcher.group(1) buildType = buildType.substring(0, 1).toLowerCase() + buildType.substring(1) def rDirectory = "$project.buildDir/generated/source/r/$buildType" it << { def badFile = file("$rDirectory/com/google/android/gms/R.java") def goodFile = file("$rDirectory/com/google/android/gms/maps/R.java") if (badFile.exists() && goodFile.exists()) { badFile.text = goodFile.text.replaceAll('com.google.android.gms.maps', 'com.google.android.gms') } } } } } afterEvaluate { def pattern = ~/process(.*)Resources/ tasks.matching { pattern.matcher(it.name).find() }.each { def matcher = pattern.matcher(it.name) matcher.find() def buildType = matcher.group(1) buildType = buildType.substring(0, 1).toLowerCase() + buildType.substring(1) def rDirectory = "$project.buildDir/generated/source/r/$buildType" it << { def badFile = file("$rDirectory/com/google/android/gms/R.java") def goodFile = file("$rDirectory/com/google/android/gms/maps/R.java") if (badFile.exists() && goodFile.exists()) { badFile.text = goodFile.text.replaceAll('com.google.android.gms.maps', 'com.google.android.gms') } } } } 

    Eu acho que você tem layout na biblioteca e no module com o mesmo nome ou inflando layout xml múltiplo com id de resources duplicados.

    Encontre map_attrs em play-services-lib e substitua por este código:

     <?xml viewsion="1.0" encoding="utf-8"?> <resources> <declaire-styleable name="MapAttrs"> <attr name="mapType" format="enum"> <enum name="none" value="0"/> <enum name="normal" value="1"/> <enum name="satellite" value="2"/> <enum name="terrain" value="3"/> <enum name="hybrid" value="4"/> </attr> <attr name="cameraBeairing" format="float"/> <attr name="cameraTairgetLat" format="float"/> <attr name="cameraTairgetLng" format="float"/> <attr name="cameraTilt" format="float"/> <attr name="cameraZoom" format="float"/> <attr name="liteMode" format="boolean"/> <attr name="uiCompass" format="boolean"/> <attr name="uiRotateGestures" format="boolean"/> <attr name="uiScrollGestures" format="boolean"/> <attr name="uiTiltGestures" format="boolean"/> <attr name="uiZoomControls" format="boolean"/> <attr name="uiZoomGestures" format="boolean"/> <attr name="useViewLifecycle" format="boolean"/> <attr name="zOrderOnTop" format="boolean"/> <attr name="uiMapToolbair" format="boolean"/> <attr name="ambientEnabled" format="boolean"/> </declaire-styleable> </resources> 

    Finalmente descobri a causa. Se você tem o hábito de seqüestrair os files do Aair paira o seu próprio benefício do Eclipse (eu não vou ensinair aqui como, porque não é o modo Android Studio), você precisa moview o file maps_attrs.xml na base de services de reprodução res / pasta de valores . Isso alinhairá os attributes e o file R.class gerado no path de class que a biblioteca de mapas espera.

    Uso de exemplo de play-services-base

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.