KivyアプリケーションをGoole Play Storeで公開する為に #2 APKを作成

# 更新履歴

### 2019/01/23

- 「この記事を読む前に」を追加

### 2017/12/14

- openjdk-7-jdkとopenjdk-8-jdkを混在させると問題が起こるかもしれないので、初めからopenjdk-7-jdkを入れないよう手順を書き直した。

### 2017/09/12

- Android SDK, Android NDK のInstall方法を更新しました。
- buildozerの現在の最新版でのAPK化に成功しました。この記事に載っているコマンドも最新版の物に対するものになっています。

### 2017/09/09

- Buildozer, Android SDK, Android NDK のInstall方法を更新しました。

### 2017/07/29
buildozerのコマンドが変わったようです。
旧のandroidが現在のandroid_oldに相当し、
旧のandroid_newが現在のandroidに相当します。
~~なので新versionをお使いの人はコマンドを読み替えてください。
ちなみに私は、新versionではpython2のAPKの作成は試していないのでご注意ください。~~

# この記事を読む前に

AndroidのAPKを作る為の道具は盛んに更新されていて、この記事の内容は古くて使えません。

# はじめに

　~~まずKivyアプリをAndroidのAPKにするには今のところLinuxを使うしか無いようです。~~ (どうやらMacOSXからでもできるみたいですが、私はMacOSXを持ってないので確かめられていません)
なので他のOSの為だと思いますがKivy公式サイトでは「[APKのbuild環境が整ったUbuntuがInstallされたVirtualBox用vdiファイル](https://kivy.org/#download)」なるものが用意されてたりもします。

　それでは手順の説明に入りたいと思います。APKの作成手順は公式サイトの[このページ](https://kivy.org/docs/guide/packaging-android.html#packaging-android)の手順を参考にやりました。

# buildozerをInstall

[このページ](https://github.com/kivy/buildozer)によると、python2/python3両対応のInstall方法は以下のようになります。(pipでInstallするとpython3のパッケージングができない)

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

# buildozerが依存するpackageをInstall

[このサイト](https://buildozer.readthedocs.io/en/latest/installation.html#targeting-android)を参考に入れていきます。
私はOSはLinux Mint ver17.3・CPUは64bitで、このLinux Mint ver17.3 は Ubuntu 14.04がベースになってるので、一番近い "Android on Ubuntu 14.10 (64bit)"の手順に従うのですが、"openjdk-7-jdk"だけは入れず、代わりに"openjdk-8-jdk"を入れます。

```
sudo pip install --upgrade cython==0.21
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install build-essential ccache git lib32stdc++6 lib32z1 lib32z1-dev python2.7 python2.7-dev openjdk-8-jdk unzip zlib1g-dev zlib1g:i386
```

もしopenjdk-8-jdkが見つからない場合は、以下のコマンドでPPAを追加してから再度installをします。

```
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
```

# buildozer.spec

自身のProjectのmain.pyのあるディレクトリで

```
buildozer init
```
を実行すると buildozer.specというファイルが作られます。このファイルを[この動画](https://www.youtube.com/watch?v=t8N_8WkALdE)を参考にカスタマイズします。
(2016/11/01追記) android.minapiを13以上に設定した方がいい。既定値のままだとTabletを回転させた時にアプリが終了してしまう。ソースは[こちら](https://github.com/kivy/python-for-android/issues/379)。

# Android SDK と Android NDK を手動で落とす時は要注意

　こんなことを言う理由は[これ](https://github.com/kivy/kivy/wiki/Android-SDK-NDK-Information)で、要するに最新版ではなく特定のversionのSDKとNDKを用意してやる必要があるという事です。そんなこと自分でできるわと思うかもしれませんが、古いversionは物によっては公式サイトからはリンクが貼られておらず、Download用のURLをググって調べる必要があり面倒臭いです。そんな事をするくらいなら一度buildozerに自動で落としてもらった方が楽です。こうすることでbuildozerが必要としている正確なversionが落とせるのと、落とす時にどこのURLにアクセスしているかが分かります（buildozerの出力に全部でてる）。
　ただ何らかの理由(例えば既定のInstall場所である~/.buildozerが気に入らないとか)で手動で落としたい人の為に、URLを貼っておきます。
http://dl.google.com/android/android-sdk_r20.0.3-linux.tgz
http://dl.google.com/android/ndk/android-ndk-r9c-linux-x86_64.tar.bz2
落として解凍したらその場所をbuildozer.specの以下の行で

```
# (str) Android NDK directory (if empty, it will be automatically downloaded.)
#android.ndk_path =

# (str) Android SDK directory (if empty, it will be automatically downloaded.)
#android.sdk_path =
```

教えてあげて下さい。(行頭の#を消すのも忘れずに)


# Build

実機をADBモードで繋いでから以下のコマンドを打ちます。(ちなみに初めての時は1時間程がかかりました)

```
buildozer android debug deploy run logcat
```
以下のように出力されて実機上で立ち上がれば成功です。

```
# Android packaging done!
# APK MostxAQuizGenerator-0.0.1-debug.apk available in the bin director
```

もし以下の様なErrorが出て、

```
subprocess.CalledProcessError: Command '['ant', 'debug']' returned non-zero exit status 1
```

さらに以下の出力がある場合は

```
Unsupported major.minor version 52.0
```

JDK8が使える状態になっていない可能性があります。その場合は他のversionのJDKが入っていないか確認し、あればuninstallしてください。

# 記事一覧

[#1 Kivy Launcherで動作確認](http://qiita.com/gotta_dive_into_python/items/5296ae8fef86751c238d)
\#2 APKを作成
\#3は削除(GooglePlayの開発者登録をするだけの記事)
[#4 APKをリリース用にビルド、署名、公開](http://qiita.com/gotta_dive_into_python/items/7f790243bf2c16039691)
[#5 Python3でもAPKを作る(結果は失敗 -> その後成功)](http://qiita.com/gotta_dive_into_python/items/3f0d8db9373e7d96ef91)