Intereting Posts
Информация о дорожке текущей музыки SQLite с Android NDK Изменение цвета текста заголовка ActionBar с использованием темы Light.DarkActionBar в AppCompat 21 При рисовании вне рамки клипа просмотра с Android: как я могу предотвратить недоразвитие представлений от рисования поверх моего пользовательского представления? Ошибка приложения при запуске, вызванная NPE в android.content.Context.getString Конверсия в формат Dalvik завершилась с ошибкой 1 Решение? Изменение высоты ActionBar по темам Android масштабирование изображений до плотности экрана Android-браузер обновляет страницу после выбора файла через элемент ввода Вызвано: java.lang.OutOfMemoryError: размер растрового изображения превышает бюджет VM Как удалить вид, когда заканчивается анимация? Галерея Android с увеличенным зумом Где останавливать / уничтожать потоки в Android-классе? Android: Appcompat 21 как добавить тень на панель действий Минимальное разрешение экрана для устройств Android

NoSuchFieldError: Нет статического поля MapAttrs типа при использовании MapFragment с Play Services 6.5

Может быть, я здесь что-то не хватает, но я не могу использовать новую зависимость только для Карт в Play Services 6.5

Я получаю следующее исключение:

java.lang.NoSuchFieldError: No static field MapAttrs of type [I in class Lcom/google/android/gms/R$styleable; or its superclasses (declaration of 'com.google.android.gms.R$styleable' appears 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) 

Manifest:

 <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <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"/> 

Gradle file:

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

Планировка:

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

Является ли это сломанным, или я делаю что-то неправильно?

Полный комплект подталкивает меня к пределу dex, и я бы предпочел не использовать multidex

Solutions Collecting From Web of "NoSuchFieldError: Нет статического поля MapAttrs типа при использовании MapFragment с Play Services 6.5"

Обновление вашего репозитория Google до версии 15 помощью диспетчера SDK должно решить проблемы и устранить потребности в обходных решениях. Требуется очистка проекта.

Android SDK

Об этом также говорится в выпуске 7432 .

Временное решение

Замените фрагмент карты xml контейнером FrameLayout

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

Создайте фрагмент кода и замените контейнер

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

Обратите внимание, что выше было сделано в onCreate в действии без каких-либо других фрагментов, поэтому убедитесь, что вы адаптируете транзакцию к вашему жизненному циклу и логике.

Я нашел «хакерское» исправление, чтобы заставить его работать с вашим приложением, пока Google не решит это:

Добавьте это в свой скрипт сценария app :

 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') } } } } 

Я думаю, что у вас есть макет как в библиотеке, так и в модуле с тем же именем или раздувании нескольких макетов xml с дублированным идентификатором ресурса.

Найдите map_attrs в play-services-lib и замените его следующим кодом:

 <?xml version="1.0" encoding="utf-8"?> <resources> <declare-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="cameraBearing" format="float"/> <attr name="cameraTargetLat" format="float"/> <attr name="cameraTargetLng" 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="uiMapToolbar" format="boolean"/> <attr name="ambientEnabled" format="boolean"/> </declare-styleable> </resources> 

Наконец, я выяснил причину. Если у вас есть привычка похищать файлы aar для вашего собственного преимущества Eclipse (я не собираюсь преподавать здесь, так как это не путь Android Studio), вам нужно переместить файл maps_attrs.xml на play-services-base Res / values . Это приведет к выравниванию атрибутов и сгенерированного файла R.class в пути класса, который ожидает библиотека карт.

Пример использования игровых сервисов