Untiy 2017.2.0f3:无法构建安卓apk错误:CommandInvokationFailure:无法签署APK包

时间:2017-10-13 10:50:07

标签: android unity3d sdk unity5

我正在尝试为我的应用构建测试。当我构建应用程序时,我收到以下错误

 CommandInvokationFailure: Failed to sign APK package.
 C:\Program Files (x86)\Android\android-sdk\build-tools\26.0.2\apksigner.bat sign --ks "D:/Programming/UnityProjects/MobileProject-resortTycoon/user.keystore" --ks-pass stdin  --ks-key-alias "test123" --key-pass stdin  "D:\Programming\UnityProjects\MobileProject-resortTycoon\Temp/StagingArea/Package.apk"

 stderr[
 Error: keywords 'java|openjdk version' not found in 'picked up java_tool_options: -df'
 Error: keywords 'java|openjdk version' not found in 'picked up java_tool_options: -df'
 Failed to load signer "signer #1"
 java.io.IOException: Invalid keystore format
     at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:658)
     at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:56)
     at sun.security.provider.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:224)
     at sun.security.provider.JavaKeyStore$DualFormatJKS.engineLoad(JavaKeyStore.java:70)
     at java.security.KeyStore.load(KeyStore.java:1445)
     at com.android.apksigner.ApkSignerTool$SignerParams.loadKeyStoreFromFile(ApkSignerTool.java:829)
     at com.android.apksigner.ApkSignerTool$SignerParams.loadPrivateKeyAndCertsFromKeyStore(ApkSignerTool.java:719)
     at com.android.apksigner.ApkSignerTool$SignerParams.loadPrivateKeyAndCerts(ApkSignerTool.java:659)
     at com.android.apksigner.ApkSignerTool$SignerParams.access$500(ApkSignerTool.java:611)
     at com.android.apksigner.ApkSignerTool.sign(ApkSignerTool.java:266)
     at com.android.apksigner.ApkSignerTool.main(ApkSignerTool.java:89)
 Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
 ]
 stdout[
 Keystore password for signer #1: 
 ]
 exit code: 2
 UnityEditor.Android.Command.WaitForProgramToRun (UnityEditor.Utils.Program p, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)
 UnityEditor.Android.Command.RunWithStdin (System.Diagnostics.ProcessStartInfo psi, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg, System.String[] input)
 UnityEditor.Android.PostProcessor.Tasks.TasksCommon.Exec (System.String command, System.String args, System.String workingdir, System.String errorMsg, System.String[] stdin)
 UnityEditor.Android.PostProcessor.Tasks.BuildAPK.SignPackage (UnityEditor.Android.PostProcessor.PostProcessorContext context)
 UnityEditor.Android.PostProcessor.Tasks.BuildAPK.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context)
 UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context)
 UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

我已经尝试重新安装Android SDK并将其更新到最新版本,下载不同的Android版本,使用新的gradle而不是内部。没有任何效果。在寻找解决方案2天后,我仍然不知道如何解决这个问题。有人能帮我吗?非常感谢!

2 个答案:

答案 0 :(得分:0)

您的密钥库似乎存在问题,而不是sdk。我不知道你是否知道密钥库是什么,所以你走了:

密钥库是一个充当"密码"的文件。为您的应用程序。例如,谷歌播放不允许您更新您的应用,除非更新是使用与您的应用相同的密钥库进行签名的。无论您做什么,在发布应用程序后都不要丢失密钥库。

如果您还没有为您的应用生成一个密钥库,您可以统一生成一个密钥库:https://forum.unity.com/threads/android-signing.62137/

如果您已经拥有密钥库,那么它很可能会以某种方式损坏。如果您已经在某个地方发布了应用程序,我希望您有备份。如果不只是生成一个新的密钥库

答案 1 :(得分:0)

我不知道为什么,但我能够解决我的问题。当我安装Java JDK时,它安装了2个文件夹。 Unity自动选择了一个名为" jdk-9"的文件夹。当我把它改成" jdk1.8.0_131"我能够构建我的应用程序。

如果知道为什么会这样,我会很高兴知道!