【问题标题】:Failed to build APK. See console for details无法构建 APK。详情见控制台
【发布时间】:2019-06-08 22:10:49
【问题描述】:

我已经构建了一个应用程序并在 App Store 上下载了它,现在我正在尝试构建到三星 A3 2016。

我已经下载了最新的Android studio,还有JDK,JDK是idk-9.jdk

当谷歌搜索这个问题时,人们说尝试 JDK 8,但是当我删除 JDK 9 然后下载并安装 JDK 8 时,它仍然显示为 JDK 9。

当我查看用户/库/时,没有 Java 目录!

我使用的是 macOS Sierra、Unity 2017 和 Android 7.0

任何帮助将不胜感激。

我得到的错误是这个..

CommandInvokationFailure: Failed to build apk.
/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/bin/java -Xmx2048M -Dcom.android.sdkmanager.toolsdir="/Users/kevingriffiths/Android/sdk/tools" -Dfile.encoding=UTF8 -jar "/Applications/Unity/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.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 memoryMB, System.String workingdir, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)
UnityEditor.Android.AndroidSDKTools.RunCommandSafe (System.String javaExe, System.String sdkToolsDir, System.String[] sdkToolCommand, Int32 memoryMB, System.String workingdir, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)
UnityEditor.BuildPlayerWindow:BuildPlayerAndRun()

【问题讨论】:

    标签: java android unity3d


    【解决方案1】:

    不应使用 sun.* 包。参考this

    sun.* 包不是受支持的公共接口的一部分。 不保证直接调用 sun.* 包的 Java 程序可以在所有 Java 兼容平台上运行。事实上,即使在同一平台上的未来版本中,也不能保证这样的程序可以正常工作。 每家实现 Java 平台的公司都将以自己的私有方式进行。 sun.* 中的类存在于 JDK 中以支持 Oracle 对 Java 平台的实现:sun.* 类使 Java 平台类在 Oracle JDK 的“幕后”工作。这些类通常不会出现在其他供应商的 Java 平台上。如果您的 Java 程序按名称请求类“sun.package.Foo”,它可能会因 ClassNotFoundError 而失败,您将失去使用 Java 开发的主要优势。

    您必须使用不同的 Base 64 包。如果您使用的是 Java 8+,java.util.Base64 应该可以解决问题。否则,您必须使用不同的 Base64 API,例如 this one by Apache in the commons library

    【讨论】:

    • 终于安装了 JDK 8 并且更改了 JDK 8 的路径也有效..
    猜你喜欢
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    相关资源
    最近更新 更多