了解 Android 8.0 中的自動填充

簡評:作者是著名的 The Busy Coders Guide to Android Development 一書的作者,在文中談了談自己對 Android 8.0 中的 autofill 特性的看法。

在四月時,作者指出目前的 Android 8.0 中的自動填充(autofill)特性忽視了 FLAG_SECURE 是不合理,也不安全的。

FLAG_SECURE 在 Android 1.0 開始就存在於 Android 之中了,用來聲明窗口內容是安全的,常用於阻止手機對當前頁面截屏。在 Android 6.0 中還能用於阻止 Assist API 獲取應用信息。

因此,作者認為自動填充也屬於應用窗口內容安全的範疇之中,卻又無法由 FLAG_SECURE 控制是不夠合理的(感興趣的還可以看看作者的這篇文章),甚至還給 Google 提了個 issue。

不過,在之後公布的 Android O Developer Preview 3 中 Google 給我們提供了另外的方式來控制自動填充功能:

  • 在 layout 文件中給控制項設置 android:importantForAutofill="no" 或在代碼中調用 View 的 setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO) 方法
  • 在 activity 的 onCreate() 方法中加入下面的代碼:

getWindow() .getDecorView() .setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS);

這種情況下,activity 包含的所有子視圖的自動填充功能都不會生效。對於某些安全性要求較高的頁面,我們可以用上面的兩個方式來禁止自動填充功能。

當然,這樣可能仍然不夠(比如在 ODP2 中就不起作用),我們還可以用 AutofillManager 來查看是否啟用了自動填充,如果啟用了,再採取一些迴避措施:

if (getSystemService(android.view.autofill.AutofillManager.class).isEnabled()) { Toast.makeText(this, "Ick!", Toast.LENGTH_LONG).show(); finish();}

原文:Securing Apps From Android 8.0 Autofill

日報擴展閱讀:

Room ?? RxJava - 知乎專欄

歡迎關註:知乎專欄「極光日報」,每天為 Makers 導讀三篇優質英文文章。


推薦閱讀:

使用 Annotation 改善 Android 代碼
重載Finalize引發的內存泄露
Google 新推出的 Allo 聊天應用,可能要佔領全宇宙了
從0開始學習 GitHub 系列之「Git 速成」
能夠買到的話,你選擇魅藍metal,樂1s,榮耀5x這其中的哪個,或者同價位你會選擇哪個??

TAG:Android | Android开发 |