千家信息网

Android 11中的软件包可见性是什么

发表于:2025-02-22 作者:千家信息网编辑
千家信息网最后更新 2025年02月22日,这篇文章主要讲解了"Android 11中的软件包可见性是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Android 11中的软件包可见性是什么
千家信息网最后更新 2025年02月22日Android 11中的软件包可见性是什么

这篇文章主要讲解了"Android 11中的软件包可见性是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Android 11中的软件包可见性是什么"吧!

为了更好地 "问责" 访问已安装应用的行为,默认情况下,以 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 链接。

try {   val intent = Intent(ACTION_VIEW, Uri.parse(url)).apply {     // 非浏览器应用会直接处理该 URL(默认情况下)     // 用户也可以在消除歧义对话框中选择非浏览器应用      addCategory(CATEGORY_BROWSABLE)     flags = FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_REQUIRE_NON_BROWSER   }    startActivity(intent) } catch (e: ActivityNotFoundException) {  // 只能使用浏览器应用,或者默认使用浏览器处理该 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 中可能会看到以下错误:

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

在 Build Output Window 中可能还会出现这样一条错误信息,引导您去查看 Manifest 合并日志 (Manifest merger logs):

Manifest merger failed with multiple errors, see logs

展开 Merged Manifest 视图后,会出现一条附加的报错信息:

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) 的升级,以便兼容 元素:

  • 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 文件中将相关依赖升级到上图中对应的版本。

buildscript {      repositories {         google()         jcenter()     }      dependencies {         // classpath 'com.android.tools.build:gradle:4.0.0'         classpath 'com.android.tools.build:gradle:4.0.1'     } }

感谢各位的阅读,以上就是"Android 11中的软件包可见性是什么"的内容了,经过本文的学习后,相信大家对Android 11中的软件包可见性是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

应用 版本 插件 软件 软件包 浏览器 浏览 元素 升级 处理 信息 场景 开发者 情况 错误 开发 办法 更多 问题 学习 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 公司信息网络安全 计算机类国家网络安全学院就业 网络安全专题片观看记录咋写 郑州软件开发app公司有哪些 数据库中数据存储过程 jboss数据库连接池源码 山东人工智能软件开发费用是多少 湖北省公安厅网络安全总队 访客机如何查看数据库 手机app软件开发多少钱 转行软件开发前景 大中小型数据库 亚马逊云服务器和阿里云和腾讯云 软件开发数据存储的库叫什么 数据库的重构技术 济宁优券集网络技术有限公司 怎么去国家网络安全局 软件开发个人事迹范文 大飞机网络安全板块排名 软件开发公司全网优惠 饥荒为什么连接不到科雷服务器 游戏设计属于软件开发么 网站每次开奖结果录到数据库 进游戏看不到服务器怎么办 软件开发要注重原理吗 开源软件开发包 济宁优券集网络技术有限公司 山东戴尔服务器维修调试多少钱 网络安全知识去哪学 华为网络技术大赛赛区
0