2017-10-04 88 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也可以正常工作。 –

相關問題