2017-10-04 89 views
0

我已经构建了一个应用程序并将其应用于App Store,现在我正尝试构建到三星A3 2016.无法构建APK。详情请参阅控制台

我已经下载了最新的Android Studio和JDK的JDK是IDK-9.jdk

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

当我看在用户/ Library /中没有Java Dir!

我使用MacOS的塞拉利昂,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() 

回答

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

+0

最后安装了JDK 8并将路径更改为JDK 8也可以正常工作。 –

相关问题