在Android P开发过程中,如果apk代码中有调用到系统非公开源码(即用反射的方式调用),在apk启动时系统就会弹出对话框提示 Detected problems with API compatibility(visit g.co/dev/appcompat for more info)
。遇到这个问题,只需要通过反射的方式在Application中重新把检查关闭即可。
/**
* Android 9开始限制开发者调用非官方API方法和接口(即用反射直接调用源码)
* 弹框提示 Detected problems with API compatibility(visit g.co/dev/appcompat for more info)
*
* 隐藏警告弹框
*/
private void closeDetectedProblemApiDialog() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) return;
try {
@SuppressLint("PrivateApi") Class clsPkgParser = Class.forName("android.content.pm.PackageParser$Package");
Constructor constructor = clsPkgParser.getDeclaredConstructor(String.class);
constructor.setAccessible(true);
@SuppressLint("PrivateApi") Class clsActivityThread = Class.forName("android.app.ActivityThread");
Method method = clsActivityThread.getDeclaredMethod("currentActivityThread");
method.setAccessible(true);
Object activityThread = method.invoke(null);
Field hiddenApiWarning = clsActivityThread.getDeclaredField("mHiddenApiWarningShown");
hiddenApiWarning.setAccessible(true);
hiddenApiWarning.setBoolean(activityThread, true);
} catch (Exception e) {
e.printStackTrace();
}
}