在线简历免费制作网站广东网站seo

pingmian/2026/1/22 6:46:43/文章来源:
在线简历免费制作网站,广东网站seo,济南网站哪家做的好,制作手机app用什么语言在Android 7.0#xff08;Nougat#xff09;推出了新的应用签名方案APK Signature Scheme v2后#xff0c;之前快速生成渠道包的方式#xff08;美团Android自动化之旅—生成渠道包#xff09;已经行不通了#xff0c;在此应用签名方案下如何快速生成渠道包呢#xff1f… 在Android 7.0Nougat推出了新的应用签名方案APK Signature Scheme v2后之前快速生成渠道包的方式美团Android自动化之旅—生成渠道包已经行不通了在此应用签名方案下如何快速生成渠道包呢 本文会对新的应用签名方案APK Signature Scheme v2以及新一代渠道生成工具进行详细深入的介绍。 新的应用签名方案APK Signature Scheme v2 Android 7.0Nougat引入一项新的应用签名方案APK Signature Scheme v2它是一个对全文件进行签名的方案能提供更快的应用安装时间、对未授权APK文件的更改提供更多保护在默认情况下Android Gradle 2.2.0插件会使用APK Signature Scheme v2和传统签名方案来签署你的应用。 下面以 新的应用签名方案 来指APK Signature Scheme v2。 目前该方案不是强制性的在 build.gradle 添加 v2SigningEnabled false 就能使用传统签名方案来签署我们的应用见下面的代码片段。 android {...defaultConfig { ... }signingConfigs {release {storeFile file(myreleasekey.keystore)storePassword passwordkeyAlias MyReleaseKeykeyPassword passwordv2SigningEnabled false}}}但新的应用签名方案有着良好的向后兼容性能完全兼容低于Android 7.0Nougat的版本。对比旧签名方案它有更快的验证速度和更安全的保护因此新的应用签名方案可能会被采纳成一个强制配置笔者认为现在有必要对现有的渠道包生成方式进行检查、升级或改造来支持新的应用签名方案。 新的签名方案对已有的渠道生成方案有什么影响呢下图是新的应用签名方案和旧的签名方案的一个对比 新的签名方案会在ZIP文件格式的 Central Directory 区块所在文件位置的前面添加一个APK Signing Block区块下面按照ZIP文件的格式来分析新应用签名方案签名后的APK包。 整个APKZIP文件格式会被分为以下四个区块 1. Contents of ZIP entriesfrom offset 0 until the start of APK Signing Block 2. APK Signing Block 3. ZIP Central Directory 4. ZIP End of Central Directory 新应用签名方案的签名信息会被保存在区块2APK Signing Block中 而区块1Contents of ZIP entries、区块3ZIP Central Directory、区块4ZIP End of Central Directory是受保护的在签名后任何对区块1、3、4的修改都逃不过新的应用签名方案的检查。 之前的渠道包生成方案是通过在META-INF目录下添加空文件用空文件的名称来作为渠道的唯一标识之前在META-INF下添加文件是不需要重新签名应用的这样会节省不少打包的时间从而提高打渠道包的速度。但在新的应用签名方案下META-INF已经被列入了保护区了向META-INF添加空文件的方案会对区块1、3、4都会有影响新应用签名方案签署的应用经过我们旧的生成渠道包方案处理后在安装时会报以下错误 Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Failed to collect certificates from base.apk: META-INF/CERT.SF indicates base.apk is signed using APK Signature Scheme v2, but no such signature was found. Signature stripped?]目前另外一种比较流行的渠道包快速生成方案往APK中添加ZIP Comment也因为上述原因无法在新的应用签名方案下进行正常工作。 如果新的应用签名方案后续改成强制要求那我们现有的生成渠道包的方式就会无法工作那我们难道要退回到解放前通过传统的方式例如使用APKTool逆向工具、采用Flavor BuildType等比较耗时的方案来进行渠道包打包来生成支持新应用签名方案的渠道包吗 如果只有少量渠道包的场景下这种耗时时长还能够勉强接受。但是目前我们有将近900个渠道如果采用传统方式打完所有的渠道包需要近3个小时这是不能接受的。 那我们有没有其他更好的渠道包生成方式既能支持新的应用签名方案又能体验毫秒级的打包耗时呢我们来分析一下新方案中的区块2——Block。 可扩展的APK Signature Scheme v2 Block 通过上面的描述可以看出因为APK包的区块1、3、4都是受保护的任何修改在签名后对它们的修改都会在安装过程中被签名校验检测失败而区块2APK Signing Block是不受签名校验规则保护的那是否可以在这个不受签名保护的区块2APK Signing Block上做文章呢我们先来看看对区块2格式的描述 偏移字节数描述08这个Block的长度本字段的长度不计算在内8n一组ID-value-248这个Block的长度和第一个字段一样值-1616魔数 “APK Sig Block 42”区块2中APK Signing Block是由这几部分组成2个用来标示这个区块长度的8字节 这个区块的魔数APK Sig Block 42 这个区块所承载的数据ID-value。 我们重点来看一下这个ID-value它由一个8字节的长度标示4字节的ID它的负载组成。V2的签名信息是以ID0x7109871a的ID-value来保存在这个区块中不知大家有没有注意这是一组ID-value也就是说它是可以有若干个这样的ID-value来组成那我们是不是可以在这里做一些文章呢 为了验证我们的想法先来看看新的应用签名方案是怎么验证签名信息的见下图 通过上图可以看出新的应用签名方案的验证过程 1. 寻找APK Signing Block如果能够找到则进行验证验证成功则继续进行安装如果失败了则终止安装 2. 如果未找到APK Signing Block则执行原来的签名验证机制也是验证成功则继续进行安装如果失败了则终止安装 那Android应用在安装时新的应用签名方案是怎么进行校验的呢笔者通过翻阅Android相关部分的源码发现下面代码段是用来处理上面所说的ID-value的 public static ByteBuffer findApkSignatureSchemeV2Block(ByteBuffer apkSigningBlock,Result result) throws SignatureNotFoundException {checkByteOrderLittleEndian(apkSigningBlock);// FORMAT:// OFFSET DATA TYPE DESCRIPTION// * 0 bytes uint64: size in bytes (excluding this field)// * 8 bytes pairs// * -24 bytes uint64: size in bytes (same as the one above)// * -16 bytes uint128: magicByteBuffer pairs sliceFromTo(apkSigningBlock, 8, apkSigningBlock.capacity() - 24);int entryCount 0;while (pairs.hasRemaining()) {entryCount;if (pairs.remaining() 8) {throw new SignatureNotFoundException(Insufficient data to read size of APK Signing Block entry # entryCount);}long lenLong pairs.getLong();if ((lenLong 4) || (lenLong Integer.MAX_VALUE)) {throw new SignatureNotFoundException(APK Signing Block entry # entryCount size out of range: lenLong);}int len (int) lenLong;int nextEntryPos pairs.position() len;if (len pairs.remaining()) {throw new SignatureNotFoundException(APK Signing Block entry # entryCount size out of range: len , available: pairs.remaining());}int id pairs.getInt();if (id APK_SIGNATURE_SCHEME_V2_BLOCK_ID) {return getByteBuffer(pairs, len - 4);}result.addWarning(Issue.APK_SIG_BLOCK_UNKNOWN_ENTRY_ID, id);pairs.position(nextEntryPos);}throw new SignatureNotFoundException(No APK Signature Scheme v2 block in APK Signing Block);}上述代码中关键的一个位置是 if (id APK_SIGNATURE_SCHEME_V2_BLOCK_ID) {return getByteBuffer(pairs, len - 4);}通过源代码可以看出Android是通过查找ID为 APK_SIGNATURE_SCHEME_V2_BLOCK_ID 0x7109871a 的ID-value来获取APK Signature Scheme v2 Block对这个区块中其他的ID-value选择了忽略。 在APK Signature Scheme v2中没有看到对无法识别的ID有相关处理的介绍。 当看到这里时我们可不可以设想一下提供一个自定义的ID-value并写入该区域从而为快速生成渠道包服务呢 怎么向ID-value中添加信息呢通过阅读ZIP的文件格式和APK Signing Block格式的描述笔者通过编写下面的代码片段进行验证发现通过在已经被新的应用签名方案签名后的APK中添加自定义的ID-value是不需要再次经过签名就能安装的下面是部分代码片段。 public void writeApkSigningBlock(DataOutput dataOutput) {long length 24;for (int index 0; index payloads.size(); index) {ApkSigningPayload payload payloads.get(index);byte[] bytes payload.getByteBuffer();length 12 bytes.length;}ByteBuffer byteBuffer ByteBuffer.allocate(Long.BYTES);byteBuffer.order(ByteOrder.LITTLE_ENDIAN);byteBuffer.putLong(length);dataOutput.write(byteBuffer.array());for (int index 0; index payloads.size(); index) {ApkSigningPayload payload payloads.get(index);byte[] bytes payload.getByteBuffer();byteBuffer ByteBuffer.allocate(Integer.BYTES);byteBuffer.order(ByteOrder.LITTLE_ENDIAN);byteBuffer.putInt(payload.getId());dataOutput.write(byteBuffer.array());dataOutput.write(bytes);}...}新一代渠道包生成工具 到这里为止一个新的渠道包生成方案逐步清晰了起来下面是新一代渠道包生成工具的描述 对新的应用签名方案生成的APK包中的ID-value进行扩展提供自定义IDvalue渠道信息并保存在APK中而APK在安装过程中进行的签名校验是忽略我们添加的这个ID-value的这样就能正常安装了在App运行阶段可以通过ZIP的EOCDEnd of central directory、Central directory等结构中的信息会涉及ZIP格式的相关知识这里不做展开描述找到我们自己添加的ID-value从而实现获取渠道信息的功能新一代渠道包生成工具完全是基于ZIP文件格式和APK Signing Block存储格式而构建基于文件的二进制流进行处理有着良好的处理速度和兼容性能够满足不同的语言编写的要求目前笔者采用的是JavaGroovy开发 该工具主要有四部分组成 1. 用于写入ID-value信息的Java类库 2. Gradle构建插件用来和Android的打包流程进行结合 3. 用于读取ID-value信息的Java类库 4. 用于供com.android.application使用的读取渠道信息的AAR 这样每打一个渠道包只需复制一个APK然后在APK中添加一个ID-value即可这种打包方式速度非常快对一个30M大小的APK包只需要100多毫秒包含文件复制时间就能生成一个渠道包而在运行时获取渠道信息只需要大约几毫秒的时间。 这个项目我们取名为Walle瓦力已经开源项目的Github地址是 https://github.com/Meituan-Dianping/walle 求Issue、PR、Star。希望业内有类似需求的团队能够在APK Signature Scheme V2签名下愉快地生成渠道包同时也期待大家一起对该项目进行完善和优化。 总结 以上就是我们对新的应用签名方案进行的分析并根据它所带来的文件存储格式上的变化找到了可以利用的ID-value然后基于这个ID-value来构建我们新一代渠道包生成工具。 新一代渠道包生成工具能够满足新应用签名方案对安全性的要求同时也能满足对渠道包打包时间的要求至此大家生成渠道包的方式需要升级了 文章中引用的图片来源于https://source.android.com/security/apksigning/v2.html 参考文献 APK Signature Scheme v2ApkSigner的源代码apksig的源代码[ZIP Format](https://en.wikipedia.org/wiki/Zip_(file_format)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/86914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

市通建设工程质量监督局网站网站后台模板关联自己做的网站

面试算法编程题记录 题目 : 羊圈里的狼 题目背景 : 一到了晚上,草原牧民的羊就会被赶进羊圈里。这时,野外的狼群就会打羊羔的主意。为了保护羊羔,牧民需要将羊圈里的狼赶走或杀死。由于来的狼很多,他需要快速甄别哪些狼在羊圈里面…

怎样看出一个网站是那个公司做的呼和浩特网站设计公司

介绍 Docker 什么是 Docker?简要介绍 Docker 的定义和基本概念。Docker 的优势和应用场景。为什么 Docker 在软件开发和部署中如此受欢迎? Docker 的核心概念 Docker 镜像:什么是 Docker 镜像?如何创建和管理 Docker 镜像&#xf…

建设游戏网站电商好做吗现在

文章目录 前言一、冯诺依曼体系二、现代计算机的结构总结 前言 今天给大家介绍计算机的体系和结构,分为两个板块:冯诺依曼体系和现代计算机的结构。 一、冯诺依曼体系 冯诺依曼体系是将程序指令和数据一起存储的计算机设计概念结构。 冯诺依曼体系可以…

视频网站怎样做个人网站的投稿平台

功能描述: 实现添加联系人功能,联系人上限为1000人,联系人信息包括(姓名、性别、年龄、联系电话、家庭住址) 添加联系人实现步骤: ●设计联系人结构体 ●设计通讯录结构体 ●main函数中创建通讯录 ●封装添加联系人函数 ●测试添加联系人功能 1.1&#…

个人导航网站如何赚钱成都科技网站建设费

熟悉发行版和快照依赖项的Maven和Gradle用户可能不了解TeamCity快照依赖项,或者认为他们与Maven相关(这是不正确的)。 熟悉工件和快照依赖关系的TeamCity用户可能不知道,除了TeamCity提供的插件之外,添加Artifactory插…

企业网站推广技巧wordpress教程视频教程

前两题思路和解答一致 404.左叶子之和 (优先掌握递归) 我的代码思路是传入子节点状态,左节点还是有节点,如果是叶子并为左节点则加入,题解则是通过当前节点去判断左子节点是不是叶子节点,再依此遍历全树&am…

李志自己做网站seo编辑的工作内容

一直没完整的解释这个问题,这边详细说下吧。准确说不是Python对SEO有什么作用,而是会一门程序语言对SEO有什么用。Python仅是诸多程序语言中,个人评估下来最为推荐的一种,但用其它程序语言一般也没太大的差别。后面简单起见都以Py…

沧浪设计网站公司邯郸哪儿做网站便宜

文章目录 一、概念二、分类(主要是传统 NAT)2.1 基本 NAT2.2 NAPT 三、访问NAT下的内网设备的方式3.1 多拨3.2 端口转发、DMZ3.3 UPnP IGD、NAT-PMP3.4 服务器中转:frp 内网穿透3.4.1 NAT 打洞3.4.2 NAT 类型与打洞成功率3.4.2.1 完全圆锥形 …

荥阳市建设局网站室内设计学费一般多少

题目 请设计一个函数,用来判断在一个n乘m的矩阵中是否存在一条包含某长度为len的字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了…

企业网站排名技巧p2p网站建设石家庄

31、http 的理解 ? HTTP 协议是超文本传输协议,是客户端浏览器或其他程序“请求”与 Web 服务器响应之间的应用层通信协议。HTTPS主要是由HTTPSSL构建的可进行加密传输、身份认证的一种安全通信通道。32、http 和 https 的区别 ? 1、https协议需要到ca申请证书&…

微网站制作张家港企业网站

01 环境搭建 《PyTorch基础教程》01 搭建环境 基于Docker搭建ubuntu22+Python3.10+Pytorch2+cuda11+jupyter的开发环境 Docker部署PyTorch 拉取cnstark/pytorch镜像 拉取镜像: docker pull cnstark/pytorch:2.0.1-py3.10.11-cuda11.8.0-ubuntu22.04导出镜像: docker sa…

公司定制网站建设公司个人网站做seo

opencv关于ncc说,,完全匹配p1,完全不匹配p-1,p0表示无关联。 数学书概率论中说,|p|1,是线性相关,p0,不相关。 我在程序中验证后,发现,数学书更准确。 第一…

站长工具域名查询ipwordpress网站专题

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于自适应波束成形算法的matlab性能仿真,对比SG和RLS两种方法. 2.测试软件版本以及运行结果展示 MATLAB2022a版本运行 3.核心程序 ........................…

酒店网站建设流程wordpress设计博客

可扩展性是许多体系结构的重要特征。 它衡量是否容易(或困难) 它是在不影响现有核心系统功能的情况下添加或更改功能。 让我们举一个简单的例子。 假设您的公司拥有一个核心产品来跟踪体育俱乐部中的所有用户。 在您的产品体系结构中,您有一个…

国内最大c2c网站网站服务器一年的费用

NOI 2021 day1轻重边descriptionsolutioncode路径交点descriptionsolutioncode轻重边 description solution case1~6 把父亲和儿子的边转化为储存在儿子上的点 建树,暴力爬lcalcalca,暴力修改,O(n2)O(n^2)O(n2) caseA 对于一条链的情况&am…

做物流行业网站完成网站群建设

目录 1 3. 无重复字符的最长子串 2 438. 找到字符串中所有字母异位词 菜鸟做题第二周,语言是 C 1 3. 无重复字符的最长子串 解题思路: 设置两个指针,左指针和右指针,二者之间形成窗口右指针不断右移,新字母被纳…

电子商务如何做网站销售免费ppt模板app有哪些

LaTex插入 Python 程序代码块1. 为什么用 LaTeX?2. LaTeX 的安装与配置2.1 安装 TeXLive2.2 选择 LaTeX 编辑器3. LaTeX 的初次使用3.1 最短的 LaTeX 示例3.2 从模板创建文档3.3 编译生成 PDF 文件4. 基于模板编辑文档4.1 tex 模板的基本结构4.2 基于模板编辑排版5.…

深圳宝安做网站的模板做网站上传

题目 2765. 最长交替子数组 分析 为了得到数组 nums 中的最长交替子数组的长度,需要分别计算以每个下标结尾的最长交替子数组的长度。为了方便处理,计算过程中需要考虑长度等于 1 的最长交替子数组,再返回结果时判断最长交替子数组的长度…

本地的网站建设网站开发推广招聘

这里写目录标题前言mysql8.0的新特性1、账户安全2、优化器索引2.1、隐藏索引(invisible)2.2、降序索引2.3、函数索引3、SQL语句增强4、新增数据分析函数5、InnoDB增强5.1、优化了一些元数据文件5.2、将系统表mysql和数据字典表,全部改为InnoD…