代码混淆导致第三方Vungle广告不显示

1,069 阅读1分钟

问题背景

我们的游戏通过接入Mopub集成了许多第三方的广告,但在安卓设备上,Vungle这家广告商的广告总是显示不出来。 通过连接Android Studio调式发现,LogCat中显示在申请广告的过程中,执行Vungle的库时有代码报错:

 W/System.err: java.util.concurrent.ExecutionException: java.lang.AssertionError: java.lang.NoSuchFieldException: VUNGLE_FULLSCREEN

解决方案

最后查看了Vungle官方的Android接入文档,发现需要如果App启用了混淆,需要屏蔽一些Vungle的库。 我们的安卓刚好使用了Proguard插件来混淆代码,按照文档把以下代码放到proguard-unity.txt中问题就解决了。

# Vungle
-keep class com.vungle.warren.** { *; }
-keep class com.vungle.warren.downloader.DownloadRequest
-dontwarn com.vungle.warren.error.VungleError$ErrorCode
-dontwarn com.vungle.warren.downloader.DownloadRequest$Status
-keepclassmembers enum com.vungle.warren.** { *; }
# Moat SDK
-keep class com.moat.** { *; }
-dontwarn com.moat.**
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-keepattributes *Annotation*
# Retrofit
-keepattributes Signature, InnerClasses
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn javax.annotation.**
-dontwarn kotlin.Unit
-dontwarn retrofit2.-KotlinExtensions
-keepclassmembers,allowshrinking,allowobfuscation interface * {
    @retrofit2.http.*;
}
 Okio+OkHttp
-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn javax.annotation.**
-dontwarn org.conscrypt.**
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
-keepclassmembers class * extends com.vungle.warren.persistence.Memorable {
   public (byte[]);
}

总结反思

  1. 通过Mopub集成接入第三方广告商时,不要只看Mopub的文档来接入,出了问题去第三方SDK的官网看看他们的手动接入文档,找找思路。
  2. 安卓第三方库报错,类找不到,变量找不到时,首先排除一下混淆的影响。