InfoQ 极客传媒 15 周年庆征文|跨平台应用开发进阶 (二十二) :uni-app Android APP 上线准备工作汇总

一、为什么要做安全加固?
应用uni-app开发完成APP应用后,上线前进行安全检测,发现 APP Android 版存在反编译高危漏洞,iOS 版并没有爆出此类问题。
当我们开发的 App 准备做上架应用市场时,应用市场会要求上架的 App 做加固处理,这是为什么呢 ?
首先,来看下腾讯开放平台官方的解释说明
若应用不做任何安全防护,极易被病毒植入、广告替换、支付渠道篡改、钓鱼、信息劫持等,严重侵害开发者的利益。
App 加固后,可以对应用进行安全防护,防止应用分发后,被反编译、调试、盗版、破解、二次打包等威胁,维护开发者的利益。
当然,除了应用加固外,还有其它的安全解决方案如:安全检测(漏洞扫描)、**渠道监控(正盗版分发情况监控)和安全 SDK(专业场景下的安全解决方案)**等。
简单来说就是,如果你不希望自己参与开发的 App 出现以下问题,是免费为别人写的,那就加固吧。
应用程序被破解
核心代码被窃取
恶意代码注入
核心数据泄露
安全检测未合规
二、如何为 App 应用加固?
目前市面上主流的加固方式有 360 加固保,腾讯云乐固,梆梆加固、网易易顿、顶象等等...这些加固平台工作流程基本都是 APK 加固、APP 签名。
网易易顿加固截图信息:
顶象加固截图信息:
腾讯云加固截图信息(果然白嫖的不香~):
加固后效果如下:
三、APP 签名
签名的话,一般使用通用签名工具ApkSigner。
ApkSigner 是 jar 包形式的签名工具,较传统工具签名快很多,适用于Win/Mac/Linux环境。
点击下载
3.1 使用说明
解压下载包
命令行执行(需要
jdk环境)
注意⚠️:签名之后,如果需要进行对齐操作,请调用命令: zipalign -f 4 in.apk out.apk, zipalign 这个程序在 android sdk 有提供。
(可选)android7.0及之后的 apk,可以采用v2签名,提高apk安装速度。但是为了兼容android7.0之前的系统,也需要进行v1签名,且需要先进行v1签名,apk 字节对齐(可选),再进行v2签名。具体步骤命令如下:
java -jar ApkSigner.jar [-appname test] -keystore keystorePath -alias alias [-pswd password] [-aliaspswd aliasPassword] -v1 true -v2 false in.apk
zipalign -c -f [alignmentSize] in.apk out.apk(可选)
java -jar ApkSigner.jar [-appname test] -keystore keystorePath -alias alias [-pswd password] [-aliaspswd aliasPassword] -v1 false -v2 true out.apk
其中,option参数说明:
appname待签名的应用程序名,可选,但建议不同的 APP 填上对应的 app 名(可以为中文),有助于【加速】;
keystore后跟.keystore签名文件;
alias后跟签名别名;
pswd后跟对应签名的密码,例如这里是:android 可选,如果不填,则签名的时候需要手动输入;
aliaspswd对应别名 alias 的密码,如果没有则默认使用keystorePassword,最后跟待签名的 APK 路径或者目录路径 ,如果跟的是目录则是批量签名;
v1true(默认)表示使用 v1 签名模式,false 表示不使用;
v2true 表示使用 v2 签名模式,false(默认)表示不适用;
3.2 V1、V2 签名方案
3.2.1 v1 签名
在 Android 7.0 (即 Android N,Android Api 24) 以下的版本,只能使用旧签名方案,也就是 v1 签名。
v1 签名使用 JDK 的 jarsigner 工具,对 zip 压缩包的每个文件进行验证,签名后仍可对压缩包进行修改、移动、重新压缩文件。
3.2.2 v2 签名
自 Android 7.0 开始,Google 新增了 v2 签名方案。
v2 签名使用 Google 自带的 apksigner 工具,对 zip 压缩包的整个文件进行验证,签名后不能修改压缩包,包括 zipalgin 。
如果你对 v2 签名的 apk 解压,没有发现签名文件,重新压缩后 v2 签名失效,这说明 v2 签名是对整个 Apk 进行签名验证。
3.2.3 v2 签名相对 v1 签名的优点
因为不能修改压缩包,所以
v2签名会更安全。v2签名是对整个Apk进行签名验证,不需要解压验证,所以签名验证的时间会更短。
3.3 jarsigner 与 apksigner
3.3.1 jarsigner
jarsigner 是 JDK 提供的针对 jar 包签名的工具,如果你本地已经安装了 Java 环境,会自带 jarsigner ,
比如我的 jarsigner 工具的位置在
效果图如下:
3.3.2 apksigner
apksigner 是 Google 官方提供的针对 Android Apk 签名和验证的专用工具,位于 Android SDK / build-tools / SDK 版本 / apksigner 。
以我本地的 Android SDK 30.0.2 版本为例, apksigner 工具的位置在/Users/suxing/Library/Android/sdk/build-tools/30.0.2/apksigner 。
效果图如下:
如果你用的是 Android Studio 或者 IDEA ,安装这两个编辑器时会自动下载 Android SDK ,所以 apksigner 工具也不需要另外安装。
不过,无论是 apk 包还是 jar 包,其本质都是 zip 格式的压缩包,如果只针对 v1 签名的话,两者的签名过程其实差不多。
apksigner 工具默认同时使用 v1 和 v2 签名,以兼容 Android 7 以下的系统版本。
签名后如果包能正确安装到手机(无需运行)则没有问题,如果安装失败请用命令安装:adb install apkfile 查看出错信息。
四、拓展阅读
版权声明: 本文为 InfoQ 作者【No Silver Bullet】的原创文章。
原文链接:【http://xie.infoq.cn/article/62ca31313f73f741866eed6ef】。文章转载请联系作者。










评论