【问题标题】:Unity Failed to Build apk AndroidUnity 无法构建 apk Android
【发布时间】:2018-04-09 06:02:23
【问题描述】:

我跟随统一的“坦克”!教程,现在我正在尝试将游戏移植到 Android 上,这是我第一次在 Unity 上,现在当它要构建 APK 时,统一告诉我“构建 APK 失败”,然后我收到一些错误,我附上你我认为这是致命的错误,请告诉我它有什么问题。

CommandInvokationFailure: Failed to build apk.
C:/Program Files/Java/jdk-9.0.1\bin\java.exe -Xmx2048M -D com.android.sdkmanager.toolsdir="C:/Android_SDK\tools" -D file.encoding=UTF8 -jar "C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\sdktools.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)

【问题讨论】:

    标签: c# android unity3d sdk java-9


    【解决方案1】:

    如果您在应用程序上执行jdeps,您将能够看到sun.misc.BASE64Encoder 已被弃用,可以用java.util.Base64 替换,它自JDK 1.8 起就存在。。 p>

    migration guide 也读到了这个:

    JDK 9 中删除了一些 sun.* API。值得注意的是, sun.misc.BASE64Encoder 和 sun.misc.BASE64Decoder 已被删除。 相反,请使用支持的 java.util.Base64 类,该类已添加到 Java SE 8。


    在您的情况下,由于您依赖第三方(android sdktools),他们自己还没有解决这个问题。恐怕你可能不得不坚持使用 1.8,与此同时,一旦他们计划迁移他们的工件,就可以将这报告给他们的跟踪器。

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

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

    【讨论】:

    • 有人应该向 Android SDK 提交错误以修复此依赖关系,否则它将无法在新的 JDK 上运行。
    • @AlanBateman Ya 同意了。让我深入挖掘一下是否已经存在这样的错误。否则,将提交一份并更新答案。
    • 我没有使用任何jdk代码,也许我应该下载jdk 8?因为我认为它不受团结的支持......
    • sun.misc.BASE64* 始终是 JDK 内部的,从未记录过。终于在 JDK 9 中删除了。没有秘密标志可以让它回来。
    • 使用 JDK 8 解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    相关资源
    最近更新 更多