はじめに
#2の記事にてPython2とKivyを使ったアプリケーションをAndroidのAPKにするやり方を書いたのですが、Python3でも実験段階ですができるようなので試してみます。尚、Python2の場合と重複する部分が多いので差分のみを書いていきます。
参考文献
AndroidNDKの代わりにCrystaX NDK
公式サイトよりCrystaX NDKのver10.3.2を落とします。
落とした物を解凍すると総File数約9万、総サイズ8GBとかなり重たいので注意してください。
現在はAndroidNDKでもできるようです。ここを参考に適切なversionのAndroidNDKを選んで下さい。
buildozer.specを書き換える
まずはandroid.ndk_pathの値を落としたCrystaXへのパスに変えます。
android.ndk_path = /somewhere/crystax-ndk-10.3.2
次にrequirementsの値にpython3crystaxを加えます。仮に元が
requirements = kivy
だったら
requirements = kivy,python3crystax
になります。
Build
$ buildozer android debug
実行すると以下のErrorがでました。
sh.CommandNotFound: python3.5
なのでpython3.5を入れて再度コマンドを打ったところ見事APKができました。しかし
アプリがクラッシュ
実機にInstallして起動すると即クラッシュしてしまいます。
以下が手がかりになりそうなlogcatの出力
D/dalvikvm( 5624): Trying to load lib /data/app-lib/jp.gottadiveintopython.mostx-1/libSDL2.so 0x41bc4870
E/dalvikvm( 5624): dlopen("/data/app-lib/jp.gottadiveintopython.mostx-1/libSDL2.so") failed: Cannot load library: soinfo_link_image(linker.cpp:1635): could not load library "libcrystax.so" needed by "libSDL2.so"; caused by load_library(linker.cpp:745): library "libcrystax.so" not found
W/System.err( 5624): Cannot load library: soinfo_link_image(linker.cpp:1635): could not load library "libcrystax.so" needed by "libSDL2.so"; caused by load_library(linker.cpp:745): library "libcrystax.so" not found
APKを解凍して中身を見たところ確かにlibcrystax.soは入っているのですが...。
2017/12/14(追記)
久々にPackagingを試してみた所、成功しました。以前試した時との違いは
- buildozerやpython-for-androidのversionが上がっている
- jdk7とjdk8が混在していない
しか思いあたらないので、原因は2だったんじゃないかと思います。
記事一覧
#1 Kivy Launcherで動作確認
#2 APKを作成
#3は削除(GooglePlayの開発者登録をするだけの記事)
#4 APKをリリース用にビルド、署名、公開
#5 Python3でもAPKを作る(結果は失敗 -> その後成功)