【转】Detected problems with API 弹窗
2019-05-15 本文已影响0人
Solang
image
调查测试发现是android9.0系统上产生的,综合网上各位前被采坑的资料分享。先把亲测可用的解决方案分享给大家,希望遇到此类问题的小伙伴可以快速解决
原因分析
Android P 也就是android9.0 谷歌限制开发者调用非官方公开API 方法或接口(使用@hide注解的系统源码),当开发者用反射直接调用源码时就会出现上述提示框。谷歌旨在提示开发者尽量少使用反射只用调用系统api,以免造成不必要的麻烦。但是项目中,有些功能实现要用到怎么办?即使咱们不用,依赖的第三方类库,用到怎么办?这就坑了。所以,负负得正,哈哈,咱们在使用反射怼回去,屏蔽提示。
//在app初始化时调用即可
public class MyApplication extends Application {
public JoyApplication() {
}
@Override
public void onCreate() {
super.onCreate();
disableAPIDialog();
}
/**
* 反射 禁止弹窗
*/
private void disableAPIDialog(){
if (Build.VERSION.SDK_INT < 28)return;
try {
Class clazz = Class.forName("android.app.ActivityThread");
Method currentActivityThread = clazz.getDeclaredMethod("currentActivityThread");
currentActivityThread.setAccessible(true);
Object activityThread = currentActivityThread.invoke(null);
Field mHiddenApiWarningShown = clazz.getDeclaredField("mHiddenApiWarningShown");
mHiddenApiWarningShown.setAccessible(true);
mHiddenApiWarningShown.setBoolean(activityThread, true);
} catch (Exception e) {
e.printStackTrace();
}
}
}