Unity apk打包失败的解决方法

Posted qq_45870222

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity apk打包失败的解决方法相关的知识,希望对你有一定的参考价值。

1.遇到无法打包首先检查一下Edit-External Tools-android下的JDK、SDK、NDK、Gradle是否下载完整

2.遇到

打包安卓APK 时报错:

Configure project :launcher
WARNING: The option ‘android.enableR8’ is deprecated and should not be used anymore.
It will be removed in a future version of the Android Gradle plugin, and will no longer allow you to disable R8.
请查看
原文链接:Unity发布安卓 :launcherWARNING: The option setting ‘android.enableR8=false‘ is depre - 游戏编程 🕹️ (233tw.com)

3.遇到

Failed to query the value of task 'xx:compileDebugJavaWithJavac'

要保证自己的gradle的版本和build:gradle相匹配,比如我的com.android.tools.build:gradle:4.0.1要与gradle6.1.1匹配

gradle下载链接Gradle Distributions

4.遇到

building gradle project 卡住(>20分钟)

        (1)修改E:\\Unity1\\Editor\\2020.3.24f1c2\\Editor\\Data\\PlaybackEngines\\AndroidPlayer\\Tools\\GradleTemplates\\gradleTemplate.properties里的内容

        或者

        (2)下载新的gradle,同时将他安装在Edit-External Tools-Gradle Installed with Unity所对应的目录下

Unity打包apk提审应用宝渠道提示暂不支持APK Signature Scheme v2的解决办法

一、问题描述

Unity项目打包apk提审应用宝渠道,提示暂不支持APK Signature Scheme v2,如下:
在这里插入图片描述
记录下解决过程。

二、解决办法

1、查看apk是否含有V2签名

命令:

apksigner verify -v 你的apk文件

运行效果:
在这里插入图片描述
可以看到用了v2v3签名。

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压缩工具,它是开源无广告的,推荐大家使用。

7z官网:https://www.7-zip.org/

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打包失败的解决方法的主要内容,如果未能解决你的问题,请参考以下文章

Unity自动打包 apk

unity打包apk在手机上音乐不正常播放或暂停

Unity3D之导出的Apk安装失败

Unity打包APK 资源分离包

Unity打包apk提审应用宝渠道提示暂不支持APK Signature Scheme v2的解决办法

Unity打包apk提审应用宝渠道提示暂不支持APK Signature Scheme v2的解决办法