作っていたGameにひと通り機能を実装し終えたので、私は現在Storeでの公開に向けて奮闘中なのですが、その過程で気付いた事をここに書き残したいと思います。
プログラムの開始はmain.py
にする必要があります。
Android向けへのPackagingはPython3には未対応
なのでまずコードをpython2用に修正することから始めました。
Andoird向けへのPackagingは今現在(2017/09/12)は
- Python2 ... できる。
- Python3 ... 一応できるがPython2ほど成熟していない。
という情況でPython2/3どちらでも可能なのですが、当時はPython3ではできないと思っていたのでPython2へ書き換える方法を選びました。また後述のKivyLancherという道具がPython3には未対応なので、使いたいならPython2に書き換えるしかありません。
Python2への変換
は基本的に
from __future__ import (
print_function, division, absolute_import
)
from future_builtins import *
を各ファイルの先頭に追加してから、コンパイルエラーを潰していく形で現在はやっています。また
from __future__ import unicode_literals
とするとKivy内でErrorがおきるのでしてません。
Kivy Launcherで動作確認
自分の持っているAndroid端末で実行する為にわざわざAPKをつくる必要はありません。StoreにあるKivy Launcher使えば単にプロジェクトをフォルダごとcopyしてやるだけで実機で起動できる様になります。詳しい使い方はこの記事を参考にしてください。
終わりに。
以上のやり方で実機上で動かす事が出来ました。正直自分で使うだけならこれで十分です。APKの作成までするメリットは無いでしょう、というのもAPKの作成は非常に面倒くさいからです。次の記事ではそのやり方を書きますが、私はAPKを作れる様になるまで20時間近く要しました...。
KivyLauncher上での実行 VS APK化 (2017/09/12追記)
KivyLauncherは便利なのでAPK化前のTestに使ってはいますが、古いせいかAPK化した物と比べて異なる部分が多いです。プログラムを実行した時の以下のそれぞれのKivyのLogを見て下さい。
[INFO ] [Kivy ] v1.10.0
[INFO ] [Python ] v2.7.2 (default, Sep 12 2017, 00:15:20)
[INFO ] [Audio ] Providers: audio_sdl2 (audio_ffpyplayer ignored)
[INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_gif (img_pil, img_ffpyplayer ignored)
[INFO ] [Text ] Provider: sdl2
[INFO ] [Window ] Provider: sdl2
[INFO ] Kivy: v1.9.1
[INFO ] Python: v2.7.2 (default, Mar 20 2016, 23:30:13)
[INFO ] Audio: Providers: audio_pygame (audio_pygst, audio_ffpyplayer ignored)
[INFO ] Image: Providers: img_tex, img_dds, img_gif, img_pygame, img_pil (img_ffpyplayer ignored)
[INFO ] Text: Provider: pygame
[INFO ] Window: Provider: pygame
Providerの差
Kivyのversionの違いは置いといて、問題は各種Providerの違いです。Kivyはメディアファイルの読み込みをProviderに依存してるようなので、この違いはそのまま対応するメディアファイル形式の違いになります。例えばaudio_pygameはmp3を読めますがaudio_sdl2は読めません。(audio_sdl2も元々は対応していたようですが、やめたみたいです。参考文献1,参考文献2)。という訳で難しい事をしたくなければどの環境でも使えるメディアファイル形式のみを扱うのが良さげです。音声であればogg vorbisなら今の所読み込めなかった事はありません。
LauncherはTabletの回転に無反応
android.txtに"orientation=all"と書いても全然landscape/portraitの切り替えが起こりません。
フレームレートが大差
目視で分かるぐらいにアニメーションの滑らかさが違いました。APK化した方が断然良いです。
まとめ
APKを作らずに済むというLauncherの利点は大きいですが、欠点もかなりあると感じました。
新しいKivyLauncher (2018/03/24)
Kivyの主要開発者の一人titoさんが新しいKivyLauncherを作ったようです。Python2と3に対応し、pygameに代えてsdlを使うと思われます。まだPlayStoreには上がってないようなので、出来る人は自分でAPKをbuildするのも良いかもしれません。
記事一覧
#1 Kivy Launcherで動作確認
#2 APKを作成
#3の記事は削除(GooglePlayの開発者登録をするだけの記事)
#4 APKをリリース用にビルド、署名、公開
#5 Python3でもAPKを作る(結果は失敗 -> その後成功)