引言
对于「应用可见性」这一概念,可能很多开发者小伙伴还不是很熟悉。简单举一个很典型的场景例子,当你开发的应用需要调起第三方应用时,这里就涉及到应用可见性的问题了,如果不配置相关的应用可见性,则你的应用是无法顺利调起第三方应用或页面的。
在 Android 中,应用程序可以通过发送隐式意图(例如打开网页或分享内容)与其他应用程序进行交互。然而,在 Android 11 及以上版本中,系统不再自动解析所有的隐式意图目标;相反,开发者需要明确声明他们想要与哪些应用交互,这就是应用可见性这一概念的由来。
应用可见性(Package Visibility)是Android 11 (API level 30) 引入的一项隐私保护特性,旨在限制应用程序对其他已安装应用的了解。这项功能确保一个应用不能轻易地获取设备上所有其他应用的信息,除非这些信息对于该应用的功能是必要的。通过这种方式,它减少了不必要的数据收集,并增强了用户隐私。为了使应用能够查询特定的应用程序或组件,必须在 AndroidManifest.xml 文件中使用 元素来声明。这允许开发者指定他们的应用可以与之通信的应用包名、意图模式或其他条件。
然而,在YonBuilder移动开发中,引擎框架封装了底层架构,相关的配置文件并不对开发者暴露,所以开发者是无法通过直接编辑的方式,去修改AndroidManifest.xml文件的。开发者需要通过YonBuider移动开发提供的专门页面,去定义相关的应用可见性。
本文主要目的,就是介绍在YonBuilder移动开发技术体系中,如何去定义声明应用的可见性。
「配置应用可见性」的页面功能使用
页面访问路径
登录YonBuilder移动开发云端工作台,进入应用详情页,切换到「端设置」页面,拉取到页面底部,就可以看到「配置应用可见性」的配置功能版块了。
「配置应用可见性」页面相关配置参数介绍
通过页面截图,我们可以看到在「配置应用可见性」版块部分有Package Name
、Intent
、Provider
三个配置选项卡,下面我们介绍一下,具体什么场景使用哪一种配置选项卡进行相关的配置。
在引言中,我们提到过通过在 AndroidManifest.xml
文件中使用 元素来声明应用可见性,Package Name
、Intent
、Provider
这三种配置就是主要的 内可以声明的应用可见性方式。
-
Package Name:主要用于直接引用某个特定的应用程序或其组件
如果你的应用需要启动另一个特定的应用,例如地图类应用、微信等,就需要使用
Package Name
选项面板,去配置声明该应用的包名。平台已经内置了当前市面上当前常见的热门应用,可以点击「选择热门应用」输入框右侧的下拉箭头进行快速选择(如果第一次使用该功能,需要点击右下角的「编辑」按钮进入编辑状态)
如果你想调起的应用并不在热门应用下拉列表中时,可以进行手动添加(点击右侧的「+」按钮,可以增加新的一行)。
-
被检测应用名称:这个名称主要是方便开发者配置多了以后,自己识别区分使用,可以随意定义,不影响编译后的代码;
-
安卓配置被测试应用的配置包名:这个是本功能的核心定义,必须填写想要调用的第三方目标应用的实际包名。如果目标应用是一个YonBuilder移动开发的应用,则该报名就是「APP证书」中
android
证书的报名。PS:如果你不知道目标应用的包名,简单方式可以通过搜索引擎去直接搜索应用名称加上关键词“包名”,例如,“微信 包名”。另外也可以通过命令行工具
adb
(需要电脑和USB线)获取。具体是步骤如下:- 启用USB调试:在手机上前往“设置” > “关于手机”,连续点击“版本号”七次以激活开发者选项。然后返回设置主菜单,进入“开发者选项”,开启“USB调试”。
- 连接设备:使用USB线将你的Android设备连接到电脑。
- 打开命令提示符或终端:在电脑上打开命令行工具(Windows用户可以使用CMD或PowerShell,macOS/Linux用户可以使用Terminal)。
- 输入以下命令:
adb devices
确认设备已正确连接。 - 列出所有已安装的应用程序及其包名:
adb shell pm list packages
,这个命令会输出一个包含所有已安装应用包名的列表。 - 过滤特定类型的应用:如果你想只看用户安装的应用(而非系统预装的应用),可以添加
-3
参数:adb shell pm list packages -3
- 查找具体应用的包名:如果知道应用的名字或者部分信息,可以通过管道符结合 grep 来筛选结果。例如,查找微信的包名:
adb shell pm list packages | grep weixin
-
-
Intent:用来表达意图或动作,以及匹配那些能够执行特定任务的应用程序集合。
当你的应用需要打开某种类型的文件时,你可以声明意图过滤器来查找能够处理这些文件的应用。
如果你当前需要使用第三方的应用打开PDF文件,在原生xml中的定义如下:
<queries><intent><action android:name="android.intent.action.VIEW" /><data android:mimeType="application/pdf" /></intent> </queries>
则对应到YonBuilder移动开发平台的「配置应用可见性」页面,需要切换到Intent配置选项卡,按以下截图填写即可。
同样的「action name」中的下拉列表有常见的各种常见的配置intent,具体需要按实际场景需要进行选择即可,这里就不详细展开描述了。
PS: 关于这块功能,之前我有一个发布教程是YonBuilder移动开发——调用手机系统的浏览器打开网页,就是使用的本配置项功能,有兴趣的同学可以去参考了解一下。
-
Provider:特指内容提供者,它是用于跨应用程序间数据共享的一种机制。
如果要读取来自其他应用的数据(如联系人信息),则需要声明相应的 Content Provider。在实际开发中,目前这种需求场景并不多见。
这里举例说明一下,例如如果要读取联系人信息,在原生xml中定义如下:
<queries><provider android:authorities="com.example.provider.contacts" /> </queries>
则对应到YonBuilder移动开发平台的「配置应用可见性」页面,需要切换到Provider配置选项卡,按以下截图填写即可。
注意事项
-
隐私保护:确保遵循当地法律法规,不要滥用此信息侵犯他人隐私。
-
最小化声明:尽量减少不必要的 声明,只包含对你应用核心功能必要的部分。
-
兼容性考虑:虽然 是从 API level 30 开始引入的,但在较低版本的 Android 上,它会被忽略,因此不会影响旧设备上的应用行为。
-
测试覆盖:确保修改后的配置经过充分测试,特别是在不同的 Android 版本上运行,以保证应用的正常运作。
总结
以上就是关于在YonBuilder移动开发技术体系中,如何去定义「配置应用可见性」功能的具体使用介绍。本文仅仅是抛砖引玉,简单介绍了相关参数的配置使用,在具体的场景开发中,开发者可能会遇到多种多样的场景需求,具体就需要开发者结合相关的概念定义,动态灵活的去进行相关功能参数的配置了。不过可以明确的是,无论场景需求如何变化,还是始终在这三类定义的包含中,如果开发者伙伴具体在开发中不知道如何选择,可以先通过搜索引擎搜索一下原始的xml是如何配置的,然后再根据不同的标签选择对应的选项卡进行配置即可。最后配置完成后,记得保存并重新编译新的版本才能生效!!!