前言
早在2017年的时候,出于业余兴趣,我就开始研究关于Python移植到Android上的实现方案,我一直希望能实现Android与Python的混合编程,并为此写了一系列博客,我希望借助JNI技术,实现Java与Python的交互。或许是出于上班忙,时间少,精力有限,人的惰性等等原因,一直没有实现一套框架,降低Android与Python混编的难度,做到尽可能封装C语言代码,让使用者无需掌握NDK开发,C语言编程等。原理是早已走通了,剩下的就是苦力活,写C代码,写JNI代码,对接口一一封装。
现在终于不用遗憾了,因为已经有人做了我一直想做的事,而且是以我想要的思路。我一直关注着Android与Python混合编程的信息,当我看到Chaquopy框架时,真的难掩的开心,比我自己实现的还要开心!
如果有人想探寻Android与Python的混编的原理与实现,那我之前的写的博客还能派上一点用场
Android 平台的Python——基础篇(一)
Android 平台的Python——JNI方案(二)
Android 平台的Python——CLE方案实现(三)
Android 平台的Python——第三方库移植
Android 平台的Python——编译Python解释器
Chaquopy是什么?
简单的直观的解释,它是在Android Studio中基于Gradle的构建系统实现的一个插件。它可以帮助我们用最简便的方式实现Android技术与Python混合编程。甚至对于Python的忠实拥趸来说,可以完全使用Python语言开发一个apk,基本不用写Java代码。
实际上Chaquopy并不仅仅是一个插件那么简单,它是一套框架。gradle插件这部分只是用来打包apk的而已
基础用法-快速入门
首先使用Android studio创建一个hello工程,快速编写代码感受一下
请先确保你当前电脑上的Python环境可用,Chaquopy是根据当前电脑上的Python版本来选择集成对应的版本解释器到apk中的。如你的电脑上有多个Python版本,可通过配置明确指定对应的版本
defaultConfig {
python {
buildPython "C:/Python36/python.exe"
}
}
配置依赖
工程根目录下的 build.gradle
buildscript {
repositories {
google()
jcenter()
// 设置仓库
maven { url "https://chaquo.com/maven" }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.1'
// 导入Chaquopy框架的包
classpath "com.chaquo.python:gradle:6.3.0"
}
}
app模块下的 build.gradle
apply plugin: 'com.android.application'
// 应用插件
apply plugin: 'com.chaquo.python'
android {
compileSdkVersion 28
defaultConfig {
applicationId "org.hello"
minSdkVersion 16
targetSdkVersion 28
versionCode 1
versionName "1.0"
// 指定abi,如需在模拟器调试,增加"x86",否则指定"armeabi-v7a"即可
ndk {
abiFilters "armeabi-v7a", "x86"
}
}
buildTypes {}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
}
配置完成后,同步一下gradle,网络状况不良可能会失败,多同步几次,亲测无需代理,同步成功后,所需的依赖就准备好了
编写代码
同步成功后,在工程中的main目录下会生成python文件夹,如