2017-10-04 5 views
0

저는 앱을 만들고 앱 스토어에 가지고 있는데, 이제 삼성 A3 2016을 만들려고합니다.APK를 작성하지 못했습니다. 자세한 내용은 콘솔을 참조하십시오.

저는 최신 안드로이드 스튜디오와 JDK를 덤프했습니다. 의 JDK는 IDK-9.jdk

입니다

명이 시도의 JDK (8)에게 말을이 문제를 인터넷 검색,하지만 JDK (9)을 제거 할 때 다음 내가 볼 때 여전히 JDK 9

으로 보여주는 것 JDK 8을 다운로드하고 설치하는 경우 사용자/라이브러리/Java 디렉토리가 없습니다! 나는 맥 OS 시에라, 유니티 2017 안드로이드 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의 경로가 변경되었습니다. –