成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android 11 中的軟件包可見性

移動開發 Android
隨著我們不斷加強對隱私保護的關注,我們將在 Android 11 上引入一些新的變化,從而改變應用查詢用戶已安裝應用并與之交互的方式。為了達到這一目的,我們為特定設備上所安裝的應用列表帶來了更好的訪問控制。

在 Android 10 及之前的版本中,應用可以通過 queryIntentActivities() 這樣的方法獲取到設備中所有已安裝的應用列表。在大多數情況下,這種訪問權限遠超出了應用實際所需要的權限范圍。隨著我們不斷加強對隱私保護的關注,我們將在 Android 11 上引入一些新的變化,從而改變應用查詢用戶已安裝應用并與之交互的方式。為了達到這一目的,我們為特定設備上所安裝的應用列表帶來了更好的訪問控制。

[[339193]]

為了更好地 "問責" 訪問已安裝應用的行為,默認情況下,以 Android 11 為目標平臺 (目標 API level 為 30) 的應用默認將只能檢測到部分過濾后的已安裝應用。如果想獲取更多別的已安裝應用列表信息,則需要在應用內的 Android manifest 中添加 元素,從而拓寬訪問范圍。

在大部分常見場景下,包括任何以 startActivity() 啟動的 intents,您不需要做任何改動。而其他場景,比如從您應用的界面中直接打開某個特定的第三方應用,則需要開發者們顯式地聲明應用的包名或者 intent filter 簽名,如下所示:

  • ...
  • 大部分常見場景
  • https://developer.android.google.cn/preview/privacy/package-visibility#use-cases-not-affected
  • 其他場景
  • https://developer.android.google.cn/preview/privacy/package-visibility-use-cases
  • intent filter 簽名
  • https://developer.android.google.cn/preview/privacy/package-visibility#intent-signature

如果您使用 Custom Tab 來打開 URL 鏈接,您也許會調用 resolveActivity() 和 queryIntentActivities() 來啟動一個非瀏覽器應用 (前提是您安裝了處理該 URL 的應用)。在 Android 11 中,則有更好的辦法來對此進行處理: 使用 intent 的 FLAG_ACTIVITY_REQUIRE_NON_BROWSER 標記,而不是去查詢其他的應用。如果在您使用此標記調用 startActivity() 時啟動了瀏覽器,則會拋出一個 ActivityNotFoundException 異常,此時您的應用可以對此異常進行處理,轉而使用 Custom Tab 來打開 URL 鏈接。

  1. try { 
  2.   val intent = Intent(ACTION_VIEW, Uri.parse(url)).apply { 
  3.     // 非瀏覽器應用會直接處理該 URL(默認情況下) 
  4.     // 用戶也可以在消除歧義對話框中選擇非瀏覽器應用 
  5.  
  6.     addCategory(CATEGORY_BROWSABLE) 
  7.     flags = FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_REQUIRE_NON_BROWSER 
  8.   } 
  9.  
  10.   startActivity(intent) 
  11. } catch (e: ActivityNotFoundException) { 
  12.  // 只能使用瀏覽器應用,或者默認使用瀏覽器處理該 intent。 
  • Custom Tab
  • https://developers.google.cn/web/android/custom-tabs
  • 更好的辦法
  • https://developer.android.google.cn/preview/privacy/package-visibility-use-cases#avoid-a-disambiguation-dialog
  • FLAG_ACTIVITY_REQUIRE_NON_BROWSER
  • https://developer.android.google.cn/preview/privacy/package-visibility#web-intent-non-browser-app

在極少數情況下,您的應用可能需要查詢設備上所有已安裝的應用或與之進行交互,不管這些應用包含哪些組件。為了允許您的應用看到其他所有已安裝應用,Android 11 引入了 QUERY_ALL_PACKAGES 權限。在即將發布的政策更新中,Google Play 會為需要 QUERY_ALL_PACKAGES 權限的應用提供相關指南。 您可以將 API Level 設為 30,并使用 Android Studio 3.2 以上和最新發布的相應 Android Gradle 插件,即可在應用中添加 元素。您可以在開發者文檔 — Android 11 中的軟件包可見性中找到更多有關軟件包可用性的使用信息和用例。

  • QUERY_ALL_PACKAGEShttps://developer.android.google.cn/preview/privacy/package-visibility#all-apps
  • 開發者文檔 — Android 11 中的軟件包可見性https://developer.android.google.cn/preview/privacy/package-visibility

Android Studio 和 Gradle 對該功能的支持

如果您使用的 Android Gradle 插件版本是 4.1 和以上版本的話,就可以正常使用新的 元素,因為舊版本的 Gradle 插件并不兼容此元素。如果您使用了 ,或者是依賴了支持 Android 11 的庫或 SDK,則可能會引起 manifest 沖突從而出現合并 manifest 的錯誤。例如,在構建應用時,在 Build Output Window 中可能會看到以下錯誤:

  1. Android resource linking failed  
  2. /Users/sample/AndroidStudioProjects/MyApp/app/build/intermediates/merged_manifests/debug/AndroidManifest.xml:18: error: unexpected element <queries> found in <manifest> 

在 Build Output Window 中可能還會出現這樣一條錯誤信息,引導您去查看 Manifest 合并日志 (Manifest merger logs):

  1. Manifest merger failed with multiple errors, see logs 

展開 Merged Manifest 視圖后,會出現一條附加的報錯信息:

  1. Error: Missing 'package' key attribute on element package 

Merged Manifest 視圖

  • https://developer.android.google.cn/studio/build/manifest-merge#inspect_the_merged_manifest_and_find_conflicts

修復 Android Gradle 插件的問題

解決以上錯誤的最好辦法就是將 Android Gradle 插件升級到 4.1 Beta 版本。 但是,并不是所有開發者都能夠使用最新的版本,一些項目中可能會依賴老版本的 Gradle 或者代碼庫,而它們與 4.1 版本的 Android Gradle 插件有兼容性問題。 因此,近期我們為 Android Gradle 插件發布了一個小版本 (dot releases) 的升級,以便兼容<queries> 元素:

  • Android Gradle 插件升級到 4.1 Beta 版本https://developer.android.google.cn/studio/releases/gradle-plugin#updating-plugin
  • 小版本 (dot releases) 的升級https://developer.android.google.cn/studio/releases/gradle-plugin#4-0-0

舉個例子,如果您正在使用 4.0.0 版本的 Android Gradle 插件,就可以在項目級別的 build.gradle 文件中將相關依賴升級到上圖中對應的版本。

  1. buildscript { 
  2.  
  3.     repositories { 
  4.         google() 
  5.         jcenter() 
  6.     } 
  7.  
  8.     dependencies { 
  9.         // classpath 'com.android.tools.build:gradle:4.0.0' 
  10.         classpath 'com.android.tools.build:gradle:4.0.1' 
  11.     } 

 

責任編輯:未麗燕 來源: 谷歌開發者
相關推薦

2013-08-27 09:17:15

軟件定義網絡SDN網絡可見性

2020-02-28 14:48:51

結構系統程序

2020-11-11 08:00:00

Linux系統修復

2016-11-11 00:39:59

Java可見性機制

2024-05-13 08:51:39

2018-07-19 14:34:48

數據中心監控網絡

2018-06-22 10:05:04

Arch LinuxDEB軟件包

2021-09-01 10:50:25

云計算云計算環境云應用

2009-07-03 16:26:30

javax.servlHttpServlet

2010-02-05 14:46:20

Ubuntu軟件包

2011-11-29 13:09:02

2017-08-04 09:45:28

網絡監控工具

2018-06-11 08:50:46

LinuxArch Linux降級軟件包

2023-01-03 15:53:00

LinuxFlatpak軟件包

2023-01-02 11:34:04

LinuxFlatpak軟件包

2018-10-15 11:00:28

Linux軟件包命令

2021-07-06 14:47:30

Go 開發技術

2021-12-14 10:24:44

可見性網絡安全零信任

2010-01-07 17:32:09

2019-11-12 08:46:42

網絡數據包欺騙網絡攻擊
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本网站免费在线观看 | 免费一区| 国产精品国产成人国产三级 | 国产精品不卡一区 | 在线欧美亚洲 | 欧美一级做性受免费大片免费 | 九九综合 | 精品影院| 国产日韩中文字幕 | 亚洲综合久久久 | 综合亚洲视频 | 超碰地址| 亚洲免费久久久 | 看羞羞视频免费 | 日本成人免费网站 | 97超碰站 | 日韩在线h| 超碰3| 久草a√| 精品粉嫩aⅴ一区二区三区四区 | 精品国产乱码一区二区三区a | 亚洲精品久久久一区二区三区 | 亚洲美女一区二区三区 | 激情91| 精品欧美乱码久久久久久1区2区 | 亚洲精品国产第一综合99久久 | 亚洲国产精品一区二区久久 | 欧美一区二区在线观看 | 中文字幕亚洲一区 | 天天插天天操 | 成人免费在线观看 | 欧美aⅴ | 99精品久久 | 欧美成人a | 欧美一级免费看 | 在线免费国产视频 | 国产精品婷婷 | 国产精品久久久久久福利一牛影视 | 干干干操操操 | 高清国产一区二区 | 亚洲国产高清高潮精品美女 |