工学社刊/清水美樹著「KivyではじめるPythonプログラミング」( ISBN978-4-7775-1796-1)の関連トピックです。

「KivyではじめるPythonプログラミング」サポートページの目次へ
このサイトの目次へ

KivyアプリをAndroidで - 専用仮想Linux上でアプリを変換


概要

KivyアプリをAndroidアプリに変換する

 このページで解説する方法では、Pythonで書いたKivyアプリを、Androidアプリに変換してしまいます。変換後は、通常のAndroidアプリと同じように扱えます。
ただし、我々が直接Javaのコードをどうにかする必要はありません。これから解説する機械的な手順を踏むのみです。もっとも、JavaによるAndroidアプリの開発(もっと言えば、JavaとC/C++を組み合わせたNDKによる開発)に馴染んでいる人には、何をやっているか察しがついて、やりやすいでしょう。

全て揃った仮想Linux上で行える

 2013年11月の時点では、作業はLinux上でしかできません。でも、WindowsでもMacでも動かせる「仮想Linux」のイメージファイルを、Kivyのサイトからダウンロードできます。
KivyアプリをAndroidアプリに変換するには、Android SDK, NDK, Pythonの特別なモジュール,その他たくさんのソフトウェアが必要です。Kivyのサイトからダウンロードできる仮想Linuxには、必要なソフトウェアのインストールと設定が全て揃っています。

VirtualBoxとUbuntuの経験があるといいが

 ただし、仮想Linuxの種類はUbuntuで、かつイメージは仮想マシン管理ソフト「VirtualBox」用です。この両方のソフトウェアを使った経験がないと、操作には不安が多いかもしれません。しかし、操作方法は決まっているので、できると思います。
細かい説明は長くなってしまうので、ここでは操作に必要な最低限の説明のみ述べます。

Kivyサイトでの説明

KivyアプリをAndroidに変換する方法の説明は、以下のURLにあります。これから述べる筆者の説明も、これに基づいています。

「Programming Guide」-「Create a package for Android」

仮想Linuxイメージファイルの準備

ダウンロードサイトの下のほうにある

KivyアプリをAndroidアプリに変換するための仮想Linuxイメージは、Kivyをダウンロードしたサイトにあります。

Kivyのダウンロードサイト

ずっと下のほうにスクロールすると「Virtual Machine」という見出しの項があります。
そこにある「Kivy Python for android VM」というリンクが、目的のイメージファイルへのダウンロード・リンクです。
図1 「Kivy」をダウンロードしたサイト
図2 一番下までスクロール
図3 これが仮想Linuxのダウンロードリンク
ダウンロードされるファイルの容量は900MB近くです。
得られるのは、「Kivy_Python_for_Android.7z」という、拡張子が「7z」のファイルです。この「7z」という形式は、非常に圧縮率の高い形式です。このファイルの扱いについて、次項で説明します。

「7-Zip」の開発サイトから展開ツールを入手

 「7z」という形式のファイルは、「7-Zip(Seven Zip、セブンジップ)」というプロジェクトで開発している圧縮形式です。このプロジェクトで、ファイルの展開ツールを提供しています。

「Kivy Launcher」の使用法は、以下の「Instllation on Android」というページに書いてあります。

「7-Zip」プロジェクトのホームページ
図4 「7-Zip」のプロジェクトページ
図5のように、プロジェクトページの一番上に、展開ツールのダウンロードリンクがあります。32bit環境と64bit環境では動作が異なりますので、正しいほうを選択してください。
図5 32bitまたは64bitの環境に応じて、展開ツールを入手
で得られるのは展開ツールのインストーラです。ダブルクリックして、インストールウィザードに従ってインストールします。
図6 「7z形式」などに対応する展開ツールのインストーラ「7z920-x64.msi」。これは64bit版

「VDI形式」のファイルを得る

 図6のインストーラにより「7-Zip File Manager(ファイルマネージャ)」がインストールされますが、このアプリそのものを起動することはあまりないでしょう。
 そのかわり、図3でダウンロードした「仮想Linuxのイメージファイル」を見てください。図7のように、「7Z」という文字をあしらったアイコンが充てられています。
図7 「7z形式」のファイルにアイコンが与えられた

図7のアイコンを右クリックして「プログラムから開く」- 「7-zip File Manager」を選びます。
すると、「7-zip File Manager」のウィンドウが現れ、図7の中身が「Kivy_Python_for_android.vdi」である、ということが示されます。
そこで「展開」ボタンをクリックすると、図8のように、少し時間がかかると思いますが展開が完了します。展開後は、5GBもの大きなファイルになります。
図8 ファイルを展開中
図9 ついに得られた仮想Linuxのイメージファイル
図9のファイルを、適当な場所に置きます。仮想OSのイメージファイルであることがよくわかるような名前のフォルダを作ってそこに置くのが妥当です。

VirtualBoxによる仮想Linuxの起動

「VirtualBox」をインストール

仮想Linuxは、仮想マシンツール「VirtualBox」で動かすことができます。
「VirtualBox」はオープンソースです。以下のホームページでダウンロードできます。

VirtualBoxのホームページ

図10のようなホームページ(「Oracle」のロゴが見られるのは、スポンサーだからです)の左側で「Downloads」を選んで、ダウンロードページに行きます。
図10 「VirtualBox」のホームページ
図11 VirtualBoxのダウンロードページ
 図12のようなダウンロード・リンクをクリックして、図13のようなインストーラを得ます。なお、Windows用のVirtualBoxは、32bit/64bit共用です。
図12 「x86/amd64」と書いてあるところをクリック
図13 VirtualBoxのインストーラが得られた
インストーラをダブルクリックして、ウィザードに従ってインストールします。
インストールのために注意すべき設定は特にありませんが、途中でネットワークのテストをするために、システムのネットワークが一時リセットされます。そこで、別途ダウンロードなどでネットワークの接続を保持するべき作業が進行中の間は、インストールを開始しないでください。

仮想マシンの作成

「VirtualBox」を起動すると、図14のような「仮想マシンマネージャ」が起動します。
図14「VirtualBox」の仮想マシンマネージャ
仮想マシンマネージャの上部にあるツールバーで「新規」をクリックして、仮想マシンの作成を開始します。
図15 ツールバーで「新規」をクリック
仮想マシンのイメージファイルがすでにある場合、仮想マシンの作成は簡単です。

(1)仮想マシンの名前と種類を設定します。
今回用いる仮想Linuxは、32bitの「Ubuntu」ベースですので、「タイプ」を「Linux」、「バージョン」を「Ubuntu」にします。
図16 仮想マシンの名前とタイプを設定

(2)仮想マシンのメモリ割り当てを設定します。
 本体のメモリを圧迫しないように注意しましょう。仮想マシンですから、いろいろな処理を本体OSに肩代わりしてもらっているぶんだけ、使用メモリも少なくなっています。全体のメモリが4GBなら、1.5GBが上限といったところでしょう。

(3)イメージファイルの場所を設定します。
「VirtualBox」は、新しくイメージファイルを作成する想定になっています。しかし、今はイメージファイルがすでにあるので、下の図17の画面では「すでにある仮想ハードドライブファイルを使用する」を選び、図9のイメージファイルを指定します。
図17 すでにある仮想ハードドライブとして、入手したイメージファイルを指定
図18 仮想ハードドライブ指定欄の右にあるアイコンをクリックすると、ファイルを探すウィンドウが現れる

図17で「作成」をクリックすれば、仮想マシンが完成します。

仮想マシンの起動

 完成した仮想マシンを選択し、ツール・バーで「起動」をクリックすれば、時間はかかりますが、仮想Linuxが起動します。
起動中には、仮想マシンのキーボード操作について通知画面が出ますが、内容を読んだら「OK」をクリックして起動を続行します。
図19 仮想マシンを選択して「起動」をクリック
図20 Linuxのデスクトップが開いた
図20では、Ubuntuの新しいバージョンにアップグレードできるという通知が出ていますが、「Don't Upgrade」または「Ask Me Later」をクリックして、通知を閉じます。

仮想Linuxのログイン名とパスワード

この仮想Linuxのログイン名とパスワードを確認しておきましょう。次の項では、一度シャットダウンする必要がありますので、次に起動したときにログインできないと困ります。
 仮想Linuxのログイン名とパスワードは、図30でデスクトップの左上に見える「Readme.txt」に書いてあります。このファイルはダブルクリックすると開きますが、上のほうに書いてあるので、スクロールして見てください。
図21 デスクトップの左上にある「README.txt」
図22 上にスクロールすると、ユーザー名とパスワードが書いてある

仮想Linuxのシャットダウン

ユーザー名とパスワードをチェックしたら、システムをシャットダウンできます。シャットダウンやログアウトのようなシステム操作は、デスクトップの右上にある「歯車」の印のアイコンをクリックしてメニューを出します。
図23 左上のアイコンをクリックしてメニューを出す


仮想Linuxへ実機を接続

本物のPCにつなげるのと同じ準備

 上記のような仮想Linux上で、KivyアプリをAndroidアプリに変換し、Androidデバイスにインストールすることになります。
仮想マシン上で、さらにAndroidのエミュレータを動かすこともできるでしょうが、手間と負荷を考えると、実機を接続したほうが簡単です。

 Androidを仮想マシンにつなげるときも、本物のPCにつなげるのと同じ準備を(Android側で)します。
すなわち、「USBデバッグを有効にする」設定、及び「提供元不明のアプリのインストールを許可する」設定です。
 これらの設定をするには設定メニューのどこを選ぶか、Android OSにより異なるようです。
 前者は「開発」後者は「アプリ」か、「セキュリティ」のメニューにあると思います。

 なお、使用する実機が(開発専用でなく)日常も使うものである場合、これらの設定は操作の終了後、無効に戻しておいた方が安全です。

USBデバイスはシステムとの「競合」になる

USBポートにデバイスを挿したとき、そのマウントは仮想マシンとシステムとの取り合いになります。
そして、システムのほうに、先にマウントされている場合、仮想マシンで横取りすることはできません。

仮想デバイスで接続を「予約」する

そこで、仮想Linuxのほうで、先にデバイスとの設定を「予約」しておきます。

VirtualBoxの「仮想マシンマネージャ」で、仮想マシンの「USB接続」の設定をします。
設定時には、システムにAndroidデバイスを接続しておいてください。

仮想マシンのUSB設定は、設定画面の下のほうにあるので、スクロールが必要です。
図24 usbの設定画面
図24で「USB」と書かれている欄をクリックすると、USBの設定画面が開きます。 図25のように「USBデバイスを追加」するボタンをクリックすると、今システムに認識されているUSBデバイスの一覧が現れます。図26では、「Fujitsu F-10D」を選んだところです。
図25 デバイス追加のアイコンをクリック
図26 「FUJITSU F-10D」を選んだところ
これ以後は、仮想LinuxにAndroidデバイスを認識させるには、仮想Linuxを起動したあとに、デバイスを接続します。これで、優先的にデバイスが仮想Linuxに認識されます。
VirtualBoxではUSB接続の有効を確認する方法がありますが、長くなるので説明を省略します。接続したと信じて、本書の最後まで実践してみてください)

接続を切るときの注意

仮想LinuxのほうでUSB接続を切ると、システムのほうに認識されます。
一方、システムにAndroidデバイスを接続した状態で仮想Linuxを起動しないように注意が必要です。システムの接続が強制切断されて仮想Linuxに持っていかれる恐れがあります。



ファイル変換の準備

実機は接続しておく

 いよいよ、KivyアプリをAndroidアプリにします。そして、一気にデバイスにインストールまで行いますので、実機は仮想Linuxに接続しておいてください。

「ディストリビューション」を作成

KivyアプリをAndroidに変換するためには、アプリに持たせたい機能に適合した詳細なビルド環境を作成する必要があり、それはセットアップした仮想Linuxにも、まだできていません。これから作成します。
ビルド環境には、アプリに持たせたい機能により、いくつかのタイプがあります。たとえば、「SSLを有効にする」「ハードウェアアクセラレーションを有効にする」などです。各々の詳細な環境を「ディストリビューション」と呼びます。
ここで作成するのは、もっとも単純なディストリビューションです。

ファイルブラウザを開く

まず、ファイルブラウザを開きます。仮想Linuxのデスクトップの左にある「ランチャー」から、フォルダの形をしたアイコンを選んでクリックしてください。
図27 ファイルブラウザを開くアイコン
開いたファイルブラウザに表示されるのは「ホームフォルダ」の中身です。すでに「android」という名前のフォルダがあります。
図28 仮想Linuxのホームフォルダ。
「android」フォルダを開くと、「SDK」や「NDK」がすでにインストールされていることがわかります。そこにある「python-for-android」フォルダを、また開きます。
図29「python-for-android」フォルダを開く
「python-for-android」フォルダを開くと、「distribute.sh」というスクリプトファイルがあります。これが、今から打つコマンドの正体です。
図30「distribute.sh」がこれから打つコマンドの正体

ターミナルを操作

そこで、デスクトップの左にある「ランチャー」から「terminal」を開きます。これは、Windowsの「コマンドプロンプト」に相当するコマンド入力画面です。
図31「ターミナル」のアイコン
ターミナルは、ホームフォルダに「いる」状態になっています。そこから、「python-for-android」フォルダまで移動します。実行例1のとおりです。
実行例1 ホームフォルダから「python-for-android」フォルダまで移動
cd android/python-for-android
そのあと、実行例2で「distribute.sh」の内容を実行します。実行例2では、引数として、ディストリビューション名を「kivy」にしています。
なお、仮想Linuxでは英語キーボードが入力方法に指定されています。そのため、日本語キーボードと記号の配列が異なっています。設定変更もたいへんなので、英語の配列に対応させたキーを打ってやり過ごしましょう。実行例2の「"」は、日本語キーボードでは「:」のキー(「*」のキーでもある)を打てば入力できます。
実行例2「distribute.sh」コマンド
./distribute.sh -m "kivy"
実行例2 を行うと、数分から10分程度かけて、必要なソフトウェアをネットワークインストールしたりコンパイルしたりという作業が行われます。
ターミナルの表示を見ていると、ときどきエラーメッセージが出ますが、図32のように「All Done!」というメッセージが出て終了すれば、そのあとの行程に、筆者が試した限りでは問題は出ませんでした。
図32 実行例1及び実行例2を行ったところ。そのあとにいろいろな色で長い応答が続く
図33 10分くらい待って、「All done!」と出ればまず成功
作業が終わったら、ファイル・ブラウザで「python-for-android」フォルダを見てください。図30に相当する場所です。
フォルダが増えていますね。その中で「dist」さらに「default」とフォルダを開いて行って下さい。
「build.py」という「Pythonスクリプト」があります。今度はそれを用いて、ようやく変換とインストールです。
図34 「build」「dist」などのフォルダができている
図35 「build.py」スクリプトが今度のコマンド

ファイル変換とインストール

Kivy同梱のアプリを変換してみよう

 これからいよいよKivyアプリをAndroid用に変換します。アプリが悪いのか変換方法が悪いのかで迷わないように、自分で作ったファイルより先にKivyに同梱のサンプルアプリを変換しましょう。
 Kivyに添付のサンプルアプリをまとめた「examples」フォルダは、ホームフォルダの「code」フォルダ(「android」フォルダではなく)の下、さらに「kivy」フォルダの中にあります。
 ファイルブラウザをもう一つ開いてこのフォルダの中を見ましょう。それには、図27でファイルブラウザを起動した「ランチャー」上のアイコンを右クリックして、「Open a New Window」を選びます。
図36 新しいファイルブラウザを開く
図37 Kivy同梱のサンプルアプリをまとめた「examples」フォルダ

変換すべきフォルダを簡単なパスにコピー

ただし、変換の際にはコマンドで、Kivyアプリのフォルダのパスを指定する必要があります。もし、図37の中のさらに「demos/touchtracer」というアプリのフォルダを選ぶとしたら、そのパスは「$HOME/code/kivy/examples/demos/touchtracer」という長いものになります。
図38 今回変換に使用したデモ・アプリ「touchtracer」のフォルダ
そこで、簡単なパスですむように、ホームフォルダに「mykivy」というフォルダを作って、そこにこのようなフォルダをコピーしましょう。
新規フォルダの作成、コピー・ペーストなどの作業は、Windowsと同様に、右クリックメニューなどで行えます。

「build.py」のコマンド

「build.py」のコマンドを打つ最も確実な方法は、このスクリプトファイルが置かれているフォルダに直接行くことです。すなわち、実行例2を行ったフォルダから、さらに「dist/default」まで進みます。実行例3のようになります。
実行例3 ターミナル上でさらにフォルダ移動
cd dist/default
それから、Androidデバイスを接続し、実行例4のような長いコマンドを打ちます。実行例4は、Kivyアプリ「touchtracer」をAndroidアプリに変換し、かつインストールまで行うコマンドです。長いコマンドですが一気に打ってください。 実行例4 これが変換・インストールのコマンド
./build.py --dir $HOME/mykivy/touchtracer --package パッケージ名 --name "KivyTest Touchtracer" --version 1.0 debug installd
実行例4は、「./build.py(このフォルダにあるbuild.pyを実行せよ)」というコマンドと、オプション・引数からなります。
なお、ハイフンが打ってある部分のハイフンは、どれも2個ずつ続けて打ちます。
表1に、その詳細を解説します。
オプションまたは引数解説
--dir Kivyアプリのフォルダ(ディレクトリ)のパスを指定。
「$HOME」でホームフォルダを表す。
なお、フォルダの中にある実行ファイル名は「main.py」でなければならない。
--packageパッケージ名を指定。引用符は不要。
--name メニューに表示されるファイル名。何でもいい。
引用符(日本語キーボードでは「:」または「*」)が必要。
引用符の中では、空白を含むなど自由に文字列を記述できる。
--versionバージョン番号。必須なので適当に指定する。
debug「デバッグ向け」であることを示す。
出品のための、署名などの手続きが要求されず、簡単にコンパイルされる。
installd「インストールも引き続き行う」ことを示す
(「--」で始まるものがオプションで、直接書くものが引数と呼ばれています。
そして、「--version 1.0」のように、オプションは引数をとります)
図39 実行例3と実行例4を打った様子
実行例4の応答は、やがて、Android開発者には見慣れているはずの、Antによるビルドのそれになっていきます。
応答は、実行例2の時ほどは長くありませんが、2段階です。
しばしの沈黙のあと、まず変換における「BUILD SUCCESSFUL」が表示されたあと(図40)、続いてインストールが始まりますので、まだAndroidデバイスを動かさないでください。

 「ADBデーモン」が起動していなければ起動し、デバイスを認識し、データを転送するのに、また少し時間がかかります。
最後に、データ転送量が表示されるなどして、2度目の「BUILD SUCCESSFUL」が出たら、インストール完了です(図41)。
図40 最初に出る「BUILD SUCCESSFUL」は変換作業
図41もう一度出て、インストール完了

インストールしたアプリの起動

インストールしたアプリは、「Eclipseでインストールするときのように、自動起動」はしません。アプリのメニューから探し出す必要があります。
たとえば、本書で使用した「F-10D」では、アプリ一覧のずっと下の分類にある、「インストールされたアプリ」の一覧に、「KivyTest Touchtracer」がようやく見つかりました。
図42 デバイスによっては、非常に見つかりにくい場所にある


終わりに

こんなに苦労してインストールして何がいいのか

以上、専用ランチャーアプリを用いた方法にしても、「KivyアプリをAndroidアプリに変換する方法」はかなり面倒と感じられるでしょう。
しかしです。アプリ自体の書き方は、Kivyを使ったほうが驚くほど簡単です。
筆者はJavaも達者ではありませんが、何年かに渡って親しんでいます。一方、Python自体は今回が初めてです。それでも、今回本書で書いた同じアプリをAndroidのAPIを用いてJavaで書けと言われたら、かなりテンションを上げる必要があると思います。

「Python for Android」を用いている

KivyアプリをAndroidアプリに変換する手法は、PythonアプリをAndroidアプリに変換する「Python for Android」というプロジェクトを利用しています。従って、本格的にKivyでAndroidアプリを作ることを目指すのなら、このプロジェクトの情報も利用してください。

Python for Androidのページ


「KivyではじめるPythonプログラミング」サポートページの目次へ
このサイトの目次へ戻る