【问题标题】:App crashes from Play Store on first run - ClassNotFoundException dalvik.system.BaseDexClassLoader.findClass应用程序在首次运行时从 Play 商店崩溃 - ClassNotFoundException dalvik.system.BaseDexClassLoader.findClass
【发布时间】:2019-07-05 05:56:13
【问题描述】:

应用在 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]

【问题讨论】:

  • 请分享您的应用程序类,它是从 MultiDexApplication 扩展而来的吗?

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


【解决方案1】:

在某些情况下,这可能是 MultiDex 问题。在你的应用程序类中试试这个。那是在 App.java 中,它扩展了 Application

public class App extends Application {

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

application标签的ma​​nifest.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>

【讨论】:

  • 没有 App 类只有 MainActivity 已经扩展了一些其他类:(
  • 你必须实现app类。我正在更新我的答案,请检查一下。
  • 你能再看看我的帖子上传我的主课吗
  • MainActivity 类中无需添加。只需按照我的回答来解决您的问题。复制 App 类并将其粘贴到您的应用中。在清单文件中的 App.java 类中注册之后。
  • 我可以创建自己的应用程序 App(name).java 类吗,因为我的文件中没有 App 类
【解决方案2】:

在您的应用类中

更新

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

【讨论】:

  • 没有 App 类只有 MainActivity 已经扩展了一些其他类:(
  • Chirag Savsani 仍然应用程序崩溃它仍然在第一次启动时崩溃然后工作正常
  • 然后发布您的新 CrashLog。
猜你喜欢
  • 2020-02-04
  • 1970-01-01
  • 1970-01-01
  • 2019-03-19
  • 2014-10-24
  • 2019-12-15
  • 1970-01-01
  • 2021-06-17
相关资源
最近更新 更多