Unity 未能构建 apk Android



我遵循了Unity"坦克!"教程,现在我正在尝试在Android上移植游戏,这是我第一次在Unity上移植,现在当它要构建APK时,unity告诉我"无法构建APK",然后我得到一些错误,我附上我认为这是致命的错误,请告诉我它有什么问题。

CommandInvokationFailure: Failed to build apk.
C:/Program Files/Java/jdk-9.0.1binjava.exe -Xmx2048M -D com.android.sdkmanager.toolsdir="C:/Android_SDKtools" -D file.encoding=UTF8 -jar "C:Program FilesUnityEditorDataPlaybackEnginesAndroidPlayer/Toolssdktools.jar"-
stderr[
Exception in thread "main" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at SDKMain.main(SDKMain.java:130)
Caused by: java.lang.NoClassDefFoundError: sun/misc/BASE64Encoder
at com.android.sdklib.internal.build.SignedJarBuilder.<init>(SignedJarBuilder.java:177)
at com.android.sdklib.build.ApkBuilder.init(ApkBuilder.java:446)
at com.android.sdklib.build.ApkBuilder.<init>(ApkBuilder.java:422)
at com.android.sdklib.build.ApkBuilder.<init>(ApkBuilder.java:362)
at UnityApkBuilder.<init>(UnityApkBuilder.java:214)
at UnityApkBuilder.main(UnityApkBuilder.java:34)
... 5 more
Caused by: java.lang.ClassNotFoundException: sun.misc.BASE64Encoder
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:466)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:563)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
... 11 more
]
stdout[
]
exit code: 1
UnityEditor.Android.Command.WaitForProgramToRun (UnityEditor.Utils.Program p, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)
UnityEditor.Android.Command.Run(System.Diagnostics.ProcessStartInfo psi, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)
UnityEditor.Android.AndroidSDKTools.RunCommandInternal (System.String javaExe, System.String sdkToolsDir, System.String[] sdkToolCommand, Int32 emoryMB, System.String workingdir, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)
UnityEditor.Android.AndroidSDKTools.RunCommandSafe (System.String javaExe, System.String sdkToolsDir, System.String[] sdkToolCommand, Int32 emoryMB, System.String workingdir, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)

如果在应用程序上执行jdeps,您将能够看到sun.misc.BASE64Encoder已被弃用,并且可以替换为自 JDK 1.8 以来存在的java.util.Base64

迁移指南也阅读了以下内容:

JDK 9 中删除了一些sun.*API。特别是sun.misc.BASE64Encoder 和sun.misc.BASE64Decoder已被删除。 请改用受支持的java.util.Base64类,该类已添加到 爪哇SE 8.


在您的情况下,由于您依赖第三方(android sdktools),而第三方本身尚未解决此问题。恐怕您可能不得不坚持使用 1.8,同时,一旦他们计划迁移他们的工件,就可以向他们的跟踪器报告这一点。

当然,这也意味着如果他们计划发布,您必须在某个时间点升级到使用他们的 Java 9 兼容版本的 jar

更新 :可以在Unity#956425上跟踪此内容以获取进一步更新。

最新更新