Приложение Android Kotlin из магазина игр вылетает: введите kotlin.Pair not present. java.lang.TypeNotPresentException

avatar
sudoExclaimationExclaimation
9 августа 2021 в 04:15
250
1
1

Я только что выпустил новое приложение в Play Store. Приложение отлично работало на моем телефоне до отправки, но когда я загружаю приложение из магазина игр, оно зависает при запуске. Я попытался удалить приложение с телефона и переустановить его, но оно продолжает падать при запуске.

Когда мой телефон подключен к Android Studio, я вижу это в журнале, когда происходит сбой.

java.lang.RuntimeException: Unable to create application com.bundleid.EXAMPLE.MyApplication: java.lang.TypeNotPresentException: Type kotlin.Pair not present

Почему kotlin.Pair недоступен в версии приложения Play Store?? Я не отправлял никаких приложений в магазин игр примерно с 2018 года, поэтому я немного заржавел, но я помню, что раньше у меня был подобный опыт, и я думаю, что это как-то связано с Proguard, но я не уверен. Как я могу это исправить и как я могу заранее проверить, как приложение будет себя вести при загрузке из Playstore?

Полный:

--------- beginning of crash
2021-08-09 00:09:03.067 13733-13733/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.bundleid.EXAMPLE, PID: 13733
    java.lang.RuntimeException: Unable to create application com.bundleid.EXAMPLE.MyApplication: java.lang.TypeNotPresentException: Type kotlin.Pair not present
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6759)
        at android.app.ActivityThread.access$1400(ActivityThread.java:244)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1952)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7700)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:997)
     Caused by: java.lang.TypeNotPresentException: Type kotlin.Pair not present
        at libcore.reflect.ParameterizedTypeImpl.getRawType(ParameterizedTypeImpl.java:69)
        at libcore.reflect.ParameterizedTypeImpl.getOwnerType(ParameterizedTypeImpl.java:54)
        at p4.a.a(Unknown Source:35)
        at p4.a$a.<init>(Unknown Source:3)
        at p4.a.a(Unknown Source:63)
        at t4.a.<init>(:1)
        at v4.t3.<init>(Unknown Source:0)
        at com.bundleid.EXAMPLE.MyApplication.onCreate(:23)
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1192)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6754)
        at android.app.ActivityThread.access$1400(ActivityThread.java:244) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1952) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.app.ActivityThread.main(ActivityThread.java:7700) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:997) 
     Caused by: java.lang.ClassNotFoundException: kotlin.Pair
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:454)
        at libcore.reflect.ParameterizedTypeImpl.getRawType(ParameterizedTypeImpl.java:67)
        at libcore.reflect.ParameterizedTypeImpl.getOwnerType(ParameterizedTypeImpl.java:54) 
        at p4.a.a(Unknown Source:35) 
        at p4.a$a.<init>(Unknown Source:3) 
        at p4.a.a(Unknown Source:63) 
        at t4.a.<init>(:1) 
        at v4.t3.<init>(Unknown Source:0) 
        at com.bundleid.EXAMPLE.MyApplication.onCreate(:23) 
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1192) 
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6754) 
        at android.app.ActivityThread.access$1400(ActivityThread.java:244) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1952) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.app.ActivityThread.main(ActivityThread.java:7700) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:997) 
     Caused by: java.lang.ClassNotFoundException: kotlin.Pair
        at java.lang.Class.classForName(Native Method) 
        at java.lang.Class.forName(Class.java:454) 
        at libcore.reflect.ParameterizedTypeImpl.getRawType(ParameterizedTypeImpl.java:67) 
        at libcore.reflect.ParameterizedTypeImpl.getOwnerType(ParameterizedTypeImpl.java:54) 
        at p4.a.a(Unknown Source:35) 
        at p4.a$a.<init>(Unknown Source:3) 
        at p4.a.a(Unknown Source:63) 
        at t4.a.<init>(:1) 
        at v4.t3.<init>(Unknown Source:0) 
        at com.bundleid.EXAMPLE.MyApplication.onCreate(:23) 
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1192) 
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6754) 
        at android.app.ActivityThread.access$1400(ActivityThread.java:244) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1952) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.app.ActivityThread.main(ActivityThread.java:7700) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:997) 

gradle.properties:

org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
android.useAndroidX=true
android.enableJetifier=true
kotlin.code.style=official

build.gradle (проект):

buildscript {
    ext.kotlin_version = "1.5.20"
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.0.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.google.gms:google-services:4.3.8'
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
        maven { url "https://jitpack.io" }
        jcenter() // Warning: this repository is going to shut down soon
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

build.gradle (модуль):

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'com.google.gms.google-services'
}

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "com.bundleid.EXAMPLE"
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 5
        versionName "5.0"
    }

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            ndk {
                debugSymbolLevel 'FULL'
            }
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

dependencies {
    implementation 'nl.dionsegijn:konfetti:1.3.2'
    implementation 'com.android.billingclient:billing:4.0.0'
    implementation 'org.apache.commons:commons-text:1.9'
    implementation 'com.squareup.picasso:picasso:2.71828'
    implementation 'org.adblockplus:adblock-android-webview:4.4.0'
    implementation 'org.jsoup:jsoup:1.13.1'
    implementation("com.android.volley:volley:1.2.0")
    implementation 'com.google.code.gson:gson:2.8.6'
    implementation 'androidx.preference:preference-ktx:1.1.1'
    implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
    implementation 'com.github.blipinsk:ViewPropertyObjectAnimator:1.5.0'
    implementation 'me.saket:better-link-movement-method:2.2.0'
    implementation "androidx.recyclerview:recyclerview:1.2.1"
    implementation 'androidx.asynclayoutinflater:asynclayoutinflater:1.0.0'
    implementation 'com.google.firebase:firebase-messaging:22.0.0'
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.6.0'
    implementation 'androidx.appcompat:appcompat:1.3.1'
    implementation 'com.google.android.material:material:1.4.0'
}

Мой файл proguard-rules.pro пуст.

РЕДАКТИРОВАТЬ:

Я смог, по крайней мере, воспроизвести ту же проблему, используя выпускную сборку приложения, используя:

brew install bundletool
cd /location/to/your/release/folder
bundletool build-apks --bundle=app-release.aab --output=./app.apks
ls
bundletool install-apks --apks=app.apks --adb=~/Library/Android/sdk/platform-tools/adb

Теперь мне просто нужно выяснить, как исправить сбой.

РЕДАКТИРОВАТЬ 2:

Если я установлю для minifyEnabled значение false в build.gradle, то сбой не произойдет. Так что это определенно имеет отношение к Proguard. Как я могу это исправить?

РЕДАКТИРОВАТЬ 3:

Я смог решить эту проблему, поместив это в файл proguard-rules.pro:

-keep class androidx.** { *; }
-keep interface androidx.** { *; }

-keep class kotlin.** { *; }
-keep interface kotlin.** { *; }

-keep class com.bundleid.EXAMPLE.** { *; }
-keep interface com.bundleid.EXAMPLE.** { *; }

Это работает. Но если кто-то считает, что эти правила могут быть неверными или слишком широкими, сообщите мне об этом.

Источник
Zahid Islam
9 августа 2021 в 04:53
0

Вы также можете отлаживать любую версию выпуска из IDE, выберите выпуск как «Активный вариант сборки» в меню Build | Select Build Variant Android Studio, затем добавьте "android:debuggable="true" в свой манифест внутри тега <application>. Запустите приложение из IDE и выполните отладку

dan1st
9 августа 2021 в 05:01
0

Вы можете изменить proguard-rules.pro.

sudoExclaimationExclaimation
9 августа 2021 в 05:03
0

@dan1st Я в курсе. Я хочу знать, что я должен добавить туда? Я не уверен, почему базовый тип Kotlin Pair недоступен.

Tenfour04
9 августа 2021 в 13:29
0

Похоже, что вы сохраняете все, поэтому в этот момент нет смысла использовать минимизацию. Хотя я не могу объяснить, почему класс, который вы используете, например Pair, был удален.

Ответы (1)

avatar
arlomedia
8 ноября 2021 в 20:31
0

Я только что столкнулся с этим после увеличения существующего приложения targetSdkVersion с 29 до 30. Добавление только этого к proguard-rules.pro, кажется, исправило это для меня:

-keep class kotlin.Pair