Android 9.0 (API 28) 適配

Android 9.0 (API 28) 適配

針對所有API級別的應(yīng)用

電源管理

幫助確保系統(tǒng)資源被提供給最需要它們的應(yīng)用退疫,詳情參閱電源管理

隱私權(quán)

  1. 后臺對傳感器的訪問受限

    App后臺運行時,以下行為受限

    • 訪問麥克風(fēng)和攝像頭

    • 使用連續(xù)報告模式的傳感器(加速度計鸽素、陀螺儀等)不會接收事件

    • 使用變化或一次性報告模式的傳感器不會接收事件

  2. 限制訪問通話記錄

    引入CALL_LOG權(quán)限組蹄咖,把READ_CALL_LOGWRIT_CALL_LOG付鹿、PROCESS_OUTGOING_CALLS移入該組(以前在PHONE權(quán)限組)。

  3. 限制訪問電話號碼

    要從手機狀態(tài)中讀取電話號碼蚜迅,需要:

    • 要通過PHONE_STATE Intent讀取舵匾,需要READ_CALL_LOGREAD_PHONE_STATE權(quán)限
    • 要通過 onCallStateChanged() 讀取,只需要READ_CALL_LOG權(quán)限
  4. 限制訪問WiFi位置和連接信息

    • WiFi掃描限制更嚴格谁不,詳情參閱Wi-Fi 掃描限制
    • getConnectionInfo() 函數(shù)返回的 WifiInfo 對象受限坐梯,只有當(dāng)App具有以下權(quán)限時,才能獲得SSIDBSSID
      • ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION
      • ACCESS_WIFI_STATE
      • 還需要在設(shè)備上啟用位置服務(wù)(Settings > Location
  5. WiFi服務(wù)函數(shù)移除多余信息

在 Android 9 中刹帕,下列事件和廣播不接收用戶位置或個人可識別數(shù)據(jù)方面的信息:

Wi-Fi 的 NETWORK_STATE_CHANGED_ACTION系統(tǒng)廣播不再包含 SSID(之前為 EXTRA_SSID)蹋辅、BSSID(之前為 EXTRA_BSSID)或連接信息(之前為 EXTRA_NETWORK_INFO)。 如果應(yīng)用需要此信息挫掏,請改為調(diào)用getConnectionInfo()侦另。

  1. 電話信息依賴設(shè)備定位設(shè)置

    如果停用設(shè)備定位,則以下函數(shù)不提供結(jié)果:

non-sdk api的限制

為幫助確保應(yīng)用穩(wěn)定性和兼容性尉共,此平臺對某些非 SDK 函數(shù)和字段的使用進行了限制褒傅;無論您是直接訪問這些函數(shù)和字段,還是通過反射或 JNI 訪問袄友,這些限制均適用殿托。 在 Android 9 中,您的應(yīng)用可以繼續(xù)訪問這些受限的接口剧蚣;該平臺通過 toast 和日志條目提醒您注意這些接口支竹。 如果您的應(yīng)用顯示這樣的 toast,則必須尋求受限接口之外的其他實現(xiàn)策略券敌。 詳情參閱對非 SDK 接口的限制

列表 說明
黑名單 無論您應(yīng)用的目標 API 級別是什么唾戚,您都無法使用此列表中的非 SDK 接口。如果您的應(yīng)用嘗試訪問其中任何一個接口待诅,系統(tǒng)就會拋出錯誤叹坦。
灰名單 只要在您應(yīng)用的目標 API 級別不限制此列表中的非 SDK 接口,您就可以使用它們卑雁。
從 Android 9(API 級別 28)開始募书,我們在每個 API 級別分別會限制某些非 SDK 接口绪囱。如果您應(yīng)用的目標 API 級別較低,您可以訪問灰名單中的受限 API莹捡,但如果您的應(yīng)用嘗試訪問在您的目標 API 級別受限的非 SDK 接口鬼吵,系統(tǒng)就會假定此 API 已列入黑名單
注意:在 Android 9(API 級別 28)中篮赢,非受限灰名單中的非 SDK 接口稱為淺灰名單齿椅,而受限灰名單中的非 SDK 接口稱為深灰名單。
白名單 此列表中的接口已在 Android 框架軟件包索引中正式記錄启泣,它們是受支持的接口涣脚,您可以自由使用。
  1. 使用veridex工具測試

    veridex 工具會掃描 APK 的整個代碼庫(包括所有第三方庫)寥茫,并報告發(fā)現(xiàn)的所有使用非 SDK 接口的行為遣蚀。但是也有局限性:

    • 無法檢測到通過 JNI 實現(xiàn)的調(diào)用。
    • 只能檢測到一部分通過反射實現(xiàn)的調(diào)用纱耻。
    • 對非活動代碼路徑的分析僅限于 API 級別的檢查芭梯。
  2. 運行StrictMode API測試

    使用 detectNonSdkApiUsage 方法來啟用此 API。啟用 StrictMode API 后弄喘,您可以使用 [penaltyListener](https://developer.android.com/reference/android/os/StrictMode.VmPolicy.BuilderpenaltyListener(java.util.concurrent.Executor, android.os.StrictMode.OnVmViolationListener)?hl=zh-cn) 來接收每次使用非 SDK 接口的行為所對應(yīng)的回調(diào)玖喘,并且您可以在其中實現(xiàn)自定義處理∠薮危回調(diào)中提供的 Violation 對象派生自 Throwable芒涡,并且封閉式堆棧軌跡會提供相應(yīng)使用行為的上下文。

  3. 使用可調(diào)試的應(yīng)用測試

    通過在搭載 Android 9(API 級別 28)或更高版本的設(shè)備或模擬器上構(gòu)建和運行可調(diào)試應(yīng)用來測試該應(yīng)用是否使用非 SDK 接口卖漫。請確保您使用的設(shè)備或模擬器與您應(yīng)用的目標 API 級別相匹配费尽。

    在您的應(yīng)用上運行測試時,如果該應(yīng)用訪問了某些非 SDK 接口羊始,系統(tǒng)就會輸出一條日志消息旱幼。您可以檢查應(yīng)用的日志消息,查找以下詳細信息:

    • 聲明的類突委、名稱和類型(采用 Android 運行時所使用的格式)柏卤。
    • 訪問方式:鏈接、反射或 JNI
    • 所訪問的非 SDK 接口屬于哪個列表匀油。

    您可以使用 adb logcat 來查看這些日志消息缘缚,這些消息顯示在所運行應(yīng)用的 PID 下。舉例而言敌蚜,日志中可能包含如下條目:

    Accessing hidden field Landroid/os/Message;->flags:I (light greylist, JNI)
    

安全行為變更

設(shè)備安全性變更
傳輸層安全協(xié)議(TLS)實現(xiàn)變更
    ######      更嚴格的SECCOMP過濾器
加密變更
參數(shù)和算法的 Conscrypt 實現(xiàn)
其他變更
不再支持Android安全加密文件

詳情參閱安全行為變更

ICU更新

? 升級ICU庫到60桥滨。受影響內(nèi)容:

  • 更好的區(qū)分GMT和UTC
  • java.text.SimpleDateFormat的使用
  • java.text.DateFormatSymbols.getZoneStrings()的使用
  • 亞洲/河內(nèi)不再是可識別的時區(qū)
  • 使用NumberFormat.parseCurrency代替android.icu.text.NumberFormat.getInstance(ULocale, PLURALCURRENCYSTYLE).parse(String)去解析幣種文本

詳情參閱ICU更新

Android Test變更

詳情參閱Android Test變更

Java UTF解碼器

UTF-8 是 Android 中的默認字符集。 UTF-8 字節(jié)序列可由 String(byte[] bytes) 之類的 String 構(gòu)造函數(shù)解碼。

Android 9 中的 UTF-8 解碼器遵循比以前版本中更嚴格的 Unicode 標準: 這些變更包括:

  • 非最短形式的 UTF-8(例如 <C0, AF>)被視為格式不正確齐媒。
  • 替代形式的 UTF-8(例如 U+D800..U+DFFF)被視為格式不正確蒲每。
  • 最大的子部分被單個 U+FFFD 取代。 例如喻括,在字節(jié)序列“41 C0 AF 41 F4 80 80 41”中邀杏,最大子部分為“C0”、“AF”和“F4 80 80”唬血。其中“F4 80 80”可以是“F4 80 80 80”的初始子序列望蜡,但“C0”不能是任何形式正確的代碼單位序列的初始子序列。 因此拷恨,輸出應(yīng)為“A\ufffd\ufffdA\ufffdA”泣特。
  • 要在 Android 9 或更高版本中解碼修改后的 UTF-8/CESU-8 序列,請使用 DataInputStream.readUTF() 函數(shù)或 NewStringUTF() JNI 函數(shù)挑随。

使用證書的主機名校驗

RFC 2818中介紹了兩種對照證書匹配域名的方法—使用 subjectAltName (SAN) 擴展程序中的可用名稱,或者在沒有 SAN 擴展程序的情況下勒叠,回退到 commonName (CN)兜挨。

然而,在 RFC 2818 中眯分,回退到 CN 已被棄用拌汇。因此,Android 不再回退到使用 CN弊决。 要驗證主機名噪舀,服務(wù)器必須出示具有匹配 SAN 的證書。 不包含與主機名匹配的 SAN 的證書不再被信任飘诗。

網(wǎng)絡(luò)地址查詢可能導(dǎo)致網(wǎng)絡(luò)違規(guī)

不運行在UI Thread中做網(wǎng)絡(luò)請求与倡,任何時候!

套接字標記

報告的套接字中可用字節(jié)數(shù)

? 在調(diào)用 shutdownInput() 函數(shù)后昆稿,available() 函數(shù)會在調(diào)用時返回 0纺座。

更詳盡的VPN網(wǎng)絡(luò)功能報告

在 Android 8.1(API 級別 28)及更低版本中,NetworkCapabilities 類僅報告 VPN 的有限信息溉潭,例如 TRANSPORT_VPN净响,但會省略 NET_CAPABILITY_NOT_VPN。 信息有限導(dǎo)致難以確定使用 VPN 是否會導(dǎo)致對應(yīng)用的用戶收費喳瓣。 例如馋贤,檢查 NET_CAPABILITY_NOT_METERED 并不能確定底層網(wǎng)絡(luò)是否按流量計費。

從 Android 9 及更高版本開始畏陕,當(dāng) VPN 調(diào)用 setUnderlyingNetworks() 函數(shù)時配乓,Android 系統(tǒng)將會合并任何底層網(wǎng)絡(luò)的傳輸和能力并返回 VPN 網(wǎng)絡(luò)的有效網(wǎng)絡(luò)能力作為結(jié)果。

在 Android 9 及更高版本中,已經(jīng)檢查NET_CAPABILITY_NOT_METERED 的應(yīng)用將收到關(guān)于 VPN 網(wǎng)絡(luò)能力和底層網(wǎng)絡(luò)的信息扰付。

應(yīng)用不再能訪問xt_qtaguid文件夾中的文件

從 Android 9 開始堤撵,不再允許應(yīng)用直接讀取 /proc/net/xt_qtaguid 文件夾中的文件。 這樣做是為了確保與某些根本不提供這些文件的設(shè)備保持一致羽莺。

依賴這些文件的公開 API TrafficStatsNetworkStatsManager 繼續(xù)按照預(yù)期方式運行实昨。 然而,不受支持的 cutils函數(shù)(例如 qtaguid_tagSocket())在不同設(shè)備上可能不會按照預(yù)期方式運行 — 甚至根本不運行盐固。

現(xiàn)在強制執(zhí)行 FLAG_ACTIVITY_NEW_TASK 要求

? 在 Android 9 中荒给,您不能從非 Activity 環(huán)境中啟動 Activity,除非您傳遞 Intent 標志 FLAG_ACTIVITY_NEW_TASK刁卜。 如果您嘗試在不傳遞此標志的情況下啟動 Activity志电,則該 Activity 不會啟動,系統(tǒng)會在日志中輸出一則消息蛔趴。

屏幕旋轉(zhuǎn)變更

從 Android 9 開始挑辆,對縱向旋轉(zhuǎn)模式做出了重大變更。 在 Android 8.0(API 級別 26)中孝情,用戶可以使用 Quicksettings 圖塊或 Display 設(shè)置在自動屏幕旋轉(zhuǎn)縱向旋轉(zhuǎn)模式之間切換鱼蝉。 縱向模式已重命名為旋轉(zhuǎn)鎖定,它會在自動屏幕旋轉(zhuǎn)關(guān)閉時啟用箫荡。 自動屏幕旋轉(zhuǎn)模式?jīng)]有任何變更魁亦。

當(dāng)設(shè)備處于旋轉(zhuǎn)鎖定模式時,用戶可將其屏幕鎖定到頂層可見 Activity 所支持的任何旋轉(zhuǎn)羔挡。 Activity 不應(yīng)假定它將始終以縱向呈現(xiàn)洁奈。 如果頂層 Activity 可在自動屏幕旋轉(zhuǎn)模式下以多種旋轉(zhuǎn)呈現(xiàn),則應(yīng)在旋轉(zhuǎn)鎖定模式下提供相同的選項绞灼,根據(jù) Activity 的 screenOrientation 設(shè)置利术,允許存在一些例外情況(見下表)。

請求特定屏幕方向(例如低矮,screenOrientation=landscape)的 Activity 會忽略用戶鎖定首選項氯哮,并且行為與 Android 8.0 中的行為相同。

可在 Android Manifest 中商佛,或以編程方式通過 setRequestedOrientation() 在 Activity 級別設(shè)置屏幕方向首選項喉钢。

旋轉(zhuǎn)鎖定模式通過設(shè)置 WindowManager 在處理 Activity 旋轉(zhuǎn)時使用的用戶旋轉(zhuǎn)首選項來發(fā)揮作用。 用戶旋轉(zhuǎn)首選項可能在下列情況下發(fā)生變更良姆。 請注意肠虽,恢復(fù)設(shè)備的自然旋轉(zhuǎn)存在偏差,對于外形與手機類似的設(shè)備通常設(shè)置為縱向:

  • 當(dāng)用戶接受旋轉(zhuǎn)建議時玛追,旋轉(zhuǎn)首選項變?yōu)榻ㄗh方向税课。
  • 當(dāng)用戶切換到強制縱向應(yīng)用(包括鎖定屏幕或啟動器)時闲延,旋轉(zhuǎn)首選項變?yōu)榭v向。

下表總結(jié)了常見屏幕方向的旋轉(zhuǎn)行為:

屏幕方向 行為
未指定韩玩、user 在自動屏幕旋轉(zhuǎn)和旋轉(zhuǎn)鎖定下垒玲,Activity 可以縱向或橫向(以及顛倒縱向或橫向)呈現(xiàn)。 預(yù)期同時支持縱向和橫向布局找颓。
userLandscape 在自動屏幕旋轉(zhuǎn)和旋轉(zhuǎn)鎖定下合愈,Activity 可以橫向或顛倒橫向呈現(xiàn)。 預(yù)期只支持橫向布局击狮。
userPortrait 在自動屏幕旋轉(zhuǎn)和旋轉(zhuǎn)鎖定下佛析,Activity 可以縱向或顛倒縱向呈現(xiàn)。 預(yù)期只支持縱向布局彪蓬。
fullUser 在自動屏幕旋轉(zhuǎn)和旋轉(zhuǎn)鎖定下寸莫,Activity 可以縱向或橫向(以及顛倒縱向或橫向)呈現(xiàn)。 預(yù)期同時支持縱向和橫向布局档冬。 旋轉(zhuǎn)鎖定用戶將可選擇鎖定到顛倒縱向膘茎,通常為 180o。
sensor酷誓、fullSensor辽狈、sensorPortrait、sensorLandscape 忽略旋轉(zhuǎn)鎖定模式首選項呛牲,視為自動屏幕旋轉(zhuǎn)已啟用。 請僅在例外情況下并經(jīng)過仔細的用戶體驗考量后再使用此項驮配。

Apache HTTP 客戶端棄用影響采用非標準 ClassLoader 的應(yīng)用

在 Android 6.0 中娘扩,我們?nèi)∠藢?Apache HTTP 客戶端的支持

此變更對大多數(shù)不以 Android 9 或更高版本為目標的應(yīng)用沒有任何影響壮锻。 不過琐旁,此變更會影響使用非標準 ClassLoader結(jié)構(gòu)的某些應(yīng)用,即使這些應(yīng)用不以 Android 9 或更高版本為目標平臺猜绣。

如果應(yīng)用使用顯式委托到系統(tǒng) ClassLoader 的非標準 ClassLoader灰殴,則應(yīng)用會受到影響。 在 org.apache.http.*中查找類時掰邢,這些應(yīng)用需要委托給應(yīng)用 ClassLoader牺陶。 如果它們委托給系統(tǒng) ClassLoader,則應(yīng)用在 Android 9 或更高版本上將失敗并顯示 NoClassDefFoundError辣之,因為系統(tǒng) ClassLoader 不再識別這些類掰伸。 為防止將來出現(xiàn)類似問題,一般情況下怀估,應(yīng)用應(yīng)通過應(yīng)用 ClassLoader 加載類狮鸭,而不是直接訪問系統(tǒng) ClassLoader合搅。

枚舉相機

? 在 Android 9 設(shè)備上運行的應(yīng)用可以通過調(diào)用 getCameraIdList() 發(fā)現(xiàn)每個可用的攝像頭。 應(yīng)用不應(yīng)假定設(shè)備只有一個后置攝像頭或只有一個前置攝像頭歧蕉。

針對 Target >= 9.0 的應(yīng)用

前臺服務(wù)

? 針對 Android 9 或更高版本并使用前臺服務(wù)的應(yīng)用必須請求 FOREGROUND_SERVICE 權(quán)限灾部。 這是普通權(quán)限,因此惯退,系統(tǒng)會自動為請求權(quán)限的應(yīng)用授予此權(quán)限赌髓。未請求權(quán)限就創(chuàng)建服務(wù)會引起SecurityException

隱私權(quán)變更

構(gòu)建序列號棄用

? 在 Android 9 中,Build.SERIAL 始終設(shè)置為 "UNKNOWN" 以保護用戶的隱私蒸痹。如果您的應(yīng)用需要訪問設(shè)備的硬件序列號叠荠,您應(yīng)改為請求 READ_PHONE_STATE 權(quán)限者娱,然后調(diào)用 getSerial()

DNS 隱私

? 以 Android 9 為目標平臺的應(yīng)用應(yīng)采用私有 DNS API。 具體而言,當(dāng)系統(tǒng)解析程序正在執(zhí)行 DNS-over-TLS 時,應(yīng)用應(yīng)確保任何內(nèi)置 DNS 客戶端均使用加密的 DNS 查找與系統(tǒng)相同的主機名,或停用它而改用系統(tǒng)解析程序。

框架安全性變更

默認情況下啟用網(wǎng)絡(luò)傳輸層安全協(xié)議 (TLS)

? 如果您的應(yīng)用以 Android 9 或更高版本為目標平臺,則默認情況下 isCleartextTrafficPermitted() 函數(shù)返回 false。 如果您的應(yīng)用需要為特定域名啟用明文德崭,您必須在應(yīng)用的網(wǎng)絡(luò)安全性配置中針對這些域名將 cleartextTrafficPermitted 顯式設(shè)置為 true

按進程分設(shè)基于網(wǎng)絡(luò)的數(shù)據(jù)目錄

為改善 Android 9 中的應(yīng)用穩(wěn)定性和數(shù)據(jù)完整性憾股,應(yīng)用無法再讓多個進程共用同一 WebView 數(shù)據(jù)目錄斩熊。 此類數(shù)據(jù)目錄一般存儲 Cookie、HTTP 緩存以及其他與網(wǎng)絡(luò)瀏覽有關(guān)的持久性和臨時性存儲淳衙。

在大多數(shù)情況下靴跛,您的應(yīng)用只應(yīng)在一個進程中使用 android.webkit 軟件包中的類绝葡,例如 WebViewCookieManager绞蹦。 例如锉走,您應(yīng)該將所有使用 WebViewActivity 對象移入同一進程。 您可以通過在應(yīng)用的其他進程中調(diào)用 disableWebView()词顾,更嚴格地執(zhí)行“僅限一個進程”規(guī)則。 該調(diào)用可防止 WebView 在這些其他進程中被錯誤地初始化碱妆,即使是從依賴內(nèi)容庫進行的調(diào)用也能防止肉盹。

如果您的應(yīng)用必須在多個進程中使用 WebView 的實例更舞,則必須先利用 WebView.setDataDirectorySuffix() 函數(shù)為每個進程指定唯一的數(shù)據(jù)目錄后綴烂完,然后再在該進程中使用 WebView 的給定實例扶叉。 該函數(shù)會將每個進程的網(wǎng)絡(luò)數(shù)據(jù)放入其在應(yīng)用數(shù)據(jù)目錄內(nèi)自己的目錄中舶治。

注:即使您使用 setDataDirectorySuffix()印颤,系統(tǒng)也不會跨應(yīng)用的進程界限共享 Cookie 以及其他網(wǎng)絡(luò)數(shù)據(jù)姑宽。 如果應(yīng)用中的多個進程需要訪問同一網(wǎng)絡(luò)數(shù)據(jù)缴挖,您需要自行在這些進程之間復(fù)制數(shù)據(jù)务热。 例如繁成,您可以調(diào)用 getCookie() 和 [setCookie()](https://developer.android.com/reference/android/webkit/CookieManager.html?hl=zh-cn#setCookie(java.lang.String, java.lang.String, android.webkit.ValueCallback))吓笙,在不同進程之間手動傳輸 Cookie 數(shù)據(jù)。

以應(yīng)用為單位的 SELinux 域名

以 Android 9 或更高版本為目標平臺的應(yīng)用無法利用可全球訪問的 Unix 權(quán)限與其他應(yīng)用共享數(shù)據(jù)巾腕。 此變更可改善 Android 應(yīng)用沙盒的完整性面睛, 具體地講絮蒿,就是要求應(yīng)用的私有數(shù)據(jù)只能由該應(yīng)用訪問。要與其他應(yīng)用共享文件侮穿,請使用 content provider歌径。

連接變更

連接數(shù)據(jù)計數(shù)和多路徑

在以 Android 9 或更高版本為目標平臺的應(yīng)用中,系統(tǒng)計算并非當(dāng)前默認網(wǎng)絡(luò)的網(wǎng)絡(luò)流量亲茅,例如回铛,當(dāng)設(shè)備連接 WLAN 時的蜂窩流量,并在 NetworkStatsManager 類中提供函數(shù)以查詢該流量克锣。

具體而言茵肃,getMultipathPreference() 現(xiàn)在將返回一個基于上述網(wǎng)絡(luò)流量的值。 從 Android 9 開始袭祟,此函數(shù)針對蜂窩數(shù)據(jù)返回 true验残,但當(dāng)超過一天內(nèi)累積的特定流量時,它將開始返回 false巾乳。 在 Android 9 上運行的應(yīng)用必須調(diào)用此函數(shù)并采用此提示您没。

ConnectivityManager.NetworkCallback 類現(xiàn)在將有關(guān) VPN 的信息發(fā)送到應(yīng)用。 此變更讓應(yīng)用偵聽連接事件變得更容易胆绊,而無需混用同步和異步調(diào)用氨鹏,也無需使用有限的 API。 此外压状,它還意味著將設(shè)備同時連接至多個 WLAN 網(wǎng)絡(luò)或多個蜂窩網(wǎng)絡(luò)時仆抵,信息傳輸可按預(yù)期工作。

Apache HTTP 客戶端棄用

在 Android 6.0 中种冬,我們?nèi)∠藢?Apache HTTP 客戶端的支持镣丑。 從 Android 9 開始,默認情況下該內(nèi)容庫已從 bootclasspath 中移除且不可用于應(yīng)用娱两。

要繼續(xù)使用 Apache HTTP 客戶端莺匠,以 Android 9 及更高版本為目標的應(yīng)用可以向其 AndroidManifest.xml 添加以下內(nèi)容:

<uses-library android:name="org.apache.http.legacy" android:required="false"/>

注:擁有最低 SDK 版本 23 或更低版本的應(yīng)用需要 android:required="false" 屬性,因為在 API 級別低于 24 的設(shè)備上十兢,org.apache.http.legacy 庫不可用趣竣。 (在這些設(shè)備上,Apache HTTP 類在 bootclasspath 中提供纪挎。)

作為使用運行時 Apache 庫的替代期贫,應(yīng)用可以在其 APK 中綁定自己的 org.apache.http 庫版本跟匆。 如果進行此操作异袄,您必須將該庫重新打包(使用一個類似 Jar Jar 的實用程序)以避免運行時中提供的類存在類兼容性問題。

界面變更

View Focus

? 0 面積的視圖(即寬度或高度為 0)再也不能被聚焦玛臂。Activity 不再隱式分配觸摸模式下的初始焦點烤蜕,需要的話要顯式請求初始焦點封孙。

CSS RGBA 十六進制值處理

以 Android 9 或更高版本為目標的應(yīng)用必須支持草案版 CSS 顏色模塊級別 4 的行為,用于處理 4 和 8 個十六進制數(shù)字 CSS 顏色讽营。

Chrome 自版本 52 以來便一直支持 CSS 顏色模塊級別 4虎忌,但 WebView 目前停用此功能,因為現(xiàn)有 Android 應(yīng)用被發(fā)現(xiàn)包含 Android ordering (ARGB) 中的 32 位十六進制顏色橱鹏,這會導(dǎo)致渲染錯誤膜蠢。

例如,對于以 API 級別 27 或更低版本為目標平臺的應(yīng)用莉兰,顏色 #80ff8080 目前在 WebView 中被渲染為不透明淺紅色 (#ff8080)挑围。 先導(dǎo)部分(Android 會將其解讀為 Alpha 部分)目前被忽略。 如果某個應(yīng)用以 API 級別 28 或更高版本為目標糖荒,則 #80ff8080 將被解讀為 50% 透明淺綠 (#80ff80)杉辙。

文檔滾動標簽

Android 9 可正確處理文檔的根標簽是滾動標簽的案例。 在之前的版本中捶朵,滾動位置在 body 標簽上設(shè)置蜘矢,根標簽的滾動值為零。 Android 9 支持符合標準的行為综看,在這種行為中品腹,滾動標簽根標簽。

此外寓搬,直接訪問 document.body.scrollTop珍昨、document.body.scrollLeftdocument.documentElement.scrollTopdocument.documentElement.scrollLeft 會因目標 SDK 的不同而具有不同的行為句喷。 要訪問視口滾動值镣典,請使用 document.scrollingElement(若有)。

來自已暫停應(yīng)用的通知

? 在 Android 9 之前唾琼,暫停的應(yīng)用發(fā)出的通知會被取消兄春。 從 Android 9 開始,暫停的應(yīng)用發(fā)出的通知將被隱藏锡溯,直至應(yīng)用繼續(xù)運行赶舆。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市祭饭,隨后出現(xiàn)的幾起案子芜茵,更是在濱河造成了極大的恐慌,老刑警劉巖倡蝙,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件九串,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機猪钮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門品山,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人烤低,你說我怎么就攤上這事肘交。” “怎么了扑馁?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵涯呻,是天一觀的道長。 經(jīng)常有香客問我腻要,道長魄懂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任闯第,我火速辦了婚禮市栗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘咳短。我一直安慰自己填帽,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布咙好。 她就那樣靜靜地躺著篡腌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪勾效。 梳的紋絲不亂的頭發(fā)上嘹悼,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音层宫,去河邊找鬼杨伙。 笑死,一個胖子當(dāng)著我的面吹牛萌腿,可吹牛的內(nèi)容都是我干的限匣。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼毁菱,長吁一口氣:“原來是場噩夢啊……” “哼米死!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起贮庞,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤峦筒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后窗慎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體物喷,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了脯丝。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡伏伐,死狀恐怖宠进,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情藐翎,我是刑警寧澤材蹬,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站吝镣,受9級特大地震影響堤器,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜末贾,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一闸溃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拱撵,春花似錦辉川、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至集索,卻和暖如春屿愚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背务荆。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工妆距, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人函匕。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓毅厚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親浦箱。 傳聞我的和親對象是個殘疾皇子吸耿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

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