写点什么

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

  • 2022 年 6 月 17 日
  • 本文字数:2090 字

    阅读完需:约 7 分钟

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 使用说明

  1. 解压下载包

  2. 命令行执行(需要jdk环境)


   java -jar ApkSigner.jar [-appname test] -keystore keystorePath -alias alias [-pswd password] [-aliaspswd aliasPassword] apkPath(or directory)
复制代码


注意⚠️:签名之后,如果需要进行对齐操作,请调用命令: zipalign -f 4 in.apk out.apkzipalign 这个程序在 android sdk 有提供。


(可选)android7.0及之后的 apk,可以采用v2签名,提高apk安装速度。但是为了兼容android7.0之前的系统,也需要进行v1签名,且需要先进行v1签名,apk 字节对齐(可选),再进行v2签名。具体步骤命令如下:


  1. java -jar ApkSigner.jar [-appname test] -keystore keystorePath -alias alias [-pswd password] [-aliaspswd aliasPassword] -v1 true -v2 false in.apk

  2. zipalign -c -f [alignmentSize] in.apk out.apk (可选)

  3. 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 路径或者目录路径 ,如果跟的是目录则是批量签名;

  • v1 true(默认)表示使用 v1 签名模式,false 表示不使用;

  • v2 true 表示使用 v2 签名模式,false(默认)表示不适用;

3.2 V1、V2 签名方案

3.2.1 v1 签名

Android 7.0 (即 Android N,Android Api 24) 以下的版本,只能使用旧签名方案,也就是 v1 签名。


v1 签名使用 JDKjarsigner 工具,对 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

jarsignerJDK 提供的针对 jar 包签名的工具,如果你本地已经安装了 Java 环境,会自带 jarsigner


比如我的 jarsigner 工具的位置在


/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home/bin/jarsigner
复制代码


效果图如下:


3.3.2 apksigner

apksignerGoogle 官方提供的针对 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 工具默认同时使用 v1v2 签名,以兼容 Android 7 以下的系统版本。


签名后如果包能正确安装到手机(无需运行)则没有问题,如果安装失败请用命令安装:adb install apkfile 查看出错信息。

四、拓展阅读

发布于: 刚刚阅读数: 8
用户头像

No Silver Bullet 2021.07.09 加入

岂曰无衣 与子同袍

评论

发布
暂无评论
InfoQ 极客传媒 15 周年庆征文|跨平台应用开发进阶(二十二) :uni-app Android APP上线准备工作汇总_前端_No Silver Bullet_InfoQ写作社区