独家授权码个蛋转载 *
前言
看到这个标题,大家可能会认为就是Android运行python脚本,或者用python写app,这些用QPython和P4A就可以实现了。我在想既然C可以调用Python,那么Android能不能通过JNI去调用C里的方法,C再去调用Python方法,实现Android与Python交互呢?用最近很热的一个概念来说JNI就是个壳。(本文假设大家有JNI开发基础)
想法
由于需求很明确了,所以整体流程大概就是这样。
交互流程
为什么要用python
首先看下我们为什么要在Android里需要使用Python,我认为主要有一下几个优点
代码简洁,这个真的是极度简洁的语言,比如我们想要print一个hello world,Java要这样做
public class Hello {
public static void main(String[] args) {
System.out.println("Hello world");
}
}
而Python只需要一句话就可以print出来
print ("hello world")
上手快,按网友所说,只需要读完Python API就可以成为大神,实际体验确实如此,十分好上手,如果现在让我推荐一个没有学过编程的人学习一款脚本语言,我会推荐他学一下python。
前期开发效率高,正如前两个优点所说,代码简洁、上手快而且由于属于超高级语言,很多东西都封装好了,决定了他前期开发效率很高。
可移植性强,由于是解释性语言,只需要有解释器,他可以运行在任何平台。
拓展性强,C/JAVA都有接口可以调用到Python,Python也可以调用到C,对Python进项拓展。
丰富的库,由于超高级语言,封装了很多方法,而且好多大牛对其开发了库。
当然还有几个缺点必须要强调一下。
强制缩进,代码简洁是把双刃剑,由于缩进所以简洁,而又由于缩进导致无法自动格式化代码,而且代码块的分割都是靠缩进,这时可能会造成混乱。
运行速度相对较慢,当然这个对相对C这种接近底层的语言来说的,Python在运行时先解析,再运行,而且由于高层语言相比底层语言都会慢那么一点。
版本兼容性较差,这个体现最明显的就是Python3和Python2,Python3不向下兼容
Python C
Python C是C语言调用Python的一组API,通过它我们可以调用到Python方法。
Python C开发步骤
引入头文件Python.h;
初始化python(Py_Initialize();)
引入模块(pModule = PyImport_Import("pythoncode");)
获取模块中的函数(PyObject_GetAttrString(pModule, "hello");
)
调用获取的函数(PyEval_CallObject(pFunction, NULL);
)
释放python(Py_Finalize();)
对应的代码如下:
#include
#include "Python.h"
int main()
{
Py_Initialize();
PyObject *pModule;
PyOb