背景
最近公司项目里需要接入穿山甲聚合SDK来实现变现,按照接入文档接入后,启动 APP 发生崩溃问题找不到 Provider,以前笔者在使用其他聚合 SDK 时候也遇到过,折腾了不少时间,特意记录下
问题堆栈
java.lang.RuntimeException: Unable to get provider com.baidu.mobads.sdk.api.BdFileProvider: java.lang.ClassNotFoundException: Didn't find class "com.baidu.mobads.sdk.api.BdFileProvider" on path: DexPathList[[zip file "/data/app/~~8hntTYexlfTtRFaffd72wQ==/com.gxbc.android-xzw-f1IXfJ8nQA8EBy4nhQ==/base.apk"],nativeLibraryDirectories=[/data/app/~~8hntTYexlfTtRFaffd72wQ==/com.gxbc.android-xzw-f1IXfJ8nQA8EBy4nhQ==/lib/arm64, /data/app/~~8hntTYexlfTtRFaffd72wQ==/com.gxbc.android-xzw-f1IXfJ8nQA8EBy4nhQ==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]
at android.app.ActivityThread.installProvider(ActivityThread.java:7776)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:7288)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7028)
at android.app.ActivityThread.access$1800(ActivityThread.java:254)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2184)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:233)
at android.os.Looper.loop(Looper.java:344)
at android.app.ActivityThread.main(ActivityThread.java:8212)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034)
原因分析
聚合SDK 需要把聚合的三方广告AAR打进包里,笔者项目里需要聚合百度、广点通和快手广告,但是却没有把下面的aar 也依赖上! 导致启动后找不到 这些广告SDK 的类。
笔者原来的的依赖:(期望聚合百度、广点通和快手,却没有添加相应的AAR 包依赖)
//穿山甲聚合SDK
implementation "com.pangle.cn:mediation-sdk:5.7.0.5" //融合SDK
implementation "com.pangle.cn:mediation-ks-adapter:${adnKsVersion}${adnKsVersionFix}"
implementation "com.pangle.cn:mediation-baidu-adapter:${adnBaiduVersion}${adnBaiduVersionFix}"
implementation "com.pangle.cn:mediation-gdt-adapter:${adnGdtVersion}${adnGdtVersionFix}"
解决
1)在app libs 下添加相应的aar包,然后在app.gradle 里 增加 flatDir
android {
......
repositories {
flatDir {
dirs 'libs'
}
}
......
}
2) dependencies修改如下:
def adnGdtVersion = "4.542.1412"
def adnGdtVersionFix = ".1"
def adnKsVersion = "3.3.53"
def adnKsVersionFix = ".1"
def adnBaiduVersion = "9.3223"
def adnBaiduVersionFix = ".1"
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
......
//穿山甲聚合SDK
implementation "com.pangle.cn:mediation-sdk:5.7.0.5" //融合SDK
implementation "com.pangle.cn:mediation-ks-adapter:${adnKsVersion}${adnKsVersionFix}"
implementation(name: "kssdk-ad-${adnKsVersion}", ext: 'aar')
implementation "com.pangle.cn:mediation-baidu-adapter:${adnBaiduVersion}${adnBaiduVersionFix}"
implementation(name: "Baidu_MobAds_SDK_v${adnBaiduVersion}", ext: 'aar')
implementation "com.pangle.cn:mediation-gdt-adapter:${adnGdtVersion}${adnGdtVersionFix}"
implementation(name: "GDTSDK.unionNormal.${adnGdtVersion}", ext: 'aar')
implementation "com.google.code.gson:gson:2.8.5"
}
3)记得app 工程libs文件夹下加上需要聚合的广告AAR