Pages

Sunday, 2 December 2012

Python for Android,将你的Python app打包为APK文件

由于Google的Android Scripting项目SL4A, (我在自己的安卓手机上下载了http://android-scripting.googlecode.com/files/PythonForAndroid_r4.apk并安装了,暂时还不知道怎么使用。http://code.google.com/p/android-scripting/,)开发者可以使用脚本语言来开发Android应用,比如Python、Perl、JRuby、Lua、shell等,都可在Android上执行。不过使 用它并不能帮助创建一个易安装、自包含可执行二进制文件的Python应用。因此,一个新的旨在让在Android系统上发布Python更加容易的项目 ——Python for Android推出了。

Python for Android是由Kivy团队开发的一个项目(Kivy是一个可用以快速创建新颖用户界面应用的开源Python库),该项目旨在帮助你创建自己的可以包含任何你想要模块的Python distribution应用,并帮助你将Python应用打包为可在Android设备运行的APK文件。打包工作可通过四步来完成:

  1. 下载Android SDK/NDK并确认已正确安装。
  2. 设置好环境。
  3. 创建一个包含模块的Python发行版本(Distribution)。一个Distribution由Python库、一些内置的模块(kivy、pygame、pil等)、一个Java bootstrap以及一个build script组成。
  4. 使用该发行版本创建一个Python应用的APK文件。
详细内容可以参见这篇文章介绍

为了对比,我们可以查看下Python for Android与其他项目的比较:

Project
Native Python
GUI libraries
APK generation
Custom build
Python for android
Yes
Yes
Yes
Yes
PGS4A
Yes
Yes
Yes
No
Android scripting
No
No
No
No
Python on a chip
No
No
No
No

目前,该工具只有一个用于支持Kivy模块的Java bootstrap,开发人员鼓励其他开发者创建出更多的bootstrap。其现在可用的模块包括:peg、pil、png、sdl、sqlite3、 pygame、kivy、android、libxml2、libxslt、lxml、ffmpeg、openssl等。

Python for Android以LGPLv2许可证开源,代码托管与Github上。
-----------------------------------------------------------------------------



Introducing “Python for Android”

I’m glad to share a new project called Python for Android. The goal of this project is to package your python application into an APK.
https://github.com/kivy/python-for-android
The project is under the umbrella of Kivy organization, but is not designed to be limited to Kivy only. Read the documentation to correctly install the NDK/SDK Android, and set the needed environment variables.
The packaging is done in 4 steps:
1. Ensure you have Android SDK/NDK downloaded and correctly installed
2. Ensure you have some environment set
3. Create a Python distribution containing the selected modules
4. Use that distribution to build an APK of your Python application
Creating the python distribution is as simple as that:
# create a simple distribution with python + PIL + Kivy
./distribute.sh -m "pil kivy"

# create a distribution with python + openssl + pil + kivy
./distribute.sh -m "openssl pil kivy"
A directory dist/default will be created, including the result of the whole arm compilation.
Available libraries as for today: jpeg pil png sdl sqlite3 pygame kivy android libxml2 libxslt lxml ffmpeg openssl.
The second step is a little bit harder, since you need to provide more information for Android:
cd dist/default
./build.py --package org.test.touchtracer --name touchtracer \
--version 1.0 --dir ~/code/kivy/examples/demo/touchtracer debug installd

# --package: java name of your application
# --name: title of your application
# --version: version of your application
# --dir: location of your application containing the main.py
Then you’ll get a nicely bin/touchtracer-1.0-debug.apk
Pro:
  • A blacklist.txt file that can be used to exclude files in the final APK
  • Reusable distribution for other applications
  • Modular recipes architecture
  • Be able to build independents python distributions
Cons:
  • You need a main.py file that will be used for starting your application
  • Only one java bootstrap available, using OpenGL ES 2.0.
  • Only Kivy toolkit is working. I’m sure that other people can enhance it to add other toolkit recipes. But for example, pygame is not gonna to work because the android project is OpenGL ES 2.0: pygame drawing will not work.
from http://txzone.net/2012/01/introducing-python-for-android/
-----------------------------------------------------------------------

给android手机配置python运行环境

android手机是一台完整的linux计算机,由于使用arm的架构,因此理论上所有支持arm的程序都可以运行在android手机上面,某人最近一直在学习python,因此突发奇想,把python装到安卓手机上面,偶尔写个脚本,在命令行里面运行一下,岂不快哉?

上网查了一下网上很早就有一个项目,是让安卓手机支持各类脚本语言,也就是SL4A (Scripting Layer For Android). 这个项目的特色是让在android UI上面运行脚本程序。比如用python写一个带界面的android程序,然后在手机上写好,在手机上运行。怎么样是不是很酷呢。SL4A在这里http://groups.google.com/group/android-scripting

SL4A只需要安装上,然后安装对应的语言版本就可以了。但这不是我的需求,我的需求是在手机的命令行里面运行python程序,在这方面网上却很少有资料。

其实SL4A里面有个python的项目,我们只需要安装python-for-android,然后把里面的python运行环境拷贝到系统空间再配置一下即可。

第一步:下载并安装python-for-android:
http://code.google.com/p/python-for-android
里面有很多android版的python,我安装的是2.6: PythonForAndroid-r7b1.apk  
第二步:在手机上安装下载的python-for-android apk,安装完成后运行程序,这个程序会从网上自动下载python的运行环境和所需的文件
第三步:从那个应用程序自己下载的数据目录中把python拷贝出来。
这步的过程比较多,而且需要root权限,有几个步骤,

1 重新挂载/system分区。使其可读写

# mount -o rw,remount -t rootfs /system
2 py4android会把python的主程序下载到它的运行数据目录下面。而把python的标准库下载到sd卡下面。我们需要手动把这两个东东放在一起。

#cp /data/data/com/googlecode/python-for-android/files/python/   /system/
#cp /sdcard/com.googlecode.python-for-android/extras/python/* /system/python/lib/
3 配置shell下面运行python的路径
打开/etc/profile 并且加入下面的配置路径

    export PYTHONHOME="/system/python"
    export PYTHONPATH=.:$PYTHONHOME:$PYTHONHOME/libs:$PYTHONHOME/lib:$PYTHONHOME/libs/site-packages:$PYTHONHOME/lib/python2.6/lib-dynload
    export PATH=$PYTHONHOME:$PYTHONPATH:$PATH
    export LD_LIBRARY_PATH=.:$PYTHONHOME/lib:$LD_LIBRARY_PATH
4 别忘了把动态连接库链接到lib下面

   ln -s  /system/python/lib/libpython2.6.so /system/lib/libpython2.6.so
    ln -s /system/python/lib/libffi.so  /system/lib/libffi.so
至此,在命令行中输入python -v 就能在命令行中使用python了.