Unity не удалось собрать apk Android

я следил за единством "танков!" учебник, и теперь я пытаюсь перенести игру на Android, это мой первый раз на Unity, теперь, когда он собирается создать APK, единство сообщает мне «Failed To Build APK», а затем я получаю несколько ошибок, я прикрепляю вас ошибка я считаю фатальной, скажите, пожалуйста, что с ней не так.

CommandInvokationFailure: Failed to build apk.
C:/Program Files/Java/jdk-9.0.1\bin\java.exe -Xmx2048M -D com.android.sdkmanager.toolsdir="C:/Android_SDK\tools" -D file.encoding=UTF8 -jar "C:\Program Files\Unity\Editor\Data\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.WaitForProgramToRun (UnityEditor.Utils.Program p, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)
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 emoryMB, System.String workingdir, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)
UnityEditor.Android.AndroidSDKTools.RunCommandSafe (System.String javaExe, System.String sdkToolsDir, System.String[] sdkToolCommand, Int32 emoryMB, System.String workingdir, UnityEditor.Android.WaitingForProcessToExit waitingForProcessToExit, System.String errorMsg)

person Marco Cauli    schedule 27.10.2017    source источник


Ответы (1)


Если вы выполните jdeps в своем приложении, вы увидите, что sun.misc.BASE64Encoder устарел и может быть заменен на _ 3_, который существует с JDK 1.8.

в руководстве по миграции также говорится об этом:

Несколько sun.* API были удалены в JDK 9. В частности, были удалены sun.misc.BASE64Encoder и sun.misc.BASE64Decoder. Вместо этого используйте поддерживаемый класс java.util.Base64, который был добавлен в Java SE 8.


В вашем случае, поскольку вы полагаетесь на третьих лиц (android sdktools), которые сами не решили эту проблему. Боюсь, вам, возможно, придется придерживаться версии 1.8, а пока об этом можно будет сообщить их трекерам, когда они планируют перенести свои артефакты.

Конечно, это также означает, что в какой-то момент вам придется перейти на использование их Java 9-совместимой версии jar, если и когда они планируют выпустить.

Обновление: это можно отслеживать на Unity # 956425 для дальнейших обновлений.

person Naman    schedule 27.10.2017
comment
Кто-то должен отправить ошибку в Android SDK, чтобы исправить эту зависимость, иначе она не будет работать на новых JDK. - person Alan Bateman; 27.10.2017
comment
@AlanBateman Я согласен. Позвольте мне подробнее узнать, существует ли уже такая ошибка. В противном случае подал бы один и обновил бы ответ. - person Naman; 27.10.2017
comment
Я не использовал код jdk, может мне стоит скачать jdk 8? потому что я думаю, что это не поддерживается единством ... - person Marco Cauli; 27.10.2017
comment
Ну, в настоящее время, поскольку вы полагаетесь на третьих лиц (использующих / построенных на java), которые сами не решили эту проблему. Кажется, да, вам, возможно, придется придерживаться 1.8 ИЛИ искать способ, которым вы можете указать собственный JDK для сборки, которую вы создаете. @AlanBateman Может быть, есть другие альтернативы? - person Naman; 27.10.2017
comment
sun.misc.BASE64 * всегда были внутренними JDK, никогда не документировались. Наконец, удален в JDK 9. Нет секретного флага, чтобы вернуть это обратно. - person Alan Bateman; 27.10.2017
comment
Решено с помощью JDK 8. - person Marco Cauli; 27.10.2017
comment
@MarcoCauli Да, это тоже для меня текущее решение. Однако в ответе связали трекер ошибок от Unity. - person Naman; 27.10.2017