Unity打包apk提审应用宝渠道提示暂不支持APK Signature Scheme v2的解决办法
Posted 林新发
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity打包apk提审应用宝渠道提示暂不支持APK Signature Scheme v2的解决办法相关的知识,希望对你有一定的参考价值。
一、问题描述
Unity
项目打包apk
提审应用宝渠道,提示暂不支持APK Signature Scheme v2
,如下:
记录下解决过程。
二、解决办法
1、查看apk是否含有V2签名
命令:
apksigner verify -v 你的apk文件
运行效果:
可以看到用了v2
和v3
签名。
2、重签名
命令:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 【keystore文件】【你的apk文件】【keystore别名】
运行效果:
嗯?没有成功。
解决办法:把.apk
改为.zip
,进入.zip
内部把META-INF
文件夹删除,然后重新把.zip
改为.apk
,重新执行签名。
最后执行重签成功:
3、写个python自动处理
作为一个懒人,是不能接收手动操作的,写个python
脚本自动处理,把apk
放到下面这个python
统计目录中,执行python
脚本即可。
注:里面我用了7z
压缩工具,它是开源无广告的,推荐大家使用。
python
代码如下:
import os
import subprocess
# 执行命令行
def run_cmd(cmd):
# 常用编码
GBK = 'gbk'
UTF8 = 'utf-8'
# 解码方式,一般 py 文件执行为utf-8 ,cmd 命令为 gbk
current_encoding = GBK
# 构造popen
p = subprocess.Popen(cmd, shell = True,
stdout = subprocess.PIPE,
stderr = subprocess.PIPE)
# 执行
while True:
line = p.stdout.readline()
if not line:
break
print(line)
# 遍历apk文件
def walk_apks():
for root, dirs, fs in os.walk('.'):
for f in fs:
if f.endswith('.apk'):
yield os.path.join(root, f)
# 使用7z工具把zip中的目标文件删除,你可以改成winrar或者好压等工具
def zip_del_file(apk_f, del_f):
print('zip_del_file:', apk_f, del_f)
zip_f = apk_f.replace('.apk', '.zip')
os.rename(apk_f, zip_f)
run_cmd("7z d \\"%s\\" %s"%(zip_f, del_f))
os.rename(zip_f, apk_f)
# 重签名
def resign_apk(apk):
keystore = '你的证书.keystore'
pwd = '你的keystore密码'
alias = '证书别名'
cmd = 'jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore %s -storepass %s %s %s'%(keystore, pwd, apk, alias)
run_cmd(cmd)
if __name__ == '__main__':
for apk in walk_apks():
zip_del_file(apk, "META-INF")
resign_apk(apk)
以上是关于Unity打包apk提审应用宝渠道提示暂不支持APK Signature Scheme v2的解决办法的主要内容,如果未能解决你的问题,请参考以下文章
windows下PHP批量生成打包android程序APK-渠道txt植入apk文件