Android 平台的Python——基础篇(一)
Android 平台的Python——JNI方案(二)
Android 平台的Python——CLE方案实现(三)
Android 平台的Python——第三方库移植
Android 平台的Python——编译Python解释器
更新:本文已过时!!!CLE不再被推荐,接口不友好,且未提供一些需要编译的Python 第三方库,如numpy、pillow等等,推荐更新的方案 Android与Python混合编程
CLE(Common Language Extension)公共语言拓展
官网:http://www.srplab.com/cn/index.html
来自官网的简介:
CLE中间件支持多脚本语言混合编程。c/c++, lua, python, c#, ruby, java等语言可以通过CLE中间件直接使用其它语言中的类,函数,变量或者模块, 使得现有的功能库或者模块可以很容易的应用到其它编程语言中。开发者可以使用熟悉的语言编写功能库,然后在其它语言开发的应用中使用。CLE非常简单,其执行体仅为一个核心共享库和对应于每个脚本语言接口的共享库.
我们建议开发人员使用脚本语言编写主逻辑,并使用平台相关的语言开发GUI或设备特定部分。这样不仅可以保证应用程序的可移植性,而且还利用了平台SDK的优势。使用脚本语言可能会导致安装包的大小增加, 性能略有下降,但随着硬件性能提高和存储增加, 这些将不成为问题
在Android中通过CLE框架,实现与Python交互(以下内容为eclipse环境)
注:本博客之前以eclipse环境为主,后续有读者反馈,Android Studio下无法运行,在Android Studio下
- libs目录中请不要导入
android-support-v4.jar
- 请在工程app目录下的build.gradle中对jni进行配置
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "org.study"
minSdkVersion 15
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
// jni配置
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
1、环境准备
在官网下载最新的CLE for Android 开发包,其中包含示例工程和API文档。解压开发包,拷贝如下文件
- 拷贝 starcore_android_rX.X.jar到工程的libs目录
- 拷贝 libstar_java.so、libstarcore.so、libpython3.4m.so和libstar_python34.so到libs目录
2、编写Python代码
text.py
def add(x,y) :
return x+y
calljava.py
import imp #test load path
def log(content):
JavaClass.d("formPython",content)
log("Hello Android,form python")
py_code.py
import time
def get_time():
return time.time()
将py_code.py压缩为py_code.zip文件。将编写的Python源码放入Android 工程的assets目录,其中还要包含一些Python需要的环境及标准库,见下图
3、编写Android相关代码,初始化CLE并调用Python
public class MainActivity extends Activity {
public StarSrvGroupClass SrvGroup;
@Override
protected void onCreate(Bundle savedInstanceState)