android检测本地是否安装,在本地测试模块的安装
Play 核心库可让您在本地测试应用是否能够执行以下操作,而无需连接到 Play 商店:
请求并监控模块的安装。
处理安装错误。
本页介绍了如何将应用的拆分 APK 部署到测试设备,以便 Play 核心自动使用这些 APK 模拟从 Play 商店请求、下载和安装模块。
虽然您不需要对应用的逻辑进行任何更改,但需要满足以下要求:
下载并安装最新版 bundletool。您需要使用 bundletool 从 app bundle 构建一组新的可安装 APK。
确保您的应用使用的是 Play 核心 1.7.2 或更高版本。如需了解详情,请参阅在您的项目中添加 Play 核心库。
注意:Play 核心库目前不支持模块卸载或推迟安装。如需测试此功能,不妨考虑使用内部应用分享。
构建一组 APK
您应构建应用的拆分 APK(如果您尚未执行此操作),具体操作步骤如下:
使用以下某种方法为您的应用构建 app bundle:
使用 Android Studio 和 Android Plugin for Gradle 构建 Android App Bundle 并为其签名。
使用 bundletool 针对所有设备配置生成一组 APK,具体命令如下:
bundletool build-apks --local-testing
--bundle my_app.aab
--output my_app.apks
--local-testing 标记包含 APK 清单中的元数据,告知 Play Core 库使用本地拆分 APK 测试功能模块的安装,而无需连接到 Play 商店。
将应用部署到设备
使用 --local-testing 标记构建一组 APK 后,应使用 bundletool 安装应用的基础版本,并将其他 APK 转移到设备的本地存储空间。您可以使用以下命令执行这两项操作:
bundletool install-apks --apks my_app.apks
现在,当您启动应用并完成下载和安装功能模块的用户流时,Play 核心库会使用 bundletool 转移到设备本地存储空间的 APK。
模拟网络连接错误
为了模拟从 Play 商店安装模块的过程,Play 核心库使用 SplitInstallManager 的替代方法(名为 FakeSplitInstallManager)来请求模块。当您将 bundletool 与 --local-testing 标记一起使用来构建一组 APK 并将其部署到测试设备时,它包含元数据,指示 Play 核心库自动切换应用的 API 调用以调用 FakeSplitInstallManager,而不是 SplitInstallManager。
FakeSplitInstallManager 包含一个布尔标记,当应用下次请求安装模块时,您可以启用该标记来模拟网络连接错误。如需在测试中访问 FakeSplitInstallManager,您可以使用 FakeSplitInstallManagerFactory 获取它的实例,如下所示:
Kotlin
// Creates an instance of FakeSplitInstallManager with the app's context.
val fakeSplitInstallManager = FakeSplitInstallManagerFactory.create(context)
// Tells Play Core Library to force the next module request to
// result in a network error.
fakeSplitInstallManager.setShouldNetworkError(true)Java
// Creates an instance of FakeSplitInstallManager with the app's context.
FakeSplitInstallManager fakeSplitInstallManager =
FakeSplitInstallManagerFactory.create(context);
// Tells Play Core Library to force the next module request to
// result in a network error.
fakeSplitInstallManager.setShouldNetworkError(true);
相关文章:

IsPostBack的使用
protected void Page_Load(object sender, EventArgs e){//当前用户通过Index.aspx页面中“添加用户”链接跳转到该页面时,这是一次get请求,所以不会提交表单,拿不到隐藏域的值。当前页面显示完成,用户在表单中输入数据以后单击提…

WebStorm下ReactNative代码提示设置
ReactNative 代码智能提醒 (Webstrom live template) https://github.com/virtoolswebplayer/ReactNative-LiveTemplate ReactNative的代码模板,包括: 1.组件名称 2.Api 名称 3.所有StyleSheets属性 4.React组件 安装 方法一 file -> import settings -> ReactNative.ja…

WinXp安装Oracle 11g Express Edition
由于在虚拟机上学习(怕把真机器搞坏了),这次是在Windows XP上安装Oracle 11g Express。 本文安装的是Oracle 11g Express,是Oracle数据库的快速版(学习版),安装包大小只有几百MB。 到Oracle的…

html语言书写注意事项,CSS命名规范参考及书写注意事项
CSS书写顺序*{/*显示属性*/displaypositionfloatclearcursor…/*盒模型*/marginpaddingwidthheight/*排版*/vertical-alignwhite-spacetext-decorationtext-align…/*文字*/colorfontcontent/*边框背景 为什么要把 boder和background放在最后的原因是修改的频率会较之前的频繁&…

关于移动端rem适配
var num 1 / window.devicePixelRatio; var fontSize document.documentElement.clientWidth / 10; document.getElementsByTagName(html)[0].style.fontSize fontSize px; 适配移动端rem单位,实际使用的时候用量取到的像素值/75即为计算后的rem值,标…

JavaWeb基础—JSP
一、什么是JSP JSP 全称是 Java Server Pages,是一种开发动态web资源的技术 在原HTML上添加JAVA脚本(灵魂工程师,为页面添加灵魂),可以说 jsp html java代码 jsp标签 二、JSP的原理 JSP基本原理: JSP…

react-native 常用命令
创建项目 react-native init AwesomeProject //AwesomeProject是项目名启动 Node.js web server react-native start启动android react-native run-android启动ios react-native run-ios运行特定模拟器:react-native run-ios --simulator "iPhone 5"
使用WinPcap和libpcap类库读写pcap文件(001)开发环境配置
最近的项目要求写一个读写pcap文件的小程序,用来修改pcap中的部分信息,实现pcap的定制。 所以必须学会使用wireshark并能有利用WinPcap库和libpcap库进行开发。 虽然本文记录的都是windows下使用WinPcap进行开发,但是由于希望程序能够跨平台…

MySql忘记密码了咋办
对内 忘记密码终端修改操作: #停止mysql服务 sudo /opt/lampp/lampp stopmysql #参数启动mysqld sudo /opt/lampp/sbin/mysqld --skip-grant-tables #新建开一个终端(复制会话)进入 sudo /opt/lampp/bin/mysql -uroot #使用mysql权限&…

html资源文件记载进度条,用进度条显示文件读取进度《 HTML5:文件 API 》
在这个文档里,我添加了一个 标签 .. 上面定义了一个 ID 是 eventstatus … 我们可以把进度条放在这个容器里面 … 先找到用来显示进度条的容器 …// 找到显示事件状态的容器var eventStatus document.getElementById("eventstatus");然后再去创建进度条需…

JS中根据某个值进行大小排序
//从大到小排序 function compareBigToSmall(property){return function(a,b){var value1 a[property];var value2 b[property];return value2 - value1;} }; //从小到大排序 function compareSmallToBig(property){return function(a,b){var value1 a[property];var value…

react native 常用学习或查资料网址
react-native facebook官网:http://facebook.github.io/react-native/ 中文网:http://reactnative.cn/ react 官网地址:http://facebook.github.io/react/ Github地址:https://github.com/facebook/react 阮一峰教程:…

使用WinPcap和libpcap类库读写pcap文件(002)PCAP文件格式
本文基本翻译自https://wiki.wireshark.org/Development/LibpcapFileFormat,主要分析pcap文件的格式。 其中一些字段可能和现在的WinPcap类库里的字段不同,请结合当前WinPcap库分析。 libpcap文件格式 libpcap文件格式是TcpDump/WinDump,Wir…

图论-最短路径--3、SPFA算法O(kE)
SPFA算法O(kE) 主要思想是: 初始时将起点加入队列。每次从队列中取出一个元素,并对所有与它相邻的点进行修改,若某个相邻的点修改成功,则将其入队。直到队列为空时算法结束。 这个算法,简单的说就是队列优化的bellman-…

如何在HHDI中进行数据质量探查并获取数据剖析报告
通过执行多种数据剖析规则,对目标表(或一段SQL语句)进行数据质量探查,从而得到其数据质量情况。目前支持以下几种数据剖析类型,分别是:数字值分析、值匹配检查、字符值分析、日期值分析、布尔值分析、重复值…

html5网页怎么实现内容追加,纯js实现网页内容复制后自动追加自定义内容
网页操作内容复制内容后纯js实现监听自动追加自定义内容不少网站技术或者博客上有这样的处理,当我们复制代码的时候,会自动加上一段本信息版权为XXXX,这是怎么实现的呢?其实实现的方式很简单,可以在我的网站页面上绑定…

ios Standard Framework和Umbrella Framework
Standard Framework:标准库,通过引用对应的header文件而不是引用master header 文件来引用类(也可以通过引用Master Header file来引用需要使用的类),只需要暴露对应的header文件到Header文件夹下即可,不强制引用master header文件…
Win7使用Visual Studio 2010编译用于Qt4.8.6的MySQL驱动
其实编译过程在Qt Creator 的帮助文档里有,我就是照着做的,但是没成功,因为不能照搬照抄! 1.确保path环境变量里有QTDIR,这个就不细说了。 2.打开"开始"->"Microsoft Visual Studio 2010"->…

ios 常见性能优化
1. 用ARC管理内存 2. 在正确的地方使用reuseIdentifier 3. 尽可能使Views透明 4. 避免庞大的XIB 5. 不要block主线程 6. 在Image Views中调整图片大小 7. 选择正确的Collection 8. 打开gzip压缩 9. 重用和延迟加载Views 10. Cache, Cache, 还是Cache! 11. 权衡渲染方…

强化学习(七)时序差分离线控制算法Q-Learning
在强化学习(六)时序差分在线控制算法SARSA中我们讨论了时序差分的在线控制算法SARSA,而另一类时序差分的离线控制算法还没有讨论,因此本文我们关注于时序差分离线控制算法,主要是经典的Q-Learning算法。 Q-Learning这一…

react遇到的各种坑
标签里用到<label for>的,for 要写成htmlFor标签里的class要写成className组件首字母一定要大写单标签最后一定要闭合如果html里要空格转义, 注意不要漏了分号;style要写成style{{clear: both,backgroundColor:red,width:200px}}组件里能用<but…

html页面视频标签,html5基础标签(html5视频标签 html5新标签用法)
点评:html5基础,包括html5视频标签和html5新标签等标签用法,大家参考使用吧1、 声明的变化2、 指定字符编码的变化,html5中建议使用utf-83、 Html5中允许没有结束符,不算错误4、 不允许写结束标记的有:…

chronyd服务
一、makestep步进时间选项 最近做RHCE的实验,nfs用krb5p实现全程加密和身份认证,需要nfs服务端、客户端的时间与KDC的时间同步,否则kerberos分发的ticket就会失效,nfs不能挂载和访问。那么就需要在nfs的服务端、客户端都配置chro…

软件测试人员必备Linux命令(初、中、高级)
有些技能可以事半功倍,有些命运掌握在我们手中。熟练的掌握和使用这些命令可以提高工作效率,并且结合这些命令对测试过程中遇到的问题进行一些初步的定位。 1 目录与文件操作 1.1 ls(初级) 使用权限:所有人 功能 : 显示指定工作目录下之内容&…

酷派android手机怎么截屏,酷派S688怎么截屏截图?
夏普AQUOS S2事水滴全面屏,搭配骁龙630处理器,个人手里就是这货,目前售价千元内,按需求不高的人,可以考虑,不过系统不很行基于Android 7.1.1深度优化的Smile UX系统实在表现一般。~~~~根据美国FCC的认证信息…

01 多线程概念及其实现方式
多线程是编程过程里必不可少的内容,学习多线程,就先要了解进程和线程的概念。进程:是指当前正在运行的程序,是一个程序在内存里的执行区域;线程:是在进程里的一个执行控制单元,执行路径…

负载均衡层次分析
什么是负载均衡 负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一,它通常是指,将请求/数据【均匀】分摊到多个操作单元上执行,负载均衡的关键在于【均匀】。 常见的负载均衡方案 常见互联网分布式架构如上,分为客…

Python基础01-Python环境搭建与HelloWorld
目录 从今天开始学习Python Python环境搭建 安装gcc Python源码包安装 开始Python第一个代码HelloWorld! 从今天开始学习Python 为啥选择Python,可能是跟随潮流吧。我现在不知道为什么学习Python,但是可能一年到一年半以后,…

oracle与mysql创建表时的区别
oracle创建表时,不支持在建表时同时增加字段注释。故采用以下方式: #创建表 CREATE TABLE predict_data as (id integer NOT NULL, uid varchar2(80),mid varchar2(80),time date ,conten…

在Linux上安装Memcached服务
下载并安装Memcache服务器端 服务器端主要是安装memcache服务器端. 下载:http://www.danga.com/memcached/dist/memcached-1.2.2.tar.gz 另外,Memcache用到了libevent这个库用于Socket的处理,所以还需要安装libevent,libevent的最…