Приложение вылетает из Play Store при первом запуске - ClassNotFoundException dalvik.system.BaseDexClassLoader.findClass - PullRequest
0 голосов
/ 05 июля 2019

Приложение работает нормально на Android Studio, но при загрузке из Play Store происходит сбой в первый раз, а затем начинает работать нормально.

Я пытался решить ее, но безуспешно (изменил minSDK на 21, включил Multidex).

Приложение Build Gradle:

apply plugin: 'com.android.application'
android {
    compileSdkVersion 29
    buildToolsVersion "29.0.0"
    defaultConfig {
        applicationId "com.--------.app"
        minSdkVersion 21                      //Change my min Sdk
        targetSdkVersion 29
        multiDexEnabled true                // Enable mutlidex
        versionCode 10
        versionName "1.4.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

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

dependencies {

    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0-rc01'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2'
    implementation 'com.google.android.gms:play-services-ads:18.0.0'
    implementation 'com.google.android.material:material:1.1.0-alpha07'
    implementation 'com.android.support:multidex:1.0.3'      //Multi-dex lib

    testImplementation 'junit:junit:4.13-beta-3'
    androidTestImplementation 'androidx.test:runner:1.3.0-alpha01'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0-alpha01'


}
Caused by: java.lang.ClassNotFoundException: 
  at dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:56)
  at java.lang.ClassLoader.loadClass (ClassLoader.java:380)
  at java.lang.ClassLoader.loadClass (ClassLoader.java:312)
  at android.app.ActivityThread.handleReceiver (ActivityThread.java:3285)

Класс приложения:


public class MainActivity extends AppCompatActivity implements View.OnClickListener  {                       //Application Class Here

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);                   //OverRide Multidex
        MultiDex.install(this);
    }

    private Button rate,ad,contact;                //i don't have Application    
                                                  //Using custom Class is this 
                                                  // right way
    @Override
    protected void onCreate(Bundle savedInstanceState)
             //My Code

Отчет о сбое после Exe ниже кода:

[Crash Report After Exe Below Code][1]

Logcat

[Logcat][2]

Ответы [ 2 ]

1 голос
/ 05 июля 2019

В некоторых случаях это может быть проблемой MultiDex. Попробуйте это в своем классе приложения. То есть в App.java , который расширяется Приложение :

public class App extends Application {

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

Зарегистрируйте App.java файл в manifest.xml в теге application . Проверьте ниже код.

<application
        android:name=".App"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:theme="@style/AppTheme"
        android:usesCleartextTraffic="true">
</application>
0 голосов
/ 05 июля 2019

В вашем приложении класс

ОБНОВЛЕНИЕ

Создание нового файла Java с любым именем Например, AppClass.java

inВаш новый файл AppClass.java расширяет MultiDexApplication.

Таким образом, ваш класс будет выглядеть следующим образом.

public class AppClass extends MultiDexApplication {

}

Теперь переопределите attachBaseContext метод.

Итак, наконец, ваш полный классбудет выглядеть следующим образом.

public class AppClass extends MultiDexApplication {

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

Теперь вам нужно объявить свой AppClass в AndroidManifest.xml в теге приложения.

<application
     ----------
     ----------
     ----------
        android:name=".AppClass"
     ----------
     ---------->

</application>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...