首次运行时,应用在Play商店中崩溃-ClassNotFoundException dalvik.system.BaseDexClassLoader.findClass

时间:2019-07-05 05:56:13

标签: java android android-studio google-play-services google-console-developer

App在Android Studio上运行正常,但是从Play商店下载的应用第一次崩溃时,然后开始正常运行。

我试图解决它,但是没有成功(将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

[Logcat][2]

2 个答案:

答案 0 :(得分:1)

在某些情况下,这可能是MultiDex问题。在您的应用程序类中尝试一下。在 App.java 中,该扩展了 Application

public class App extends Application {

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

application 标签的 manifest.xml 中注册 App.java 文件。检查以下代码。

<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>

答案 1 :(得分:0)

在您的App课中

更新

使用任何名称创建新的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);
    }
}

现在,您必须在应用程序标记的 AndroidManifest.xml 文件中声明您的AppClass。

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

</application>