Untiy 2017.2.0f3: cant build android apk error: CommandInvokationFailure: Failed to sign APK package
Untiy 2017.2.0f3: cant build android apk error: CommandInvokationFailure: Failed to sign APK package
我正在尝试为我的应用构建测试。当我构建应用程序时,出现以下错误
CommandInvokationFailure: Failed to sign APK package.
C:\Program Files (x86)\Android\android-sdk\build-tools.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.access0(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 天后,我仍然不知道如何解决这个问题。有人能帮我吗?非常感谢!
您的密钥库似乎有问题,而不是 sdk。不知道大家知不知道什么是keystore,下面是:
密钥库是一个文件,其作用类似于您的应用程序的 "password"。 Google 例如,play 不会让您更新您的应用程序,除非更新使用与您的应用程序相同的密钥库进行签名。无论您做什么,都不要在发布应用程序后丢失密钥库。
如果您还没有为您的应用程序生成密钥库,您可以统一生成一个:https://forum.unity.com/threads/android-signing.62137/
如果您已经有一个密钥库,它很可能不知何故被破坏了。如果您已经在某个地方发布了您的应用程序,我希望您有一个备份。如果不只是生成一个新的密钥库
我不知道为什么,但我能够解决我的问题。当我安装 Java JDK 时,它安装了 2 个文件夹。 Unity 自动选择了 1 个名为 "jdk-9" 的文件夹。当我将其更改为 "jdk1.8.0_131" 时,我能够构建我的应用程序。
如果有人知道为什么会这样,我会很高兴知道!
我正在尝试为我的应用构建测试。当我构建应用程序时,出现以下错误
CommandInvokationFailure: Failed to sign APK package.
C:\Program Files (x86)\Android\android-sdk\build-tools.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.access0(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 天后,我仍然不知道如何解决这个问题。有人能帮我吗?非常感谢!
您的密钥库似乎有问题,而不是 sdk。不知道大家知不知道什么是keystore,下面是:
密钥库是一个文件,其作用类似于您的应用程序的 "password"。 Google 例如,play 不会让您更新您的应用程序,除非更新使用与您的应用程序相同的密钥库进行签名。无论您做什么,都不要在发布应用程序后丢失密钥库。
如果您还没有为您的应用程序生成密钥库,您可以统一生成一个:https://forum.unity.com/threads/android-signing.62137/
如果您已经有一个密钥库,它很可能不知何故被破坏了。如果您已经在某个地方发布了您的应用程序,我希望您有一个备份。如果不只是生成一个新的密钥库
我不知道为什么,但我能够解决我的问题。当我安装 Java JDK 时,它安装了 2 个文件夹。 Unity 自动选择了 1 个名为 "jdk-9" 的文件夹。当我将其更改为 "jdk1.8.0_131" 时,我能够构建我的应用程序。
如果有人知道为什么会这样,我会很高兴知道!