Android:我可以阻止Java类(来自外部库)在运行时实例化

Séb*_*ien 5 java android admob

上下文:

我使用AdMob中介在我的应用中显示横幅广告.我集成了Millennial广告网络SDK和Millennial AdMob适配器.

问题:我的应用支持Android API 9+,而Millennial SDK支持API 16+.更糟糕的是,SDK没有优雅地失败(没有向AdMob中介层返回任何广告,以便它可以继续沿着中介瀑布走下去),SDK在运行Android <16(Fatal Exception: java.lang.NoSuchMethodError android.webkit.WebSettings.setAllowUniversalAccessFromFileURLs)的设备上崩溃

显然千禧一代开发人员并不打算解决这个问题,他们建议发布2个不同的APK("<16"没有他们的SDK和"16+"他们的SDK),这是一个麻烦的解决方案.

我更喜欢更简单的解决方案:在运行Android API <16的设备上,我想重现AdMob适配器丢失时会发生的情况:AdMob中介只会转到下一个网络.这意味着在我实例化AdMod中介横幅之前卸载或删除 Millennial适配器类.

问题:

有没有办法在运行时阻止给定类(来自第三方库)的任何未来瞬间?(例如,通过强制ClassNotFound异常)

Bon*_*tti 0

有什么方法可以防止将来在运行时实例化给定类吗?(例如,通过强制 ClassNotFound 异常)

您可以在加载适配器之前检查操作系统版本,以及它是否低于您的阈值

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.THE_VERSION_I_WANT_MINIMUM) {
   // doStuffs()
} else {
   throw new MyException("Stuffs have stuffened...");
}
Run Code Online (Sandbox Code Playgroud)