最近,測試提出來這么一個問題,說公司android7.0以上的手機沒辦法抓包,他們拿不到數(shù)據(jù)。很是尷尬。 難道是因為android7.0近兩年興起?還是因為以前的測試就根本沒抓包,,,
好了進入正題,通過一波的查閱資料過后發(fā)現(xiàn):android7.0+的版本新增了證書驗證,https的安全證書手機端和電腦端都必須安裝,這個是前提;又由于android手機多廠商系統(tǒng)定制的問題,可能有部分手機確實無法抓包,這里,對于抓包的問題上,我們在給測試打包的時候要對我們的項目進行添加設(shè)置: 默認新任所有證書。
這個操作其實是比較敏感的,線上不能帶上這個配置;下面來說一下相關(guān)配置項:
1、在res-xml目錄中創(chuàng)建一個名為 “network_security_config.xml”的文件夾:并且附上如下內(nèi)容:
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" overridePins="true" />
<certificates src="user" overridePins="true" />
</trust-anchors>
</base-config>
</network-security-config>
2、在AndroidManifest里的<application>標簽中,添加代碼:
android:networkSecurityConfig="@xml/network_security_config"
3、重新運行項目,然后使用Charles抓包,成功。(要是你抓包不成功,請百度一下,如何使用Charles抓包,并且進行相關(guān)配置)
關(guān)于android普通抓包的問題是解決了,發(fā)現(xiàn)一個新問題:android7.0以上的手機,開著網(wǎng)絡(luò)代理訪問不了詳情頁(webview)
我們需要在webview的WebViewClient中,將下面這行代碼給注釋掉
super.onReceivedSslError(view, handler, error);
這一段代碼是為了忽略掉SSL證書錯誤,因為開啟代理后網(wǎng)絡(luò)會變得不安全,證書會錯誤,webview檢測到證書錯誤之后就直接讓webview白板,不請求任何數(shù)據(jù)。 這一節(jié)是為了忽略掉父類的處理,然后默認走下去。
這個問題其實還是挺棘手的。寫個博客記錄一下。