最近给游戏出包,平台要求 v1 签名吧,AS 打包后,adb 执行安装到手机,我用的设备是google pixel6 , android 系统 13, 提示如下:
adb install -r v5_android_202308161046.apk
Performing Streamed Install
adb: failed to install /Users/Project/GitLab/tank/androidhtc/app/release/v5_android_202308161046.apk: Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Scanning Failed.: No signature found in package of version 2 or newer for package com.test.android]
字面意思理解就是安装包没有 V2 或更高等级的签名。我又尝试在三星平板android系统 8 上安装,咦,安装成功了。那可能就是跟设备 Api 版本有关系了。然后在官网找,看到了android 11(api 30)的新特性。官网地址:https://developer.android.com/about/versions/11/behavior-changes-11?hl=zh-cn
android 11里面有一项应用打包和安装:
一、压缩的资源文件
如果以 Android 11(API 级别 30)或更高版本为目标平台的应用包含压缩的**resources.arsc
文件或者如果此文件未按 4 字节边界对齐** ,应用将无法安装。如果存在其中任意一种情况,系统将无法对此文件进行内存映射。无法进行内存映射的资源表必须读入 RAM 中的缓冲区,从而给系统造成不必要的内存压力,并大大增加设备的 RAM 使用量。
二、现在需要 APK 签名方案 v2
对于以 Android 11(API 级别 30)为目标平台,且目前仅使用 APK 签名方案 v1 签名的应用,现在还必须使用 APK 签名方案 v2 或更高版本进行签名。用户无法在搭载 Android 11 的设备上安装或更新仅通过 APK 签名方案 v1 签名的应用。
注:如需验证您的应用是否已使用 APK 签名方案 v2 或更高版本进行签名:
apksigner verify -v test.apk
大概意思是 targetSdk 30及以上需要 v2 签名
解决方案:targetSdk 版本调整成 29 解决