2017-10-04 18 views
0

私はアプリケーションを構築してApp Storeに持っていますが、今はSamsung A3 2016にビルドしようとしています。APKの作成に失敗しました。詳細については、コンソールを参照してください

私は最新のAndroidスタジオとJDK 、JDKは、この問題をグーグルときIDK-9.jdk

の人がトライJDK 8言っているが、私は、JDK 9削除したときに、私は見てみると、それはまだJDK 9として

を見せているJDK 8をダウンロードしてインストールされますユーザー/ライブラリ/にJavaディレクトリはありません!私は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 *のクラスは、OracleのJavaプラットフォームの実装をサポートするためにJDKに含まれています。Sunの*クラスは、JavaプラットフォームクラスをOracleのJDKの「カバー」の下で動作させるものです。これらのクラスは、通常、別のベンダーのJavaプラットフォームには存在しません。 Javaプログラムが "sun.package.Foo"という名前のクラスを要求すると、ClassNotFoundErrorで失敗する可能性があり、Javaで開発することの大きな利点を失ってしまいます。

異なるBase64パッケージを使用する必要があります。 Java 8+を使用している場合は、java.util.Base64がこのトリックを行う必要があります。それ以外の場合は、インスタンス用に別のBase64 APIを使用する必要があります。this one by Apache in the commons library

+0

最後にJDK 8がインストールされ、JDK 8へのパスも変更されました。 –