Android 平台的Python——JNI方案(二)

本文介绍如何在Android项目中嵌入Python解释器,通过JNI实现Java与Python的相互调用。首先需要配置crystax NDK环境,然后在Java中编写native方法,接着编写JNI代码和Python脚本。最后,通过AssetExtractor.java调用Python脚本。这种方法虽然自定义程度高,但要求熟悉Android NDK和C语言。
摘要由CSDN通过智能技术生成

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",        
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程之路从0到1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值