Kivy

Linux上にKivyの開発環境を構築してAndroidのAPKを作るまで 2017

OSを0からInstallする機会があったので、その際に行った手順をここにMemo。

  • OS は LinuxMint18.2 Mate Edition (Ubuntu 16.04 LTS ベース)
  • virtualenvは使わずにpyenvだけを使いました
  • pythonのversionは3.5.0を採用。 3.5系の最新版が3.5.4であるにも関わらず古いversionを選んだのは、それがAndroidのAPKを作った時に組み込まれるversionだからです。

一度だけ行った作業

環境構築したいOS上で一度だけすればいい作業です。全部管理者権限が必要なコマンドで、いちいちsudoは書いてません。

OSのInstall直後なのでとりあえずupdate,upgrade

$ apt-get update
$ apt-get upgrade

そして必要ないかもしれませんが念の為PCを再起動しておきました。

systemのpipでcython==0.21を入れる

まずsystemのpythonにはそもそもpipが入っていなかったのでpipを入れるところからやりました。

$ apt-get install curl
$ curl -kL https://bootstrap.pypa.io/get-pip.py | python
$ pip install --upgrade cython==0.21

他のパッケージをInstall

$ dpkg --add-architecture i386
$ apt-get update
$ apt-get install git gcc ccache make \
    build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget llvm curl libncurses5-dev libncursesw5-dev xz-utils tk-dev \
    libncurses5:i386 libstdc++6:i386 libgtk2.0-0:i386 libpangox-1.0-0:i386 libpangoxft-1.0-0:i386 libidn11:i386 python2.7 python2.7-dev openjdk-8-jdk unzip zlib1g-dev zlib1g:i386 \
    ffmpeg libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev libportmidi-dev libswscale-dev libavformat-dev libavcodec-dev zlib1g-dev \
    libgstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good \
    xclip xsel

ユーザー毎の作業

管理者権限はもちろん要らない。

pyenvをInstall

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bashrc

Installが終わったらTerminal(端末)を起動し直してpyenvが有効な状態にする。

pyenvの環境ごとの作業

3.5.0の場合
$ pyenv install 3.5.0
$ pyenv global 3.5.0
$ pip install pip --upgrade
$ pip install pillow pygments six jinja2 appdirs "colorama>=0.3.3" "sh>=1.10,<1.12.5" cython==0.23
$ pip install kivy==1.10.0

簡単なHelloWorldプログラムでも書いて動作確認できたらPC上の実行環境の構築は完了。

main.py
from kivy.lang import Builder
from kivy.app import runTouchApp


root = Builder.load_string('''
FloatLayout:
    Scatter:
        size_hint: None, None
        Label:
            text: 'Hello World'
            font_size: 50
''')


runTouchApp(root)

Android APKを作る

CrystaX NDKをDownload

これはpython3系でAPKを作る時のみ必要な物です。
crystax-ndk-10.3.2-linux-x86_64.tar.xzを落としたら

$ tar Jxvf 落としたcrystax-ndk-10.3.2-linux-x86_64.tar.xzへのpath -C 解凍先Directory

で解凍します。総File数9万近くあるせいなのか、GUIで解凍しようとすると数分待たされます。また解凍すると総サイズ8GBにものぼるので注意してください。

buildozerのInstall (これはpyenvの環境ごとの作業)

main.pyのあるDirectoryの外に出てから

$ git clone https://github.com/kivy/buildozer
$ cd buildozer
$ python setup.py build
$ pip install -e .

buildozer.spec

main.pyのあるDirectoryへ移動したら

$ buildozer init

buildozer.specが作られるので最低限以下の部分を書き換える

buildozer.spec
# (str) Title of your application (自由に決めていい)
title = My Test Application

# (str) Package name (自由に決めていい)
package.name = mytestapp

# (str) Package domain (needed for android/ios packaging) (自由に決めていい)
package.domain = jp.gottadiveintopython

requirements = kivy,python3crystax==3.5

# これは既定値(*:S python:D)のままでもいいかもしれません。既定値の問題点は、もしPythonインタープリターの立ち上げ自体に失敗してしまった場合、何もlogに表示されなくなること。
android.logcat_filters = python:V *:E

# 13以上にする必要がある。上げ過ぎると実行可能なDeviceが減るのだと思う。今回は適当に17にしてみました。
android.minapi = 17
android.ndk_path = 解凍したCrystaXNDKへのpath

log_level = 2

一旦Build

$ buildozer android debug

うまく.apkファイルが出来上がったら次の手順に進みます。壊れた.apkが出来上がっている可能性があるのでまだ油断できません。

Android実機を開発者モードでPCにつなぐ

やり方は 'Android 開発者' でググると出てきます。

実機Test

$ buildozer android debug deploy run logcat

と打ってアプリケーションが実機上で立ち上がったら成功。
後はソースコードを修正する度にこのコマンドで動作確認してやればOKです。

参考サイト

pyenv

https://github.com/pyenv/pyenv
https://github.com/pyenv/pyenv/wiki/Common-build-problems

適切なversionのAndroid SDK NDK

https://github.com/kivy/kivy/wiki/Android-SDK-NDK-Information

buildozer

https://github.com/kivy/buildozer
https://buildozer.readthedocs.io/en/latest/installation.html

python-for-android

https://github.com/kivy/python-for-android/blob/master/setup.py#L25

logcat

https://developer.android.com/studio/command-line/logcat.html?hl=ja

kivyのInstall

https://kivy.org/docs/installation/installation-linux.html#installation-in-a-virtual-environment

pipがない時のpipのInstall

https://qiita.com/suzuki_y/items/3261ffa9b67410803443

Python3.6でのAPK化

はまだ実機Testには成功していません。

pyenvでpython3.6の環境を作り、buildozer.specの行を

requirements = kivy,python3crystax==3.6

のようにして試してますが、APKは作れるものの実機で起動すると以下のPopupが出て終わりです。もし成功した人いたら教えてください。
188235.jpg