此文為轉(zhuǎn)載原文鏈接
最新更新的App,在小米8se上碎节,突然出現(xiàn)了彈窗蟹瘾,導(dǎo)致體驗(yàn)奇怪
解決方法如下:
自從手機(jī)系統(tǒng)升級(jí)到Android 9.0以后,打開APP開始出現(xiàn)以上提示腹尖,出現(xiàn)這種情況的原因是:
Android P 后谷歌限制了開發(fā)者調(diào)用非官方公開API 方法或接口柳恐,也就是說,你用反射直接調(diào)用源碼就會(huì)有這樣的提示彈窗出現(xiàn),非 SDK 接口指的是 Android 系統(tǒng)內(nèi)部使用乐设、并未提供在 SDK 中的接口讼庇,開發(fā)者可能通過 Java 反射、JNI 等技術(shù)來調(diào)用這些接口近尚。但是巫俺,這么做是很危險(xiǎn)的:非 SDK 接口沒有任何公開文檔,必須查看源代碼才能理解其行為邏輯肿男。
但是源碼是JAVA寫的介汹,萬物皆可反射,所以還是可以用反射干掉這個(gè) 每次啟動(dòng)都會(huì)彈出的提醒窗口舶沛。
將以下方法在Application中調(diào)用嘹承,這個(gè)彈窗就不會(huì)出現(xiàn)了
private void closeAndroidPDialog(){
try {
Class aClass = Class.forName("android.content.pm.PackageParser$Package");
Constructor declaredConstructor = aClass.getDeclaredConstructor(String.class);
declaredConstructor.setAccessible(true);
} catch (Exception e) {
e.printStackTrace();
}
try {
Class cls = Class.forName("android.app.ActivityThread");
Method declaredMethod = cls.getDeclaredMethod("currentActivityThread");
declaredMethod.setAccessible(true);
Object activityThread = declaredMethod.invoke(null);
Field mHiddenApiWarningShown = cls.getDeclaredField("mHiddenApiWarningShown");
mHiddenApiWarningShown.setAccessible(true);
mHiddenApiWarningShown.setBoolean(activityThread, true);
} catch (Exception e) {
e.printStackTrace();
}
}