【问题标题】:ClassNotFoundException when upgrading to AndroidX with AdMob使用 AdMob 升级到 AndroidX 时出现 ClassNotFoundException
【发布时间】:2019-06-29 21:01:59
【问题描述】:

最近,我升级到了AndroidX,并按照说明在build.gradle中添加了multidex。这是我的 build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.hello"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 83
        versionName "83"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation "androidx.multidex:multidex:2.0.0"
    implementation "com.google.android.material:material:1.0.0-rc01"
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.google.android.gms:play-services-ads:18.0.0'
}

gradle.properties

org.gradle.jvmargs=-Xmx1536m
android.useAndroidX=true
android.enableJetifier=true

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.hello">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:name="androidx.multidex.MultiDexApplication"
        tools:ignore="GoogleAppIndexingWarning">

        <uses-library
            android:name="org.apache.http.legacy"
            android:required="false" />

        <activity
            android:name=".MainActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="adjustPan">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="@string/ad_app_id" />
    </application>

</manifest>

当我部分推出新版本时。许多崩溃的发生都没有像这样的根本原因(deobfurstrated),multidex 说这是 multidex 支持库的限制。 https://developer.android.com/studio/build/multidex

java.lang.RuntimeException: 
  at android.app.ActivityThread.handleReceiver (ActivityThread.java:3575)
  at android.app.ActivityThread.access$1300 (ActivityThread.java:237)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1803)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:214)
  at android.app.ActivityThread.main (ActivityThread.java:7073)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:493)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:965)
Caused by: java.lang.ClassNotFoundException: 
  at dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:134)
  at java.lang.ClassLoader.loadClass (ClassLoader.java:379)
  at java.lang.ClassLoader.loadClass (ClassLoader.java:312)
  at android.app.AppComponentFactory.instantiateReceiver (AppComponentFactory.java:84)
  at androidx.core.app.CoreComponentFactory.instantiateReceiver (CoreComponentFactory.java)
  at android.app.ActivityThread.handleReceiver (ActivityThread.java:3568)
  at android.app.ActivityThread.access$1300 (ActivityThread.java:237)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1803)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:214)
  at android.app.ActivityThread.main (ActivityThread.java:7073)
  at java.lang.reflect.Method.invoke (Method.java)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:493)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:965)

【问题讨论】:

  • 出现此错误的设备是什么?它在Android 9.0上吗?我曾经收到过类似的错误,如果您告诉我,我可能会为您提供帮助。
  • 您好,有 2 个崩溃组,从 Android 4.4 到 6,另一个从 7+,主要在 Heawei 和 Samsung 设备上。
  • 嗨,你解决了这个问题吗?我有同样的问题:\ @ymonaraS
  • @Moti 不,我将它恢复到旧版本并等待任何更新。

标签: android admob classnotfoundexception androidx android-multidex


【解决方案1】:

要正确使用 multidex,您必须包含三个主要内容

1.defaultconfig multidex 已启用(您已完美包含)

2.像这样实现依赖

dependencies { implementation 'androidx.multidex:multidex:2.0.1'}

3。在创建时在活动文件中包含 dex 支持

public void onCreate(Bundle arguments)
{
MultiDex.install(getTargetContext());
super.onCreate(arguments);
}  

【讨论】:

  • 感谢您的回答。我会尝试并保持更新。
  • 您好,raj,不幸的是,同样的问题在新推出时仍然出现。我可能不得不回到android支持。感谢您的帮助。
猜你喜欢
  • 2014-04-26
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-26
  • 2013-04-25
  • 2014-09-14
相关资源
最近更新 更多