簡易SL4Aシミュレータ
AndroidではSL4A (Scripting Layer for Android) というスクリプト言語を実行させる環境アプリがあって、この上でPythonが動かせる。GUI機能はないのだけど、WebKitが使えるので、GUIをHTMLで構築し、JavaScriptを使って、Pythonとデータの受け渡しが出来るとのこと。しかもアプリとして出力できる。
情報源はこの記事。
Python で Androidアプリをセルフ開発 ( sl4a と、AIDE を 使って Pythonスクリプトをスマホ上で独立Androidアプリに変換)
http://keitaiseikatsu.blogspot.jp/2013/07/python-android-sl4a-aide-pythonandroid.html
前にやったことあるけど、もう一回試してみよ・・・・・あ、あれ!?全然動かない。。。
どうやらAndroid5.0以降、動かなくなっているよう。あいやー。
検索すると、パーミッションエラーとかなんかで、SDカードじゃなくて内部ストレージに移したらOK云々ありますが、僕がアプリを完成させるより、SL4Aのアップデートの方が早いと期待して、色々試すのは後にします。
Android5.0.2でSL4AのPythonは起動不可能?
http://blog.livedoor.jp/kikwai/archives/52137963.html
sl4a permission issue after android upgrade
http://stackoverflow.com/questions/27227386/sl4a-permission-issue-after-android-upgrade
執筆時のバージョン
sl4a_r6.apk
python3forandroid_r6.apk
というのも、一々ファイルを実機に移してコンパイルして動作確認しながら開発なんて煩わしいので、シミュレータ上で動作確認を行うから、とりあえず実機で動かなくても開発はできる。
ただし、SDKに含まれるAndroidのエミュレータは激重なので、ネットブックでも動く簡易的なシミュレータを作ることにしました。
ただ、実機で動かせないのは、モチベーション的に痛い。その上に、今回は自作シミュレータなので全然動作が違ったなんてリスクも。。。:(
SL4AのAPIがすべて動作する完全なシミュレータを作ろうと思ったら、それこそアプリどころじゃなくなるので、簡単なものを目指します。
上記の記事(Python で Androidアプリをセルフ開発)のサンプルで出てくる関数は4つ。
Python側 android.eventPost()
Python側 android.waitEvent()
Javascript側 android.eventPost()
Javascript側 android.registerCallback()
この4つが動作すれば、GUIとのデータのやり取りは出来るので、大抵のことは何とかなるんじゃないかな、との予想のもとに、これらの関数だけ擬似的に動作するシミュレータを作ることにしました。
どん!
GUIにはPySideを使っています。
色々強引です。別にAndorid上での操作を完全再現したいわけじゃないんだ。細かい修正は実機でやるとして、大まかに作り進めるためのもんだから。動きゃいいんだ、動きゃ。
理想は、上の記事のサンプル(index.htmlとscript.py)がそのままで動作することだったんですが、ちょっと諦めました。
初めはその発想で、HTMLの動作を常時確認するスレッドと、script.pyを常に回すスレッドのマルチスレッド式にしたのですが、スレッド内からWebKitのJavascriptを実行させようとすると、メモリの重複やらなんやらでPythonが落ちてしまうことがわかって、上手い解決を見出せませんでした。
特定のファイル(debug.txt)があるときと無い時の分岐を加えて無理やり動作させています。
細かい使い方なんかは、後日ウェブサイトの方に専用ページを作るつもりでいますが、いつになるか分からないので、使いたい人がいらっしゃいましたら、コメントしてください。
これで開発は進められますが...、やはり実機で試したいなぁorz
それにしても、JavaScriptの開発はデバックがホント大変。可能な限りPythonで書こうっと。
- 関連記事
-
- 簡易SL4Aシミュレータ
- Javascriptでスプライトシートアニメーション
- ワークロガー
- 自前ダウンローダ作成
- ランチャー(ショートカット)プログラムの作成