Приложение вылетает из Play Store при первом запуске - ClassNotFoundException dalvik.system.BaseDexClassLoader.findClass

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

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

Создайте приложение 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

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

[Crash Report After Exe Below Code][1]

Логкэт

[Logcat][2]

person Zeeshan Waheed    schedule 05.07.2019    source источник
comment
Пожалуйста, поделитесь своим классом приложения, он расширен от MultiDexApplication?   -  person Umer Kiani    schedule 05.07.2019


Ответы (2)


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

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>
person Kaushal Panchal    schedule 05.07.2019
comment
у вас нет класса App, есть только MainActivity, который уже расширяет какой-то другой класс :( - person Zeeshan Waheed; 05.07.2019
comment
Вы должны реализовать класс приложения. Я обновляю свой ответ, пожалуйста, проверьте его. - person Kaushal Panchal; 05.07.2019
comment
вы можете проверить мой пост еще раз загрузить мой основной класс - person Zeeshan Waheed; 05.07.2019
comment
Не нужно добавлять в класс MainActivity. Просто следуйте моему ответу на решение вашей проблемы. Скопируйте класс приложения и вставьте его в свое приложение. после этого зарегистрируйтесь в классе App.java в файле манифеста. - person Kaushal Panchal; 05.07.2019
comment
могу ли я создать свой собственный класс приложения App(name).java, потому что у меня нет класса приложения в моих файлах - person Zeeshan Waheed; 05.07.2019
comment
Да. Создайте свой собственный класс приложения и вставьте метод attachBaseContext. - person Kaushal Panchal; 05.07.2019
comment
Каушал Панчал очень простой вопрос, но не могли бы вы мне помочь. Даже я создаю App Activity, он расширяет AppCompatActivity, это их любой способ объявить класс, который не расширяет AppCompatActivity, потому что, если я создам простой java-файл, тогда я не смогу объявить в файле manifest.xml каким-либо образом, чтобы решить эту проблему заранее спасибо - person Zeeshan Waheed; 05.07.2019
comment
Создайте простой класс Java, затем удалите весь код и вставьте мой класс приложения. - person Kaushal Panchal; 05.07.2019
comment
В каком пакете вы создаете класс Java? - person Kaushal Panchal; 05.07.2019
comment
com.Myname.app, где представлены все мои классы - person Zeeshan Waheed; 05.07.2019
comment
Как вы упомянули в своем втором комментарии, сделайте простой класс java, затем удалите весь код и вставьте мой класс приложения Simple java, можем ли мы объявить в нашем файле manifest.xml, я думаю, это не разрешено - person Zeeshan Waheed; 05.07.2019
comment
o Спасибо, я просто создаю класс приложения после реализации вашего метода, упомянутого выше, дайте вам знать - person Zeeshan Waheed; 05.07.2019
comment
Kaushal Panchal по-прежнему падает приложение, оно все еще падает при первом запуске, а затем работает нормально. - person Zeeshan Waheed; 05.07.2019

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

ОБНОВЛЕНИЕ

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

в вашем новом файле 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>
person Chirag Savsani    schedule 05.07.2019
comment
у вас нет класса App, есть только MainActivity, который уже расширяет какой-то другой класс :( - person Zeeshan Waheed; 05.07.2019
comment
Chirag Savsani все еще вылетает из приложения, он все еще вылетает при первом запуске, а затем работает нормально - person Zeeshan Waheed; 05.07.2019
comment
Затем опубликуйте свой новый CrashLog. - person Chirag Savsani; 05.07.2019