PythonモジュールをSL4A向けにビルドしてみた


SL4AのVer.が上がってAPIも結構数サポートされて驚いていたのだが、それよりうれしいとおもったのがPythonのCモジュールのビルド方法が確立されたこと。
以前まではソースにそのようなツールは用意されていなくクロスコンパイラでとりあえずビルドって感じだった。

ということでPythonモジュールのビルド方法を。

ツールのソースコード追ってないので正しいかどうか分からないけどAndroidソースが必要みたい。

Androidのソースは各自準備してください。

/home/hoge/android/mydroid ← Androidのソース置き場

/home/hoge/android/sl4a ← SL4Aのソース置き場

とします。

今回はPyLZMAをビルドする例を紹介します。

SL4Aのソースをとってくる。

$pwd

/home/hoge/android/

$cd sl4a

$hg clone https://android-scripting.googlecode.com/hg/ android-scripting

ビルドツールの一部を修正する。

$cd android-scripting/tools/agcc
$vim agcc

126行目以降のものを以下のように1行追加

# Also need: -Wl,-soname,libXXXX.so

my @shared_args = (

    “-nostdlib”,

    “-Wl,-T,$DROID/build/core/armelf.xsc”,

    “-Wl,–gc-sections”,

    “-Wl,-shared,-Bsymbolic”,

    “-L$ALIB”,

    “-Wl,–no-whole-archive”,

**    “-L/home/hoge/android/mydroid/prebuilt/ndk/android-ndk-r4/platforms/android-3/arch-arm/usr/lib “,**

    “-lc”,

    “-lm”,

    “-ldl”,

    #"-Wl,–no-undefined”,

    “$TOOLCHAIN/lib/gcc/arm-eabi/4.4.0/interwork/libgcc.a”,

    “-Wl,–whole-archive”); # .a, .o input files go *after* here

PyLZMAをとってくる。

$pwd

/home/hoge/android/sl4a

$mkdir Modules

$cd Modules

$wget http://pypi.python.org/packages/source/p/pylzma/pylzma-0.4.4.tar.gz

$tar zxvf pylzma-0.4.4.tar.gz

Moduleをビルド

$cd pylzma*
$export SL4A_TRUNC=/home/hoge/android/sl4a/android-scripting

$export ANDROID_SRC=/home/hoge/android

$export PATH=$PATH:$ANDROID_SRC/prebuilt/linux-x86/toolchain/arm-eabi-4.3.1/bin

$export PATH=$PATH:$SL4A_TRUNC/tools/agcc

$export AR=arm-eabi-ar

$export PYBASE=$SL4A_TRUNC/python/src

$export INCLUDES="-I$PYBASE -I$PYBASE/Include”

$export OPT="-DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fno-short-enums $INCLUDES"

$export CXX=agcc

$export LDSHARED=“agcc -shared”

$export RANLIB=arm-eabi-ranlib

$export CC=agcc

$python -E setup.py build

これで問題なくビルド出来ると思う。

$cd build/lib*

$zip pylzma.zip *

でパッケージングしたらPython for Androidでそのzipファイルをインポートすれば使えると思う。

またlib*の他にscripts*ってのが出来てたらそれも必要。

それを/sdcard/downloadに置く。

で、これだとなんかうまくいかない…

root取れれば

*.soを

/data/data/com.googlecode.pythonforandroid/files/python/lib/python2.6

*.pyを

/sdcard/com.googlecode.pythonforandroid/extras

に置けばいいと思う。

なんか説明が足らないな…
ソース見ろってことかねw
その部分のソース: PythonMain.java