子贤的独立博客 子贤的独立博客
  • 首页
  • 编程
  • 视频
    • 哔哩哔哩
    • 斗鱼TV
    • VLOG
  • 社交媒体
    • 新浪微博
  • 专题
首页 › 编程 › Android 9.0+ http无法访问网络

Android 9.0+ http无法访问网络

James
6年前编程阅读 3,248

前言

最近上线的App,开始有个别用户反映每次启动App时会弹出一个英文弹窗,听到这有点奇怪的问题,我立马怀疑是不是跟安卓派(android pie 安卓P 即 android 9.0系统代号)的新特性有关系?

Android 9.0+ http无法访问网络-子贤的独立博客

找到原因

果不其然,查阅大量文档文章后大概了解了这个情况发生的原因:

自从手机系统升级到Android 9.0以后,打开APP开始出现以上提示,出现这种情况的原因是:
Android P 后Google限制了开发者调用非官方公开API 方法或接口,也就是说,你用反射直接调用源码就会有这样的提示弹窗出现,非 SDK 接口指的是 Android 系统内部使用、并未提供在 SDK 中的接口,开发者可能通过 Java 反射、JNI 等技术来调用这些接口。但是,这么做是很危险的:非 SDK 接口没有任何公开文档,必须查看源代码才能理解其行为逻辑。

我开发的Hybrid App是使用Apche Cordova构建底层的框架,我猜或许这类框架在底层构建上存在反射调用源码的地方,也或许是因为我调用了个别插件导致的,那没办法咯,只能想想如何消灭这个弹框的弹出了。

Android 9.0+ http无法访问网络-子贤的独立博客

解决方案

查阅了部分安卓大佬的文章后,终于找到一篇有讲到针对Cordova出现该情况的解决方案(简直美滋滋):

Android 9.0+ http无法访问网络-子贤的独立博客

1、找到Cordova Android工程下的驱动源文件:

Android 9.0+ http无法访问网络-子贤的独立博客

2、导入所需代码

Android 9.0+ http无法访问网络-子贤的独立博客
import java.lang.reflect.Method;
import java.lang.reflect.Field;

3、添加禁止弹窗方法并调用

Android 9.0+ http无法访问网络-子贤的独立博客
public void onCreate(Bundle savedInstanceState){
    ... //忽略代码块
    disableAPIDialog();
}

private void disableAPIDialog(){
    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();
    }
}

ok,至此重新构建安装包就可以解决这个问题啦!非常感谢这位大佬给予的解决方法!~

参考文章:

https://blog.csdn.net/qq_41590018/article/details/87699136 @好名字打不过备注

总结

其实前端程序猿使用现有前端知识技能开发跨端应用肯定是不足的,我们还需要补充学习很多关于双端的原生知识,何况甚至还有恶心的兼容问题,必须写出双端兼容的健壮性代码!加油学习吧!

Android Cordova
赞赏 赞(1)
Android P Detected problems with API 弹窗bug
上一篇
vue-router使用go(-1)返回时发生的诡异现象
下一篇
再想想
暂无评论

Recent Posts

  • React Native 多语言国际化
  • React Native 设置文件路径别名
  • 不要笑大挑战 | 两个憨憨 | 达达倾情出演
  • 黄埔古港 | “哥哥影你啊” | 随剪短片
  • 参观省博物馆 | 展品片段随剪

Recent Comments

  1. SuperMan发表在React Native 多语言国际化
React Native 多语言国际化
5年前
7,375 1 10
React Native 设置文件路径别名
5年前
3,244 0 1
解决charles模拟localhost请求无效问题
6年前
3,586 0 0
Cordova构建IOS应用适配iPhone X
6年前
2,597 0 0
1
  • 1
  • 0
Copyright © 2019-2025 子贤的独立博客. Designed by nicetheme.
粤ICP备19162060号
  • 首页
  • 编程
  • 视频
    • 哔哩哔哩
    • 斗鱼TV
    • VLOG
  • 社交媒体
    • 新浪微博
  • 专题
# Vlog # # Cordova # # ETH # # Css # # Android #
James
32
文章
0
评论
35
喜欢