Android P新特性

編輯...
導(dǎo)讀:

  • 移動開發(fā)知識體系總章(Java基礎(chǔ)、Android、Flutter)
  • 非SDK接口限制
  • 默認(rèn)情況下啟用網(wǎng)絡(luò)傳輸層安全協(xié)議
  • androd P Apache HTTP 客戶端棄用影響采用非標(biāo)準(zhǔn) ClassLoader 的應(yīng)用(即 androd P Apache HTTP API 不可用)
  • 全面禁止了非安全的http連接
  • socket連接也必須要使用安全連接
  • 對WebView的數(shù)據(jù)進(jìn)行了進(jìn)程隔離
    很有必要講一下Android的network security config.
    Android network security config可以讓我們通過配置文件來增加對于網(wǎng)絡(luò)安全的配置。
    它可以允許我們配置:
    我們的app信任哪些CA證書
    允許我們的app可以訪問或者不能訪問哪些非安全連接

全面禁止了非安全的http連接

Android P 全面禁止了非安全的http連接,如果要使用非加密連接,需要配置network security config.步驟如下:
1.1 在res/xml下建立我們自己的network security config文件,名字任意,可以叫做network_security_config.xml
1.2 如果我們相對某些網(wǎng)址使用非安全連接,可以使用如下配置

<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
      <!--允許以下網(wǎng)址使用非安全的連接-->
        <domain includeSubdomains="true">insecure.example.com</domain>
        <domain includeSubdomains="true">insecure.cdn.example.com</domain>
    </domain-config>
</network-security-config>

1.2 如果我們想要允許所有的非安全連接,可以使用如下配置

<network-security-config>
    <domain-config cleartextTrafficPermitted="false">
      <!--不允許以下網(wǎng)址使用非安全連接-->
        <domain includeSubdomains="true">example.com</domain>
        <domain includeSubdomains="true">cdn.example2.com</domain>
    </domain-config>
 <!--默認(rèn)允許所有網(wǎng)址使用非安全連接-->
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

1.3 然后在AndroidManifest的<application>標(biāo)簽中增加如下屬性

android:networkSecurityConfig="@xml/network_security_config"

Android network security config可以讓我們通過配置文件來增加對于網(wǎng)絡(luò)安全的配置。它可以允許我們配置:
我們的app信任哪些CA證書
允許我們的app可以訪問或者不能訪問哪些非安全連接

socket連接也必須要使用安全連接

socket連接也必須要使用安全連接,必須要使用SSLSocketFactory,而不能使用SocketFactory.
請注意,SSLScoket本身并不校驗(yàn)hostname的安全性,我們必須使用getDefaultHostnameVerifier的verify方法對hostname進(jìn)行校驗(yàn)。

注意,Android只是說我們必須在Socket中也是用安全連接,我們要使用Verifier進(jìn)行校驗(yàn)。但是并沒有強(qiáng)制我們這樣做,也就是說在使用socket的時候,不進(jìn)行校驗(yàn),使用非安全連接也是可以的,但是不推薦。

對WebView的數(shù)據(jù)進(jìn)行了進(jìn)程隔離

在Android P上,對WebView的數(shù)據(jù)進(jìn)行了進(jìn)程隔離,同一個應(yīng)用程序的不同進(jìn)程無法訪問其他進(jìn)程中WebView的數(shù)據(jù),包括Cookie等。
谷歌推薦的做法是只在一個進(jìn)程中使用WebView,所以我們應(yīng)該把所有使用到WebView的Activity都放置在同一個進(jìn)程中。我們可以在不需要使用WebView的進(jìn)程中調(diào)用WebView的靜態(tài)方法disableWebView來強(qiáng)制要求該進(jìn)程不能使用WebView.

如果一定要在不同的進(jìn)程中使用WebView,那么我們必須調(diào)用WebView.setDataDirectorySuffix來為該進(jìn)程中的WebView設(shè)置數(shù)據(jù)目錄。不同的進(jìn)程是沒有辦法訪問其他進(jìn)程中的WebView數(shù)據(jù)的,包括Cookie.我們可以使用setCookie和getCookie來在不同的進(jìn)程之間復(fù)制WebView的Cookie.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容