⑴ android 7.0 以上 Charles 和 Fiddler 无法抓取 HTTPS 包的解决方式
最近升级了 targetSdkVersion 到 28 后发现在 Android 7.0 以上机型 Charles 抓取 https 包时显示找不到证书,但是 Android 6.0 机型还是可以正常抓包。原因是因为从 Android 7.0 开始,默认的网络安全性配置修改了,具体请阅读官方文档 网络安全性配置 。
Android 6.0(API 23)及更低版本应用的默认网络安全性配置如下:
而在 Android 7.0(API 24)到 Android 8.1(API 27)的默认网络安全性配置如下:
而在 Android 9.0(API 28)及更高版本的默认网络安全性配置如下:
对比很容易发现,在 Android 7.0(API 24)到 Android 8.1(API 27),默认不再信任用户添加的 CA 证书,所以也就不再信任 Charles 和 Fiddler 抓包工具的证书,所以抓取 HTTPS 包时才会失败。而且在 Android 9.0(API 28)及更高版本上,不仅默认只系统预装的 CA 证书,还默认禁止所有明文通信(不允许 http 请求)。
所以解决该问题就需要应用信任 Charles 和 Fiddler 抓包工具的证书抓包工具即可。
最简单的解决方式是使用 Android 6.0 以下的网络安全性配置:
添加 res/xml/network_security_config.xml :
然后在清单文件中指向该文件:
这种解决方式有一个安全风险:正式版的应用会有被他人抓包的风险。
如何只在调试模式下允许抓包呢?
使用 <debug-overrides> 即可实现只在 android:debuggable 为 true 时才生效的配置:
网上有些解决方式是将 Charles 和 Fiddler 的证书添加到 raw 文件夹下的方式也可以,但是繁琐了点。
在 Android 9.0(API 28)以上允许部分 http 请求
最佳的解决方式肯定是全部使用 https 请求,安全性更高,如果有些请求或测试环境下还是需要使用 http 请求,需要在网络安全性配置添加白名单:
⑵ 【Android初级】如何正确获取WiFi列表
获取Android设备上的WiFi列表是一项常见的需求,但实现过程中需注意正确的步骤和方法。以下为简化版步骤,确保能获取到最新且准确的WiFi列表信息。
本地环境设定如下:
Android Studio版本:3.0.1;DEMO APK的Min SDK Version为API 23,Target SDK Version为API 24,Compile SDK Version为API 26;真机运行于Android 7.0系统。
获取WiFi列表的完整流程:
1. 开启WiFi并激活定位服务,确保设备能被正确识别和使用。
2. 在`onCreate`方法中动态申请`ACCESS_FINE_LOCATION`权限,以获取定位信息。
3. 同样在`onCreate`内注册广播接收器,以便在定位服务改变时接收通知。
4. 定义`mReceiver`类,并在布局文件中加入一个`Button`,以便触发WiFi扫描。
5. 在`AndroidManifest.xml`文件中声明`ACCESS_FINE_LOCATION`权限。
值得注意的是,申请权限的操作可能在`onCreate`中重复进行,这是因为Android系统可能在运行时才对应用权限进行检查,确保应用仅在实际需要时请求权限,而非仅在编译时声明。
实现过程中的常见误区:
一些开发者可能会在调用`startScan`方法后立刻调用`getScanResults`获取结果,但这会得到上一次扫描的WiFi列表,而非最新的信息。正确的做法是在接收器的`onReceive`方法中处理并获取扫描结果。
在实现过程中遇到任何问题或有不同见解,欢迎与我一起探讨,共享解决方案。
⑶ 如何查看android api
查看android api有两种方式:在线查看与离线查看。
1. 在线查看
在线查看一般是指在安卓开发者官网上直接查看,但这需要你的网络环境可以访问谷歌。
官方地址如下:
https://developer.android.com/reference/packages.html
目前最新的API是android 24,如下图,左边可以切换API的版本,右边可以切换显示包索引还是类索引。
依次打开Develop-->Reference,然后就可以看到API文档了。这个docs几乎包含了开发者官网的全部内容,所以除了查看API,还可以查看官方教程等资源。
另外,虽说这是离线文档,但里面包含了谷歌字体服务和几个连接谷歌的脚本,所以打开时可能会很慢。解决方案是用一个编辑器比如Notepad++,搜索各文件中包含的访问谷歌服务的网址字串,并将其替换为空串就可以了。
⑷ 如何查看Android SDK API文档
查看android api有两种方式:在线查看与离线查看。
1. 在线查看
在线查看一般是指在安卓开发者官网上直接查看,但这需要你的网络环境可以访问谷歌。
官方地址如下:
https://developer.android.com/reference/packages.html
目前最新的API是android 24,如下图,左边可以切换API的版本,右边可以切换显示包索引还是类索引。
依次打开Develop-->Reference,然后就可以看到API文档了。这个docs几乎包含了开发者官网的全部内容,所以除了查看API,还可以查看官方教程等资源。
另外,虽说这是离线文档,但里面包含了谷歌字体服务和几个连接谷歌的脚本,所以打开时可能会很慢。解决方案是用一个编辑器比如Notepad++,搜索各文件中包含的访问谷歌服务的网址字串,并将其替换为空串就可以了。