Прерывистый java.lang.NoClassDefFoundError во время выполнения из AdMob - PullRequest
0 голосов
/ 28 ноября 2018

У некоторых моих пользователей происходит сбой с ошибкой. Телефоны с таким сбоем - это Google Pixels под управлением Android 9. Однако не все пиксели вылетают с этой конфигурацией.Два устройства, которые сообщили о сбое, были Google Pixel 2 (walleye) на Android 9 и Pixel XL (marlin) на Android 9. У нас есть пользователи с тем же устройством и версией Android, у которых нет ошибки, и мы не смогливоспроизведите ошибку в эмуляторе.

Вот трассировка стека:

java.lang.NoClassDefFoundError: 
  at jq.b (jq.java:3)
  at jp.a (jp.java:3)
  at jr.a (jr.java:19)
  at com.google.android.gms.ads.internal.util.ap.a (ap.java:15)
  at iv.a (iv.java:19)
  at iv.run (iv.java:8)
Caused by: java.lang.ClassNotFoundException: 
  at dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:134)
  at java.lang.ClassLoader.loadClass (ClassLoader.java:379)
  at ac.loadClass (ac.java:4)
  at java.lang.ClassLoader.loadClass (ClassLoader.java:312)
  at jq.b (jq.java:3)
  at jp.a (jp.java:3)
  at jr.a (jr.java:19)
  at com.google.android.gms.ads.internal.util.ap.a (ap.java:15)
  at iv.a (iv.java:19)
  at iv.run (iv.java:8)

Вот мой build.gradle для моей общей библиотеки:

apply plugin: 'com.android.library'

android {
    compileSdkVersion 28

    libraryVariants.all { variant ->
        variant.outputs.all {
            def version = variant.properties.get("versionName")
            def projectName = name
            def formattedDate = new Date().format('yyyy-MM-dd-HHmm')
            outputFileName = "${projectName}${version}-${formattedDate}.apk"
        }
    }

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 28
        versionCode 6
        versionName "3.0.1"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
        }
    }

    dependencies {
        implementation 'com.google.android.gms:play-services-ads:15.0.1'
    }
}

Здесьмой build.gradle для моего приложения:

apply plugin: 'com.android.application'


android {

    compileSdkVersion 28
    defaultConfig {
        applicationId "com.myapp"
        minSdkVersion 14
        targetSdkVersion 28
        versionCode 9
        versionName "2.6.2"
        testApplicationId "com.myapp"
        testInstrumentationRunner "android.test.InstrumentationTestRunner"
        signingConfig signingConfigs.appkey
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
            zipAlignEnabled true
            android.applicationVariants.all { variant ->
                variant.outputs.all { output ->
                    def relativeRootDir = output.packageApplication.outputDirectory.toPath()
                            .relativize(rootDir.toPath()).toFile()
                    def finalVersionCode = versionCode
                    output.versionCodeOverride = finalVersionCode
                    outputFileName = new File(
                            "$relativeRootDir/release",
                            outputFileName.replace(".apk", "-${finalVersionCode}.apk"))
                }
            }
            debuggable true
            jniDebuggable true
        }
        debug {
        }
    }
    compileOptions {
        targetCompatibility JavaVersion.VERSION_1_8
    }
    buildToolsVersion '28.0.3'
    productFlavors {
    }
}

dependencies {
    implementation project(':common')
    implementation 'com.google.android.gms:play-services-ads:15.0.1'
}

1 Ответ

0 голосов
/ 21 января 2019

Как указано в в этом ответе , кажется, что есть временный обходной путь, пока мы ждем официального исправления от Google.Это также влияет на библиотеку карт.

Просто поместите этот тег в файл манифеста:

<uses-library
      android:name="org.apache.http.legacy"
      android:required="false" />

Я пробовал, и, похоже, он работает.

...