网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

Android11中的软件包可见性是什么

这篇文章主要讲解了“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

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

举个例子,如果您正在使用 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中的软件包可见性是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


网站名称:Android11中的软件包可见性是什么
当前网址:http://bjjierui.cn/article/pcjdhh.html

其他资讯