更新时间:2023-08-14 18:00:56
今天游戏包和渠道包合并,成功回编生成apk之后,采用zipalign对齐优化,然后采用打包工具jarsigner签名。
def Sign_haveback(input,signFile): if len(signFile)==0: signFile = default_signFile output = input.split('.')[0] + '_sign.apk' print(output) order = jdkroot + '/bin/jarsigner -verbose -keystore ' + signFile + " -signedjar " + output + " " + input + " " + default_account + " -storepass " + default_password ResultFile = os.system(order) if ResultFile == 0: return 'Success' else: return 'Fail'
然后迫不及待地安装,爆出以下错误:
Failed to commit install session 679667849with command cmd package install-commit679667849.Error: -124: Failed parse duringinstallPackageLl: Targeting R+(version 30and above) requires the resources.arsc ofinstalled APKs to be stored uncompressedand aligned on a 4-byte boundary
按照以上失败信息提示:如果以 Android 11(API 级别 30)或更高版本为目标平台的应用包含压缩的 resources.arsc 文件或者如果此文件未按 4 字节边界对齐,应用将无法安装。如果存在其中任意一种情况,系统将无法对此文件进行内存映射。无法进行内存映射的资源表必须读入 RAM 中的缓冲区,从而给系统造成不必要的内存压力,并大大增加设备的 RAM 使用量。
看了下zipalign对齐结果,发现resources.arsc对齐了但是没有压缩,别的都压缩和对齐了
满足的啊,好像没做错啊。
对齐指令如下
zipalign -v 4 F:examplegame-filedistgame.apk game_aligned.apk
做了几遍发现没错,确实resources.arsc对齐了那么也压缩了。回想自己操作步骤,是采用的V1签名。会不会这里有问题,换为V2签名。
java -jar apksigner.jar sign --ks test.jks --ks-key-alias testalias --ks-pass pass:xxx --key-pass pass:xxx --out F:output.apk F:game_aligned.apk
出包测试,这会正常了。
原来采用API30及以上的应用合并的时候除了对齐之外,还要使用v2签名才可以