Cordova android打包升级更新流程

1,704 阅读5分钟

Cordova android打包升级更新流程

Android app 的打包流程大致分为 build , align , sign 三部分。

build

build 是构建 APK 的过程,分为 debugrelease 两种。release 是发布到应用商店的版本。

  • debug:
cordova build android

如果成功的话,你可以在你项目下的 platforms/android/app/build/outputs/apk/debug 目录下看到一个app-debug.apk的文件。

image.png

  • release:
cordova build android --release

如果成功,你可以在你项目下的 platforms/android/app/build/outputs/apk/release/  目录下看到一个 android-release-unsigned.apk 的文件。

image.png

align

我们可以使用zipalign工具对安装包进行对齐优化,这样能够让应用程序和整个系统运行得更快。 zipalign使用了4字节的边界对齐方式来影射内存,通过空间换时间的方式提高执行效率。

  • 对apk对齐优化签名的apk放到zipalign.exe所在的文件夹(找不到的话可以电脑搜索一下)

image.png

image.png

image.png 执行命令: 

zipalign -f -v 4 app-release-unsigned.apk sunfoundercontroller-align.apk
参数作用
-f代表覆盖存在的输出文件
-v代表详细输出
4代表对齐为4个字节
app-release-unsigned.apk需要优化的APK
sunfoundercontroller-align.apk优化后的APK
  • 检查apk有没有zipalign对齐 执行命令:
zipalign -c -v 4 被检查的apk文件

image.png

注意:zipalign可以在V1签名后执行,但zipalign不能在V2签名后执行,只能在V2签名之前执行!!!

image.png

sign

签名之前你得有一个数字签名文件( .keystore),打包升级要用回之前发布的秘钥,之后借助签名工具jarsignerapksigner签名。

jarsigner

jarsigner是JDK提供的针对jar包签名的通用工具,位于JDK/bin/jarsigner.exe

image.png

  • 对apk签名:
jarsigner -verbose -keystore D:\stjc\sunfounderControllerPrivatekey\mydemo.keystore -signedjar D:\stjc\sunfounderControllerPrivatekey\apk\sunfoundercontroller-release.apk D:\stjc\sunfounderControllerPrivatekey\apk\app-release-unsigned.apk mydemo.keystore
参数作用
-verbose[:suboptions]签名/验证时输出详细信息。子选项可以是 all, grouped 或 summary
-keystore密钥库位置
-signedjar已签名的 JAR 文件的名称
  • 验证签名是否成功
jarsigner -verify my_application_signed.apk

image.png

apksigner

apksigner是Google官方提供的针对Android apk签名及验证的专用工具,位于Android SDK/build-tools/SDK版本/apksigner.bat

image.png 从Android 7.0开始, 谷歌增加新签名方案 V2 Scheme (APK Signature);但Android 7.0以下版本, 只能用旧签名方案 V1 scheme (JAR signing)。

image.png

  • V1和V2签名的区别: 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签名优点很明显:
①签名更安全(不能修改压缩包)
②签名验证时间更短(不需要解压验证),因而安装速度加快

注意: apksigner工具默认同时使用V1和V2签名,以兼容Android 7.0以下版本

  • 对apk签名:
apksigner sign --ks mydemo.keystore --ks-key-alias  mydemo.keystore --v1-signing-enabled true --v2-signing-enabled true sunfoundercontroller-align.apk 
参数作用
--ks filename签名者的私钥和证书链包含在给定的基于 Java 的密钥库文件中。如果文件名设为 "NONE",则包含密钥和证书的密钥库不需要指定文件,某些 PKCS#11 密钥库就是这种情况。
--ks-key-alias alias表示签名者在密钥库中的私钥和证书数据的别名的名称。如果与签名者关联的密钥库包含多个密钥,则必须指定此选项。
--v1-signing-enabled true/false表示签名者在密钥库中的私钥和证书数据的别名的名称。如果与签名者关联的密钥库包含多个密钥,则必须指定此选项。
--v2-signing-enabled true/false确定 apksigner 是否会使用 APK 签名方案 v2 为给定的 APK 软件包签名。默认情况下,该工具会使用 --min-sdk-version 和 --max-sdk-version 的值来决定何时采用此签名方案。

更多参数请参考:developer.android.com/studio/comm…

一些错误

解析包时出现错误

(1)安卓apk程序解析包出现问题的话,可能是由于你下载的apk程序本身就有问题,程序的压缩包可能在下载过程中被损坏了,建议请重新下载一次。

(2)如果重新下载也解决不了安卓解析包出现问题的话,很大一个可能就是在于你的手机的配置参数不支持这款软件,举个例子吧,如果一款apk程序的系统版本要求在安卓2.2以上,而你的手机则是安卓2.1系统,就会出现“解析包时出现问题”这样的解析错误。

(3)apk版本不兼容。一般情况下当从网上下载的apk程序版本比当前设备的版本高时,就会在安装程序时出现“解析包时出现错误”的警告。

(4)apk程序不完整。有些设备自带的下载工具不具有断点续传功能,因而下载的程序可能发生下载不完全、程序部分先失等情况。对于这类问题,建议重新下载正版完整的安装包文件。

(5)当前设备不支持中文名称或路径,不支持长文件名。解决办法是将文件重命名,名称只包含英文字母(但要注意".apk"的后辍名是要保留的),如更名为“abc.apk”等,更改完成后再次运动安装程序。

如果是apk版本太高的话,修改一下platforms/android/build.gradle文件下的defaultMinSdkVersion

image.png