Skip to content

分包之后报错 APK Signing Block size is not multiple of page size 而且不是必现 同样的工程代码 什么都没变 先是正常的 不知道哪天打包出来就报该错了 #180

Description

@zhangzhen123

这是报错堆栈
apkSize : 110697856
contentEntry : first = java.nio.HeapByteBuffer[pos=0 lim=109719552 cap=109719552] , second = 0
schemeV2Block : first = java.nio.HeapByteBuffer[pos=0 lim=16384 cap=16384] , second = 109719552
centralDir : first = java.nio.HeapByteBuffer[pos=0 lim=961898 cap=961898] , second = 109735936
eocd : first = java.nio.HeapByteBuffer[pos=0 lim=22 cap=22] , second = 110697834
generatedChannelApk , channel = YDSB22 , apkChannelName = YDSB22-yitian_release_R_9.12.12_31111_260105150826.apk
generateApkSigningBlock , needPadding = false
addIdValueByteBufferMap , oldApkSigningBlock size = 16384 , newApkSigningBlock size = 16402
addIdValueByteBufferMap , after add channel , new apk is F:\workplace6\walle\cmd\output\YDSB22-yitian_release_R_9.12.12_31111_260105150826.apk , length = 110697874
try to read channel info from apk : F:\workplace6\walle\cmd\output\YDSB22-yitian_release_R_9.12.12_31111_260105150826.apk
getByteBufferValueById , destApk F:\workplace6\walle\cmd\output\YDSB22-yitian_release_R_9.12.12_31111_260105150826.apk IdValueMap = {1896449818=java.nio.HeapByteBuffer[pos=0 lim=1658 cap=1658], 1347109971=java.nio.HeapByteBuffer[pos=0 lim=14670 cap=14670], -2012129793=java.nio.HeapByteBuffer[pos=0 lim=6 cap=6]}
getByteValueById , id = -2012129793 , value = java.nio.HeapByteBuffer[pos=0 lim=6 cap=6]
generatedChannelApk destFile(F:\workplace6\walle\cmd\output\YDSB22-yitian_release_R_9.12.12_31111_260105150826.apk)add channel success
generatedChannelApk error , please check it and fix it ,and that you should generate all Channel Apk again!
java.lang.RuntimeException: APK Signing Block size is not multiple of page size: 16402
at com.android.apksig.internal.apk.ApkSigningBlockUtils.verifyIntegrity(ApkSigningBlockUtils.java:204)
at com.android.apksig.internal.apk.v2.V2SchemeVerifier.verify(V2SchemeVerifier.java:159)
at com.android.apksig.internal.apk.v2.V2SchemeVerifier.verify(V2SchemeVerifier.java:113)
at com.android.apksig.ApkVerifier.verify(ApkVerifier.java:243)
at com.android.apksig.ApkVerifier.verify(ApkVerifier.java:126)
at com.tencent.vasdolly.verify.VerifyApk.getVerifierResult(VerifyApk.java:44)

对比了正常分包的日志 只要是needPadding = false时就必失败 但是签名块是否有verity padding块 完全是不可控的 而vasdolly又高度依赖这个padding 不然注入渠道后 签名块长度必变动 一旦变动就百分百不会被4096整除 就校验报错了 包括walle也是同样的问题 所以 真的希望作者能做下兼容 可能这个项目很久都没人维护了 我们也本可以换个分包方式避开vasdolly walle这些工具 但是避不开第三方使用啊 特别是一些广告推广 他们使用的就是这两个 ,一旦分包报错了 我们这边又无能为力,完全没法兼容,因为这东西并不可控,有什么好的解决办法吗?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions