2016-10-20 8 views
1

Я использую Карту Google в своем приложении. Я попытался использовать MapView, а также SupportMapFragment внутри фрагмента, который содержит карту. Проблема, которая возникает, приводит к сбою Google Maps после процесса «Build APK» (во всех проверенных мной устройствах) во время инициализации карты, но при запуске из Android Studio (с Run) она работает так, как ожидалось. Это трассировки стека (все это я получаю во всех исполнениях является AssertionError):Сбой карты Google во время выполнения сборки APK

10-19 12: 17: 27,244 2256-2638/com.google.android.gms E/BaseAppContext: Пытались остановить глобальное GMSCore RequestQueue. Это, вероятно, непреднамеренно, поэтому игнорируем. 10-19 12: 17: 28.640 1921-1921/com.google.android.gms.persistent E/BluetoothAdapter: Bluetooth-связующее имеет значение 10-19 12: 17: 29.537 1921-1921/com.google.android.gms .переменный адаптер E/Bluetooth: Bluetooth-связующее имеет значение 10-19 12: 17: 29.542 2256-2677/com.google.android.gms E/MDM: [142] rpv.a: Не удалось подключиться к клиенту API Google: ConnectionResult {statusCode = API_UNAVAILABLE, разрешение = null, message = null} 10-19 12: 17: 30.112 1921-1921/com.google.android.gms.persistent E/ChimeraRcvrProxy: не удается найти приемник химеры impl class com. google.android.gms.auth.setup.devicesignals.LockScreenChimeraReceiver, удаляющий трансляцию 10-19 12: 17: 31.602 2393-2501/com.app E/Поверхность: getSlotFromBufferLocked: неизвестный буфер: 0xaa112310 10-19 12:17: 36.351 2776-2782 /? E/art: Не удалось отправить ответ отладчику: Разбитая труба 10-19 12: 17: 37.267 1269-1617 /? E/SurfaceFlinger: ro.sf.lcd_density должно быть определено как свойство построения 10-19 12: 17: 46.449 1269-1269 /? Е/EGL_emulation: TID +1269: eglCreateSyncKHR (1370): Ошибка 0x3004 (EGL_BAD_ATTRIBUTE) 10-19 12: 17: 47,050 2393-2501/com.app Е/Поверхность: getSlotFromBufferLocked: неизвестный буфер: 0xaa112700 [10-19 12 : 17: 47.094 2393: 2842 D /] HostConnection :: get() Установлено новое хост-соединение 0xb4050b90, tid 2842 10-19 12: 17: 47.222 1899-2797/com.android.inputmethod.latin E/Поверхность: getSlotFromBufferLocked : неизвестный буфер: 0xae4428c0 10-19 12: 17: 48.704 2393-2769/com .app E/UncaughtException: java.lang.AssertionError at com.google.abam $ a. (Неизвестный источник) at com.google.abam $ 19.a (Неизвестный источник) at com.google.afa (Неизвестный источник) at com.google.ababa (Неизвестный источник) at com.google.afa (Неизвестный источник) на com.google.abaia (Неизвестный источник) на com.google.abaia (Неизвестный источник) на com.google.abai $ 1. (Неизвестный источник) на ru.google .abaia (Неизвестный источник) в com.google.a.b.a.i.а (Unknown Source)

Как указано здесь, я объявляю ключи API в сборки Gradle: Google Maps Signed APK Android

пример кода, как я инициализировать карту:

public class MainMapFragment extends BaseFragment implements{... 
    @Override 
public void onCreate(Bundle savedInstanceState) { 
    Log.d(Consts.TAGS.FRAG_MAIN_MAP,"BEGIN onCreate()"); 
    super.onCreate(savedInstanceState); 

    FragmentManager fm = getChildFragmentManager(); 
    _mapFragment = (SupportMapFragment) fm.findFragmentByTag(Consts.TAGS.UTIL_MAP); 
    if (_mapFragment == null) { 
     Log.d(Consts.TAGS.FRAG_MAIN_MAP,"mapFragment is null. creating new map..."); 
     _mapFragment = SupportMapFragment.newInstance(); 
     fm.beginTransaction().replace(R.id.map_container, _mapFragment).commit(); 
     _mapFragment.getMapAsync(this); 
    } 
@Override 
public void onMapReady(GoogleMap googleMap) { 
    Log.d(Consts.TAGS.FRAG_MAIN_MAP,"BEGIN onMapReady()"); 
    _map = googleMap; 
    //_map.setInfoWindowAdapter(this); 
    _map.setInfoWindowAdapter(new CDInfoWindowAdapter(getActivity(),_markersPos)); 
    _map.setOnInfoWindowClickListener(this); 
    _map.setPadding(120, 120, 170, 200); 
    MapsInitializer.initialize(getActivity());   
    initilizeMap(); 
} 

} 

и это макет Фрагмента:

<RelativeLayout tools:context=".MainMapFragment" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:id="@+id/map_container" 
xmlns:tools="http://schemas.android.com/tools" 
xmlns:android="http://schemas.android.com/apk/res/android"> 
<!--<fragment--> 
     <!--android:id="@+id/map"--> 
     <!--android:name="com.google.android.gms.maps.SupportMapFragment"--> 
     <!--android:layout_width="match_parent"--> 
     <!--android:layout_height="match_parent"--> 
     <!--/>--> 
<!--<com.google.android.gms.maps.MapView--> 
    <!--xmlns:android="http://schemas.android.com/apk/res/android"--> 
    <!--android:layout_width="match_parent"--> 
    <!--android:layout_height="match_parent"--> 
    <!--android:id="@+id/map_view"--> 
    <!--/> 
--> 
</RelativeLayout> 

Что может быть t он выдает, если код работает в режиме Run, но не в режиме «Build APK»?

+0

Вы добавили ключ карты google в манифест? –

+0

Каков ваш целевой API? можете ли вы показать нам initializeMap? – user1506104

ответ

0

Что я сделал, чтобы исправить это (потому что приложение не готово к производству, а API Google & SDK пытаются использовать ключ, который не имеет отношения к типу сборки apk) настраивает построение градиента на как я ожидал, что он сработает:

buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
    debug { 
     minifyEnabled false 
     **debuggable true** 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     resValue "string", "google_maps_api_key", "***************" 
    } 
} 
1

, похоже, проблема с вашим ключом карты для вашего apk. Вы создали новый ключ для своего пакета и ваш использованный ключ для сборки apk?

+0

У вас все получилось, но приложение не готово к выпуску. Поэтому я предпочел бы ответ, который я добавил здесь. Я думаю, что это неясно, почему google предпочла бы использовать другой ключ API (тот, который используется для производства) во время сборки отладки apk. – lionheart

2

Вы направились к тому, чтобы получить ключ SHA-1 для пения APK. Я думаю, вы должны проверить зарегистрированные ключи на консоли разработчика и поместить туда оба ключа: debug, а также release. Если оба они ищут имя пакета, убедитесь, что это то, что определено в файле манифеста. Затем подождите несколько минут, пока сервер не настроит ваши ключи. Надеюсь, поможет. Удачи