2017年2月22日水曜日

Android用のPythonをビルドしてみた

忙しくてブログが更新できていなかったのですが、大作を作ったので今日は更新。


Android端末で動くPythonがない。

ラズパイ版のPythonもあるのになんでAndroid版だけないんだ。
ということで、PythonのAndroid版をビルドしてみました。

まず、SL4A (Scripting Layer for Android)というGoogleの方が移植したAndroid用のPythonのソースをgithubからとってきます。
https://github.com/damonkohler/sl4a

--------------------
SL4A (Scripting Layer for Android) とは、 Android 上で、スクリプト言語によるコーディングや、スクリプトおよび対話式インタプリタの実行を可能とするソフトウェアです。 サポートされているスクリプト言語は Python、Perl、PHP、JRuby、Lua、JavaScript 等で、今後さらに追加される予定です。 また、これらのスクリプト言語から Android の API を呼び出すための仕組みが用意されているため、 HTML で UI を記述し、JavaScript で Android API を呼び出すといった使い方も可能です。
--------------------

このレポジトリにビルドしたPythonインタープリタのバイナリーも含まれているのですが、出力されたコードがPIEではないため比較的新しいAndroidではこのバイナリーが実行できないのです。
仕方がないので自分でビルドします。

が、やはりGoogleにはWindowsはないようで僕のAndroid-NDKがはいっているWindowsマシンではデフォルトのビルドが通らない・・・・・・。


ということで、いくつか修正してビルドします。


1. ソースのコピー
sl4a-master/python/srcをsl4a-master/python-build/python-srcにコピーします。


2.  NDK_MODULE_PATHを設定します

cd sl4a-master/python-build
export NDK_MODULE_PATH=$(pwd)


3. makefileにPIEオプションの追加

sl4a-master/python-build/jniにある、modules.mkとpython.mkに次の二行を追加

LOCAL_CFLAGS += -pie -fPIE
LOCAL_LDFLAGS += -pie -fPIE


4. ビルド

cd sl4a-master/python-build/python
ndk-build

途中の3つくらいのファイルでビルドエラーが出ますが、まぁその部分たいしたことないのでコメントアウトすればビルド完了

sl4a-master/python-build/python/libs/armeabi
このフォルダにpythonの実行形式のバイナリーとsoファイルが出来上がります。


5. LD_LIBRARY_PATHの設定

上でできたバイナリーをAndroid端末にもっていって、環境変数LD_LIBRARY_PATHをsoのあるフォルダに設定してあげればpythonを実行することができます。
だけどこれでは

import os

などのimport文が通りません。
なので、Pythonのライブラリを持ってきます。


6. PYTHONPATHの設定

sl4a-master/python/src/Libにあるファイル一式をAndroid端末にもってきて、そのパスを環境変数PYTHONPATHに設定します。


これでAndroid端末用のPythonが出来上がります。
コンソールのままAndroid端末の開発ように使うもよし、apkにいれてアプリとして使うもよし。

今回、SL4Aに含まれているPytyhon2.6をビルドしましたが、Android用のパッチを当てなくてもなんとなくビルドは通るんですね。ということはPython2.7もビルドできるかも。

Android用のPythonのバイナリーだけほしい方はこちら:
https://drive.google.com/file/d/0B5M9qMMg3tfQbkNTaUdkUnBHV1k/view?usp=sharing

Android用のPythonのソース一式がほしい方はこちら:
https://drive.google.com/file/d/0B5M9qMMg3tfQeTZ5LXRRcG5INDg/view?usp=sharing

Pythonって結構簡単にしかも高速にビルドできるのね。
Pythonの動作原理を勉強するのにもちょうどいいですね。
ということで今日はAndroid版のPythonのビルド方法の解説でした。

0 件のコメント:

コメントを投稿