Android SDK Licenseとjavaのファイルエンコーディング
限定条件下でははる
元々は、Kivy の
限定条件下って
java実行時の
ファイルエンコーディングを 全く 指定していない。 もしくは 指定しているが UTF-8ではない。 作った
プログラムの 処理過程で、 Android SDKの ライセンス内容を 取り扱う
発生した事象
何が起きた
buildozerは
で、
↓こんな
$ buildozer android debug
(中略)
(ライセンス)
(中略)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x81 in position 760: invalid continuation byte
どうしてこうなった
上の
と
改めて
そして、この
さらに、
結論
buildozerが
内部で android debug を 実行しようとしたが javaの
ファイルエンコーディングを ために、指定していなかった デフォルトの 値が 採用され デフォルトエンコーディングが
UTF-8ではない ことから、別の 文字コードで 出力されてしまい buildozer自体は
unicode文字列と して 処理しようと するが、UTF-8でないので 当然ながら 処理に 失敗し UnicodeDecodeErrorが
飛ぶ
と
しかたがないのでプルリク作った
https://github.com/kivy/buildozer/pull/155
「修正は
ちなみに、
プルリクは
現在のバージョンのbulldozerでは、”buildozer android build”のコマンドがパッケージ更新の段階で失敗します。
出力された例外を調べると、次のことがわかりました。
・現在のAndroid-SDKのライセンスの内容に、非ASCIIな文字が含まれていること
・java実行時に、ファイルエンコーディングがUTF-8ではないことが有ること
・エンコーディングがUTF-8ではない環境下で、ライセンスを表示しようとすると、非ASCII文字のデコードに失敗して例外が発生すること
上記の現象を解消するために、改修を行いました。
エンジニアと
おまけ
な