Используя Maps api v2, он отлично работает с 4.4, 5.0, 5.1, 5.1.1, 6, но приложение вылетает, когда я пытаюсь выполнить 4.2.2. Я провел много исследований, но, похоже, ничего не работает. Вот полный журнал.

FATAL EXCEPTION: main
     java.lang.NoClassDefFoundError: com.google.android.gms.common.
         at com.google.android.gms.measurement.internal.zzk$zza.get(
         at com.google.android.gms.measurement.internal.zzc.zzkG(
         at com.google.android.gms.measurement.internal.zzr.<init>(
         at com.google.android.gms.measurement.internal.zzx.zzb(
         at com.google.android.gms.measurement.internal.zzt.<init>(
         at com.google.android.gms.measurement.internal.zzx.zzBQ(
         at com.google.android.gms.measurement.internal.zzt.zzaU(
         at com.google.android.gms.measurement.ource)
         at android.content.ContentProvider.attachInfo(ContentProvider
         at android.app.ActivityThread.installProvider(ActivityThread.
         at android.app.ActivityThread.installContentProviders(
         at android.app.ActivityThread.handleBindApplication(
         at android.app.ActivityThread.access$1300(ActivityThread.
         at android.app.ActivityThread$H.handleMessage(ActivityThread.
         at android.os.Handler.dispatchMessage(Handler.java:99)
         at android.os.Looper.loop(Looper.java:137)
         at android.app.ActivityThread.main(ActivityThread.java:5041)
         at java.lang.reflect.Method.invokeNative(Native Method)
         at java.lang.reflect.Method.invoke(Method.java:511)
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.
         at dalvik.system.NativeStart.main(Native Method)

Любые идеи?

Вот мой build.gradle

buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'

repositories {
    mavenCentral()
    maven {
        url "http://dl.bintray.com/glomadrian/maven"
    }
    maven { url 'https://maven.fabric.io/public' }
}

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "py.com.roshka.billeterabancard"
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.wang.avi:library:1.0.1'
    compile 'com.nineoldandroids:library:2.4.0'
    compile 'com.github.glomadrian:loadingballs:1.1@aar'
    compile 'com.android.support:appcompat-v7:23.1.0'
    compile 'com.google.android.gms:play-services:8.4.0'
    compile 'com.android.support:design:23.1.0'
    compile 'com.android.support:recyclerview-v7:23.1.0'
    compile 'com.squareup.okio:okio:1.0.+'
    compile 'com.squareup.okhttp:okhttp:1.5.4'
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0'
    compile 'com.squareup.retrofit:retrofit:1.8.0'
    compile 'com.pnikosis:materialish-progress:1.7'
    compile 'com.google.code.gson:gson:2.3'
    compile 'me.dm7.barcodescanner:zxing:1.8.3'
    compile 'me.dm7.barcodescanner:zbar:1.8.3'
    compile('com.crashlytics.sdk.android:crashlytics:2.5.5@aar') {
        transitive = true;
    }
}
5
Passerin 4 Янв 2016 в 17:00

2 ответа

Лучший ответ

После некоторых исследований и часов тестирования я наконец понял, что в Android есть что-то, что называется лимитом методов DEX 64K. Проще говоря, есть предел, которого вы можете достичь при добавлении внешних библиотек в свой проект. Когда вы достигнете этого предела, вам может потребоваться использовать multidex. Лично я решил уменьшить количество импортируемых библиотек, поскольку некоторые из них действительно не использовались или не были необходимы. Для дальнейшего понимания multidex вы должны прочитать это,

http://developer.android.com/tools/building/multidex.html

4
Passerin 12 Янв 2016 в 23:52

3 простых шага:

Шаг №1: Мультидексирование - это новая функция, поэтому для совместимости с устройствами pre-lollipop требуется библиотека поддержки. Вам нужно добавить следующее в зависимости вашего файла gradle:

compile 'com.android.support:multidex:1.0.0'

Шаг № 2: Также включите вывод multidex в вашем файле gradle:

android {
compileSdkVersion 21
buildToolsVersion "21.1.0"

defaultConfig {
    ...
    minSdkVersion 14
    targetSdkVersion 21
    ...

    // Enabling multidex support.
    multiDexEnabled true
   }
}

Шаг № 3: А затем добавьте приложение поддержки multidex в свой манифест:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.multidex.myapplication">
<application
    ...
    android:name="android.support.multidex.MultiDexApplication">
    ...
</application>

Примечание. Если ваше приложение уже использует (расширяет) класс Application, вы можете переопределить метод attachBaseContext () и вызвать MultiDex.install (this), чтобы включить multidex. Для получения дополнительной информации см. Справочную документацию MultiDexApplication.

@Override
protected void attachBaseContext(Context context) {
    super.attachBaseContext(context);
    MultiDex.install(this);
}

Вот те же инструкции для справки: https://developer.android.com/tools/building /multidex.html

17
Shirish Herwade 24 Мар 2016 в 06:57