2017-10-04 4 views
0

J'ai construit une application et l'ai eu sur l'App Store, et maintenant j'essaye de construire un Samsung A3 2016.Impossible de générer l'APK. Voir la console pour plus de détails

J'ai téléchargé le dernier studio Android, et le JDK , le JDK est idk-9.jdk

lorsque googler ce problème des gens disent essayer 8 JDK, mais quand je supprimer 9 JDK puis téléchargez et installez 8 JDK il est montrant toujours aussi 9. JDK

quand je regarde dans l'utilisateur/Bibliothèque/il n'y a pas Java Dir!

J'utilise macOS Sierra, l'unité 2017 et Android 7.0

Toute aide serait grandement apprécié.

L'erreur que je reçois est ce ..

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() 

Répondre

1

Les sun.* emballages ne doivent pas être utilisés. Référence this:

Les packages sun. * Ne font pas partie de l'interface publique prise en charge. Un programme Java qui appelle directement les paquets sun. * N'est pas garanti pour fonctionner sur toutes les plates-formes compatibles Java. En fait, un tel programme n'est pas garanti de fonctionner même dans les futures versions sur la même plate-forme. Chaque entreprise qui implémente la plate-forme Java le fera de son propre gré. Les classes de sun. * Sont présentes dans le JDK pour supporter la mise en œuvre de la plate-forme Java par Oracle: les classes sun. * Sont ce qui fait que les classes de la plateforme Java fonctionnent "sous les couvertures" du JDK d'Oracle. Ces classes ne seront généralement pas présentes sur la plate-forme Java d'un autre fournisseur. Si votre programme Java demande un nom de classe "sun.package.Foo", il peut échouer avec ClassNotFoundError, et vous aurez perdu un avantage majeur de développement en Java.

Vous devez utiliser un package Base 64 différent. Si vous utilisez Java 8+, java.util.Base64 devrait faire l'affaire. Sinon, vous devez utiliser une API Base64 différente, pour une instance

+0

Enfin obtenu JDK 8 installé et en changeant le chemin vers JDK 8 a également travaillé .. –