免安装应用是 Android 10 的一项重要功能,因此必须确保这些应用能够正常运行。免安装应用是隐式安装的,因此它们仅具有有限的功能,并需要在限制更多的安全沙盒中运行。由于这些限制普遍存在,因此系统的任何部分都存在无法正常运行免安装应用的风险。为此,我们创建了一个 CTS 测试子集来确保免安装应用允许的行为运作正常。核心理念就是,尽可能少地隔离要移植的测试,以此来最大限度地限制 CTS 大小的增长。在免安装应用模式下运行 CTS,意味着将测试 APK 作为免安装应用进行安装并运行测试。

免安装应用限制

免安装应用并非由用户安装,因此它们需要在受限沙盒中运行,并受到以下限制:只能拥有特定权限。

无法看到其他应用,除非这些应用已标记为对免安装应用可见。

只能访问特定的系统设置。

只能访问特定的系统属性。

无法公开服务/提供程序。

可以按照与广播有关的特殊规则收发消息。

此外,免安装应用还必须选择允许新的安全沙盒添加更多限制。免安装应用的这类特殊行为广泛存在于整个平台上,因此需要有一种方法来验证免安装应用是否能在生态系统中的所有设备上按预期运行。

在免安装应用模式下运行的测试

并非所有 CTS 模块都包含适用于免安装应用的测试。如果模块所测试的功能需要和系统服务器进行交互,那么这些测试就应该在免安装应用模式下运行。例如,OpenGL 测试不会和系统服务器进行交互,因此无需在免安装应用模式下运行,而无障碍功能测试需要和系统服务器进行交互,因此需要在免安装应用模式下运行。

用户除了需要确定哪些模块适用之外,还需要确定这些模块中的哪些测试是相关的。例如,测试可插拔架构(例如 AccessibilityService)的服务特定行为不适用于免安装应用模式,因为免安装应用无法向其他应用(包括平台)公开服务,而验证应用端行为的测试则适用于免安装应用模式。再比如,如果某个免安装应用无法拥有某项权限,则可通过测试来验证此权限背后的行为是否可在免安装应用模式下运行。有一组仅适用于免安装应用的测试,可用于验证与此类应用的行为方式(例如,不公开服务或看不到其他应用)有关的规则。通常情况下,这些测试已经编写好,且不需要移植。

免安装模式下的测试失败情况

如果测试因验证免安装应用无法访问的功能而失败,则表示该测试不适合在免安装应用模式下运行。您可以使用 @AppModeFull 注释测试,将其标记为仅可在完整应用模式下运行。您可以在类级别应用此注解,以排除类中的所有测试。

如果测试因免安装应用可以访问的某项功能被破坏而失败,请提交错误。

问题排查

如果您的测试失败并且系统显示“Failed to install MyCtsModule.apk on DEVICE. Reason: '-116'”消息,请在 logcat 上查找 PackageManager 消息。例如,如果系统显示“Can't replace Full App with Instant App: your_app”消息,则 adb 会先卸载您的应用。

Android中运行免安装app,适用于免安装应用的 CTS相关推荐

  1. 如何在虚拟机中运行知乎App

    经过知乎大佬们的指点迷津,我将目光转向了模拟器,简单的尝试了几款模拟器之后,发现都不能打开知乎App,可气呀,抖音都能打开,为啥知乎打不开呢?难度知乎做了反欺诈检测?不会这么高级吧.于是我又重新把目光 ...

  2. android执行lua脚本的方法,GitHub - tangqipeng/Android-Lua: lua脚本在Android中运行

    Android-Lua lua脚本在Android中运行 这是一个Android studio下运行的项目: 查看jniLibs下是否有libluajava.so文件,没有的话用命令进入jni文件夹: ...

  3. android启动其他app的服务器,Android中通过外部程序启动App的三种方法

    这篇文章主要介绍了Android中通过外部程序启动App的三种方法, 本文讲解了直接通过包名. 通过自定义的Action. 通过Scheme三种方法,并分别给出操作代码,需要的朋友可以参考下 ==== ...

  4. Android中关于APK文件的下载、安装和卸载

    如果我们想开发一款App,而这款App的需求中有对Apk文件的下载.安装和卸载功能的话(就像豌豆荚,当然功能不会那强大,因为强大的功能背后总是一些比较NB的技术在支持),那么这篇博客还是比较适合你的. ...

  5. android开发下载安装app提示未安装应用

    出现的情况是通过usb可以安装,然后用androidStudio运行生成的apk,发送出去,下载安装,提示未安装应用: 问题如图: 解决过程:在百度上看一些方案,不一致呢,问了问别人,通过正确的打包方 ...

  6. uniapp 判断用户是否安装app, 没有则安装

    场景: A分享一个活动页面给B, B点击后,需要判断是否有app,如果有,直接跳转到活动页: 如果没有,需要下载app 判断是否安装某app: plus.runtime.isApplicationEx ...

  7. Android 中如何从一个App启动另外一个App(如启动支付界面、启动地图界面、应用商场下载App等场景)...

    假定两个App,分别是A和B,当A运行某个功能需要启动B,一种是启动B应用,一种直接进入B的某个Activity.搜了很多资料,没有一个完整的.下面就A--Android5.1.1.B--Androi ...

  8. App中的HTML能在PC中运行吗,得到app电脑版有吗?得到app怎么在电脑上使用教程

    导读:得到app是一款阅读应用.它提供新的阅读体验,重度学习者可以更便捷.高效地获取知识.有些朋友想要在电脑上用得到app,觉得电脑上用更方便,小编为大家带来得到app电脑版使用教程. 一.得到app ...

  9. h5在android中的弹窗,H5+APP 如何弹出允许通知提醒?

    自己琢磨的解决办法: 在首页判断是否开启权限通知 var main = plus.android.runtimeMainActivity(); var pkName = main.getPackage ...

最新文章

  1. C语言实现大数运算(长整数的加、减、乘、除)
  2. linux语言windows 语言,作业系统一般用什么编码语言程式设计?如:Windows,Linux,是组合语言吗?还是自己开发的程式码?...
  3. Android android-common 常用功能和工具集合
  4. SAP KKBC_ORD报表中Plan和Target的区别
  5. 怎么查看自己linux实验环境,Linux实验
  6. San 3.7.4 发布,百度开源的 MVVM 组件框架
  7. 【CCS2018】SDN跨应用中毒攻击
  8. linux桌面xfce美化_使用Xfce Linux桌面环境的8个理由
  9. centos7改语言包
  10. 学习编程,最忌纠结!
  11. fg、bg、jobs、、nohup、ctrl + z命令
  12. 推荐一款录屏软件——EV录屏
  13. R中报错ERROR: configuration failed for package ‘magick’
  14. 微信小程序报错 40125 已解决
  15. mysql frm myd myi 恢复_通过*.frm,*.myd,*.myi文件恢复mysql数据库
  16. git分支拉取develop分支最新代码
  17. sysfader iexplore 应用程序错误问题解决方法.
  18. 初窥 Python 的 import 机制
  19. RxSwift核心逻辑
  20. 医疗行业容灾备份解决方案

热门文章

  1. Vim编辑器基本操作
  2. 使用Mozilla Thunderbird 创建ics日历文件
  3. C# 添加Word页眉、页脚和页码
  4. 深度学习——李宏毅第一课2020
  5. Kylin高级主题-Cube构建算法介绍(逐层算法和快速算法)
  6. CSS实现鼠标经过div时改变背景图片
  7. C | 使用C语言读取.mat文件
  8. [论文阅读:姿态识别Transformer] TransPose: Keypoint Localization via Transformer 2021 ICCV
  9. FlashFXP命令行
  10. Chrome谷歌浏览器插件的本地存放位置