【Unity】【Android】 UnityでAndroidアプリを書き出す時の忘備録

エラーが出たとこの箇条書き

 ・新しめのAndroidSDKはNG、sdk-toolsの内容がUnityの期待する構成とは異なるものになっている

クソAndroidStudioのクソ改変のせいらしい。出るのは以下のエラー。

f:id:slayd:20171007160520p:plain

色々入ってる、古めの方が正解。新しくしちゃった場合は以下から落とせる。

http://dl-ssl.google.com/android/repository/tools_r25.2.5-windows.zip

f:id:slayd:20171007160928p:plain

・JDK9はNG、ライブラリの内容がAndroidの期待する構成とは異なるものになっている

f:id:slayd:20171007161247p:plain

f:id:slayd:20171007161559p:plain

CommandInvokationFailure: Failed to build apk.

BASE64Encorderがないよっつってエラーが起きていた。

Caused by: java.lang.NoClassDefFoundError: sun/misc/BASE64Encoder

at com.android.sdklib.internal.build.SignedJarBuilder.<init>(SignedJarBuilder.java:177)

SignedJarBuilder.java:177は以下

>> mBase64Encoder = new BASE64Encoder();

 

使っていたJDKは9なんだけど、これにBASE64Encoderが無いらしい。こいつが搭載されているJDK8に切り替えてみる。

 

f:id:slayd:20171007163355p:plain

出来た(^w^)

 

f:id:slayd:20171007164849p:plain

よくよく調べてみると、JDK1.6以降のBASE64Encoderは利用時に以下の警告が出ていたらしい。

>>警告:sun.misc.BASE64Encoder は Sun が所有する API であり、今後のリ リースで削除される可能性があります。
で、JDK9で見事削除されたということか。SignedJarBuilderが新APIjava.util.Base64ってやつらしい)に対応するまではJDK1.8を使い続けるしかないってことやね。

 

どちらの問題も、それぞれのバージョンの違いによる吸収できない差異によって発生していた。こういうのは確かにハマるだろうなぁ。ネットでちょっと調べても

「CommandInvokationFailureが発生してビルドが出来ません!助けて!」

とか、そういうのばかりだし。仕事でもよく言われるSOSだけど、これもう君はエラーログを1行目から最後まで全部見たかい? そしてそれを理解して、その解決策を探ったかい?って説教したくなるよね。俺はめんどくさいからコピペしてググるけど、若い人こそちゃんとログは見た方がいい。