我正在尝试为我的应用构建测试。当我构建应用程序时,我收到以下错误
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天后,我仍然不知道如何解决这个问题。有人能帮我吗?非常感谢!
答案 0 :(得分:0)
您的密钥库似乎存在问题,而不是sdk。我不知道你是否知道密钥库是什么,所以你走了:
密钥库是一个充当"密码"的文件。为您的应用程序。例如,谷歌播放不允许您更新您的应用,除非更新是使用与您的应用相同的密钥库进行签名的。无论您做什么,在发布应用程序后都不要丢失密钥库。
如果您还没有为您的应用生成一个密钥库,您可以统一生成一个密钥库:https://forum.unity.com/threads/android-signing.62137/
如果您已经拥有密钥库,那么它很可能会以某种方式损坏。如果您已经在某个地方发布了应用程序,我希望您有备份。如果不只是生成一个新的密钥库
答案 1 :(得分:0)
我不知道为什么,但我能够解决我的问题。当我安装Java JDK时,它安装了2个文件夹。 Unity自动选择了一个名为" jdk-9"的文件夹。当我把它改成" jdk1.8.0_131"我能够构建我的应用程序。
如果知道为什么会这样,我会很高兴知道!