Android 平台的Python——基础篇(一)
Android 平台的Python——JNI方案(二)
Android 平台的Python——CLE方案实现(三)
Android 平台的Python——第三方库移植
Android 平台的Python——编译Python解释器
上一篇博客已经讲了Python与C的交互,本篇主要关于在Android项目中嵌入Python解释器,实现Java与Python相互调用。以有好的项目提供了思路,地址:https://github.com/joaoventura/pybridge
我这里说一下简单实现
1、环境准备
配置好crystax ndk环境,并创建一个NDK项目,将crystax 包下面的 libpython3.5m.so拷贝至工程 lib/armeabi目录下
2、为Java 编写 native方法
public class Util {
static {
try {
System.loadLibrary("jni_test");
} catch (Exception e) {
Log.e("jni_test", ""+e);
}
}
public static native int run(String path);
}
3、编写Jni代码
jni_test.c
#include <Python.h>
#include <jni.h>
#include <android/log.h>
#define LOG(x) __android_log_write(ANDROID_LOG_WARN, "jni_test", (x))
/* --------------- */
/* Android log */
/* --------------- */
static PyObject *androidlog(PyObject *self, PyObject *args)
{
char *str;
if (!PyArg_ParseTuple(args, "s", &str))
return NULL;
LOG(str);
Py_RETURN_NONE;
}
static PyMethodDef AndroidlogMethods[] = {
{
"log", androidlog, METH_VARARGS, "Logs to Android stdout"},
{
NULL, NULL, 0, NULL}
};
static struct PyModuleDef AndroidlogModule = {
PyModuleDef_HEAD_INIT,
"androidlog",