Androidアプリ用開発環境構築～PythonでのAndroidアプリ作成まで

# 最初に

環境構築とかOSSの使い方がメインで中身の実装はほぼしません。
あくまで「環境構築開始」～「作ったapkがAndroid上で動く」を確認するまでです。

またPythonアプリがメインですが、
『#Androidアプリの開発環境構築』と『##パッケージング』はJAVAと手順が同様です。

javaとPythonのバージョンは下記になります。

* java：7
* python：2.7 (3系もサポートしているらしい)

# Androidアプリの開発環境構築 (JAVA)

まず普通にJAVAでのアプリ開発環境構築。
**ですが!!!** わざわざ書いたりしないです。ググれば出てくるもの。
なので参考にしたリンクだけ。
### 主に参考にしたページ
* javaのインストールからエミュレータでの実行
    * http://techacademy.jp/magazine/1146
* Android SDKインストールからエミュレータ(AVD)を動かすまで
    * http://allabout.co.jp/gm/gc/381330/
* eclipseでアプリの動作確認方法
    * http://techacademy.jp/magazine/2396


### 出た問題に対して
* エミュレータ
    * 起動時に「Please ensure Intel HAXM is properly installed and usable.」のエラー
        * http://ameblo.jp/hunnyjams/entry-11947648966.html
    * やたら重い、遅い
        * http://saku-java.be-ourselves.jp/2014/05/18/intel-x86-android-emulator-setting/

### その他注意点
* SDKのjava対応バージョン
    * 6/12時点ではjava8に未対応の様子。動くかは試してないです。
* ダウンロード/インストール
    * ものによってはめっちゃ時間かかる。いや、ほんとに・・

この辺があればいけるはず。
私は4～5時間かかったがしょーもないエラーに引っかかった時間、
諸々のダウロード時間を除けば作業内容的に「Hellow, world!」まで一時間くらいかと思います。

# Pythonを動かす

さて、ある意味こちらが本題です。

Pythonで書いたスクリプトをapk化してアプリとして動かします。

そこでいろいろ探してみまして、一番簡単そうな方法が、

* **android-python27**
    * https://code.google.com/p/android-python27/

これを使います。
内部処理としてはJAVAでPythonをキックさせているっぽい。。そこまで追ってないですが。

SL4Aもひとまとめにしてくれるようで、使う側が落としてきたりする必要も無し。

Githubにソースコードがあり、上記のWikiやGithubのReadmeを見れば使い方が書いてあります。

## コードのインポート

具体的に私が行った手順としては、
まずソースをEclipse上に持ってきます。

1. https://github.com/devpack/android-python27 の右のほう「Download ZIP」からzipファイルをダウンロード
2. 適当なところに解凍
3. Eclipse上「パッケージ・エクスプローラー」で右クリックから「インポート」を選択
4. 「Android」内の「Existing Android Code Into Workspace」を選択
5. 「ルートディレクトリ」に 先ほど解凍したフォルダ(android-python27-master)を選択
6. **プロジェクト名「PythonAPK」以外必要ないのでこれだけ選択** (理由は後述)
7. 完了

ただコレだけですとこんなエラーが出ました。

```
Archive for required library: 'libs/armeabi/libcom_googlecode_android_scripting_Exec.so' in project 'PythonAPK' cannot be read or is not a valid ZIP file
```

ビルド・パスのエラーっぽいのですが、
よくわからないかったので以下の手順で無視するようにしました。

1. プロジェクト(PythonAPK)上で右クリック->「プロパティ」
2. 「Javaコンパイラー」-> 「ビルド」
3. 「プロジェクト固有の設定を可能にする」にチェック
4. 「ビルドパスの問題」内の「ビルドパスエラー発生時にビルド中断」のチェックをはずす
5. 「不完全なビルドパス」のレベルを『エラー』から『警告』に変更
6. 『適用』->『OK』

とまあ、ここまでで準備自体は完了です。
「PythonAPK」以外ですが、下記の場合に使用するようです。

* Python32APK：Pythonのバージョンが3系の場合
* PyDroid：PyQtを使用する場合 (javaとかandroidのバージョンのせいかPyQtがないからかエラー出るし。。。)

今回これらは使わないので割愛します。

## パッケージング

いじくる前にデフォルトのまま一度apkにパッケージ化してみます。
今回出来上がるものは下記で公開されているものと同じになります。
https://code.google.com/p/android-python27/downloads/detail?name=PythonAPK.apk&can=2&q=

5秒毎に"Hello from Python 2.7 for Android"というメッセージのトーストが出続けるというもの。

Pythonを動かすと言っても外装はJAVAですのでやり方はJAVAアプリと同じで、、、下記参照。

の前に、「AndroidManifest.xml」内の「android:debuggable="true"」は削除して下さい。
出ないと下記のような警告が出ます。

```
Export aborted because fatal lint errors were found. These are listed in the Lint View. Either fix these before running Export again, or turn off "Run full error check when exporting app" in the Android > Lint Error Checking preference page.
```

消したら、以下参照でapk作成します。
http://blackcapsule.blog107.fc2.com/blog-entry-15.html


で、ここまできてわかったこと。
このapk・・・エミュレーターで動かない。。。
でも実記だと動く。。。
。。。

まーいっか。ってことで次行ってみよう :satisfied: 

## 簡単に使い方

簡単に書くと
**「Pythonコードを特定の場所に特定の名前でZIPで固めて配置」**で動かせます。

具体的に書きますと、プロジェクト内の*"res/raw"*の下に以下のzipファイルがあります。
たぶんそれぞれの役割も下記であってるはず。

* my_python_project.zip：実行されるスクリプト
* python_27.zip：Python2.7 のライブラリ(これはいじらない)
* python_extras_27.zip：Pythonのモジュール類

この「my_python_project.zip」に入っている「hello.py」が実行されているファイルになります。

また、このファイルの指定は*"src"*の*"com.android.python27.config.GlobalConstants.java"*に記述されております。
それぞれのパラメータが示しているものは

* PYTHON_MAIN_SCRIPT_NAME：実行するPythonファイル 
* PYTHON_PROJECT_ZIP_NAME：実行するzipファイル
* PYTHON_ZIP_NAME：Python2.7のライブラリが入っているzipファイル
* PYTHON_EXTRAS_ZIP_NAME：モジュール類が入ってるzipファイル

なのでやることとしては以下になります。

1. Pythonコード作成
2. ファイルをzip形式で圧縮
3. *"res/raw"* の下にzipファイルを配置
4. *"com.android.python27.config.GlobalConstants.java"* のパラメータを適宜変更
5. apkにパッケージ化

Python-for-Android(PY4A)も一緒に入っているので、簡単なツールくらいならすぐ実装にできるかも。

#まだ試せてないこと

ファイル名変えたりしての動作確認程度はしました。
が、モジュール追加するようなことはまだ試せてないです。
あと、Python3系での動作確認もしてないです。
ま、これからってことで。

以上、おしまい。