java.lang.ClassNotFoundException:找不到类“ com.google.android.gms.ads.MobileAdsInitProvider”

时间:2019-01-14 15:54:21

标签: java android admob

我在Android 4.4及以下版本中遇到此问题。我已经集成了Google admob,当我运行该应用程序时,该应用程序崩溃,并显示ClassNotFoundException。

请在下面找到堆栈跟踪。

Process: app.learnkannada.com.learnkannadakannadakali, PID: 1320
java.lang.RuntimeException: Unable to get provider com.google.android.gms.ads.MobileAdsInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.ads.MobileAdsInitProvider" on path: DexPathList[[zip file "/data/app/app.learnkannada.com.learnkannadakannadakali-2.apk"],nativeLibraryDirectories=[/data/app-lib/app.learnkannada.com.learnkannadakannadakali-2, /system/lib]]
    at android.app.ActivityThread.installProvider(ActivityThread.java:4793)
    at android.app.ActivityThread.installContentProviders(ActivityThread.java:4385)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4325)
    at android.app.ActivityThread.access$1500(ActivityThread.java:135)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5017)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
    at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.ads.MobileAdsInitProvider" on path: DexPathList[[zip file "/data/app/app.learnkannada.com.learnkannadakannadakali-2.apk"],nativeLibraryDirectories=[/data/app-lib/app.learnkannada.com.learnkannadakannadakali-2, /system/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
    at android.app.ActivityThread.installProvider(ActivityThread.java:4778)
    at android.app.ActivityThread.installContentProviders(ActivityThread.java:4385) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4325) 
    at android.app.ActivityThread.access$1500(ActivityThread.java:135) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:136) 
    at android.app.ActivityThread.main(ActivityThread.java:5017) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
    at dalvik.system.NativeStart.main(Native Method) 

我尝试在Google上进行搜索,但找不到此问题。要求社区对此提供帮助。

注意:请注意,我已经在Android Manifest中添加了移动广告元数据。

5 个答案:

答案 0 :(得分:6)

您收到此错误,因为您使用过multiDex,但是缺少一些实现部分。请按照以下步骤解决错误。

1)在应用级gradle文件的defaultconfig中添加“ multiDexEnabled true”

android {
    defaultConfig {
        ...
        minSdkVersion 21
        targetSdkVersion 28
        multiDexEnabled true
    }
    ...
}

2)如果您的minSdkVersion小于21,则添加以下依赖项。

dependencies {
  implementation 'com.android.support:multidex:1.0.3'
}

3)使用MultiDexApplication类作为Application类。将MultiDexApplication用作Application类的三种方法

i)只需在AndroidManifest.xml文件中设置MultiDexApplication类

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">
    <application
            android:name="android.support.multidex.MultiDexApplication" >
        ...
    </application>
</manifest>

ii)如果您已经在使用自定义应用程序类,则在自定义应用程序类中扩展MultiDexApplication

public class MyApplication extends MultiDexApplication { ... }

iii)如果由于已经扩展了其他类而无法更改MultiDexApplication,并且无法更改它,则在自定义应用程序类中使用以下方法

public class MyApplication extends SomeOtherApplication {
  @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(base);
     MultiDex.install(this);
  }
}

注意:我遇到了同样的错误,只是通过扩展MultiDexApplication类来解决

答案 1 :(得分:2)

我刚刚完成了“构建”>“清理项目”,并且可以正常工作。

答案 2 :(得分:0)

  1. 首先在android defaultConfig中制作multiDexEnable

    android {
        defaultConfig {
           minSdkVersion 14
           targetSdkVersion 22
           multiDexEnabled true
        }
    }
    
  2. 如果您的minSdkVersion小于21,则添加此依赖项。

    implementation 'com.android.support:multidex:1.0.3'

答案 3 :(得分:0)

在Visual Studio中使用发布版本上的D8和R8遇到相同的问题。

答案 4 :(得分:0)

我也收到此错误消息。 就我而言,它与multidex无关,而是与javaversion的兼容性有关。

文件>>项目结构>>模块>>应用程序>>属性 将“源兼容性”和“目标兼容性”更改为1.8(当前)。

或者在build.gradle的“模块:应用”中(不在Project中)。

android { 
    ...
    compileOptions {
        sourceCompatibility = 1.8
        targetCompatibility = 1.8
    }
}

归功于lazybug: Failed to verify dex: Bad method handle type 7

相关问题