”只用 1 分钟“ - 超简极速 Apk 签名 & 多渠道打包神器
众所周知,渠道包作为当下国内 Android 应用市场常见的分发方式,当 APP 和后台交互或进行数据上报时,会带上各自的 channel 渠道信息,以此方便企业 & 开发者统计 APP 在各渠道的下载量、用户量、留存率等关键活跃数据,并针对性的调整应用内容和推广方案。而 Android 应用市场存在大大小小几百个商店,每当需要发布 APP 或迭代新版本,往往需要开发者生成多个渠道包或是在各应用市场重新分发,且官方提供的 ProductFlavor 多渠道打包工具,对于每一个渠道包,都需要进行一次完整的 APK 打包过程,对于注重效率的开发者而言整个环节其实相当耗时,是否有更好的多渠道签名打包方案呢?
近期,顶象技术团队开源了自己的 Android apk 打包工具,精简,高效,应用开发者需要的多渠道打包神器来了!
顶象 Apk 签名和多渠道打包工具
下载后的包内文件:
一.签名功能简介
我们先来看看 V1 和 V2 签名的区别:
在 Android Studio 中点击菜单 Build->Generate signed apk... 打包签名有两种签名选项 V1 (Jar Signature) V2 (Full APK Signature),**
从 Android 7.0 开始,谷歌增加新签名方案 V2 Scheme (APK Signature);
但 Android 7.0 以下版本,只能用旧签名方案 V1 scheme (JAR signing)
V1 签名:
- 来自 JDK (jarsigner), 对 zip 压缩包的每个文件进行验证,签名后还能对压缩包修改 (移动 / 重新压缩文件)
- 对 V1 签名的 apk/jar 解压,在 META-INF 存放签名文件 (MANIFEST.MF, CERT.SF, CERT.RSA),
- 其中 MANIFEST.MF 文件保存所有文件的 SHA1 指纹 (除了 META-INF 文件), 由此可知: V1 签名是对压缩包中单个文件签名验证
V2 签名:
- 来自 Google (apksigner), 对 zip 压缩包的整个文件验证,签名后不能修改压缩包 (包括 zipalign),
- 对 V2 签名的 apk 解压,没有发现签名文件,重新压缩后 V2 签名就失效,由此可知: V2 签名是对整个 APK 签名验证
V2 签名优点很明显:
- 签名更安全 (不能修改压缩包)
- 签名验证时间更短 (不需要解压验证), 因而安装速度加快
顶象 apk 签名工具默认同时使用 V1+V2 签名方式,用于对 android 加固后的 apk 进行重新签名。
启用工具界面:
使用说明:
- 下载顶象签名工具 dx-signer.jar,双击运行。
- 选择输入 apk、aab 文件。
- 选择签名的 key 文件,并输入 key 密码。
- 选择重签后 apk、aab 的路径,以 apk 结束。如:D:\sign.apk
- 点击 “签名” 按钮,等待即可签名完成。
ps: 如果有 alias(证书别名)密钥的或者有多个证书的,请在高级 tab 中选择 alias 并输入 alias 密码
命令行界面:
支持的 option 如下:
例如:
二.多渠道功能简介
顶象多渠道工具兼容友盟和美团 walle 风格的多渠道包,方便客户把 APP 发布到不同的应用平台,进行渠道统计。
使用说明:
- 在 app 中预留读取渠道信息的入口,具体见读取渠道信息
- 在签名使用基础上,点击选择渠道清单
- 选择清单文件 channel.txt。具体文件格式见渠道格式文件说明
- 点击签名,等待生成多个带签名的渠道 app
读取渠道信息:
顶象多渠道工具兼容友盟和美团 walle 风格的多渠道包,下面是两种不同风格的渠道信息读取方法。选其中之一即可。
您可以读取这个字段。
渠道文件格式说明
请准备渠道清单文件 channel.txt, 格式为每一行一个渠道, 例如:
License
三.常见问题:
关于 app 签名:
Q: app 签名是什么?
A: 签名就是用于识别 app 开发者,并保证 apk 完整性的一个机制,谷歌要求每一个 app 都需要有签名。
Q: 为什么上传的 app 需要有签名?
A: 加固有防二次打包的功能,需要提前 apk 原本的签名,供加固后验证签名正确性用。
Q: 在 androidstudio 中打出的 debug 版本包,可以加固吗?
A: 不建议用 debug 版本包加固,因为 debug 版本的包使用的是 androidstudio 的 debug 签名,可能导致加固后无法重签名,或者签错名的情况。导致无法正常运行。
关于加固后重签名:
Q: 上传之前 apk 已经签过名了,为什么加固后又要重新签一次?
A: 加固之后会破坏 apk 原有的签名,所以需要重新签名,否则无法安装。
Q: 为什么重签名需要和加固前保持一致?
A: 如果不保持一致,则会触发加固的防二次打包功能,无法正常运行。
”只用 1 分钟“ - 超简极速 Apk 签名 & 多渠道打包神器的更多相关文章
- 柔弱的APP如何自我保护,浅谈APP防御手段,使用360加固助手加固/签名/多渠道打包/应用市场发布
柔弱的APP如何自我保护,浅谈APP防御手段,使用360加固助手加固/签名/多渠道打包/应用市场发布 由于JAVA和Android的平台型,所以APP很容易被反编译,这对于我们开发者来说,是一个不想要 ...
- Android apk逆向:反编译,回编译,签名,打包。
Android apk逆向:反编译,回编译,签名,打包流程. 第一步: apk 反编译. 1) 打开命令行窗口,输入java -version, 检测当前java版本,若版本较低, 则下载JAVA S ...
- Android中APK签名工具之jarsigner和apksigner详解
一.工具介绍 jarsigner是JDK提供的针对jar包签名的通用工具, 位于JDK/bin/jarsigner.exe apksigner是Google官方提供的针对Android apk签名及验 ...
- [转]Android APK签名原理及方法
准备知识:数据摘要 这个知识点很好理解,百度百科即可,其实他也是一种算法,就是对一个数据源进行一个算法之后得到一个摘要,也叫作数据指纹,不同的数据源,数据指纹肯定不一样,就和人一样. 消息摘要算法(M ...
- Android5.1.1 - APK签名校验分析和修改源码绕过签名校验
Android5.1.1 - APK签名校验分析和修改源码绕过签名校验 作者:寻禹@阿里聚安全 APK签名校验分析 找到PackageParser类,该类在文件“frameworks/base/cor ...
- eclipse将android项目生成apk并且给apk签名
转载:http://www.cnblogs.com/tianguook/archive/2012/09/27/2705724.html 生成apk最懒惰的方法是:只要你运行过android项目,到工作 ...
- 关于APK签名的一些东西
什么是APK 了解APK签名之前,首先要知道什么是apk文件:APK是AndroidPackage的缩写,即Android安装包(apk),APK文件其实就是zip格式的文件,只是后缀被改为了apk, ...
- Android APK 签名 (转发)
Cordova 3.5 为 Android APK 签名,生成可发布的 APK 程序文件 任侠 2014-06-07 00:04 移动开发 抢沙发 16,288 views 目录 [隐藏] ...
- 一次简单的绕过apk签名校验
朋友发来一个apk,需要分析其中的一些算法,分析过程涉及到了重新打包apk,打包后的apk运行失败,估计是apk内部有检验是否被篡改的代码.检验apk是否被篡改,简单的方法是直接校验签名,如果apk签 ...
随机推荐
- power app 解决方案中表导入问题
我们在powerapp中导出的表,解压后是会是乱码,导致在导入的时候会失败,或者导入数据不全. 使用 2 但是直接导入也会是乱码,所以需要将文件重新保存一下: 首先新建一个excel 选择要导入的那个 ...
- Django-初见
目录 安装&启动 HTTP请求URL路由 项目APP 返回 页面内容 给浏览器 路由 路由子表 创建数据库 定义数据库表 创建数据库表 Django Admin 读取数据库数据 过滤条件 对资 ...
- Android C/C++层hook和java层hook原理以及比较
作者:Denny Qiao(乔喜铭),云智慧/架构师. 云智慧集团成立于2009年,是全栈智能业务运维解决方案服务商.经过多年自主研发,公司形成了从IT运维.电力运维到IoT运维的产业布局,覆盖ITO ...
- Exception in thread "main" java.awt.AWTError: Assistive Technology not found: org.GNOME.Accessibilit
系统环境 Ubuntu 20.04 focal 问题分析 该异常出现的原因,从谷歌上可以得到答案 one of the more common causes of this exception is ...
- C++ 类成员指针
C++的类成员指针是一种奇葩的指针. 假设现在我们要表示一个三维的点,现在有两种定义方式: struct point1{ int x, y, z; }; struct point2{ int c[3] ...
- 看看JDK1.7与1.8的内存模型差异
JDK1.7与1.8的区别的内存模型差异? jsk1.7的内存模型: 堆分为初生代和老年代,大小比例为1:2,初生代又分为eden.from.to三个区域,大小比例为8:1:1 方法区:有代码区.常量 ...
- 【Git】一台电脑与多个分布式版本管理平台连接
六. 一台电脑与多个版本控制平台 1. 一台电脑同时通过ssh连接github和码云gitee 打开git bash 进入.ssh cd ~/.ssh 分别生成两个平台的公钥和私钥 $ ssh-key ...
- Vert.X CompositeFuture 用法
CompositeFuture 是一种特殊的 Future,它可以包装一个 Future 列表,从而让一组异步操作并行执行:然后协调这一组操作的结果,作为 CompositeFuture 的结果.本文 ...
- 面试官问:浏览器输入 URL 回车之后发生了什么?
一个执着于技术的公众号 前言 这个问题已经是老生常谈了,更是经常被作为面试的压轴题出现,网上也有很多文章,但最近闲的无聊,然后就自己做了一篇笔记,感觉比之前理解更透彻了. 注意:本文的步骤是建立在,请 ...
- python使用虚拟环境venv
venv模块支持使用自己的站点目录创建轻量级"虚拟环境",可选择与系统站点目录隔离.每个虚拟环境都有自己的Python二进制文件(与用于创建此环境的二进制文件的版本相匹配),并且可 ...