Android与Python混编 使用Chaquopy在Andr
Android Sutdio配置python环境:
在工程目录下的build.gradle里添加如下:
buildscript {
.......
repositories {
maven { url "https://chaquo.com/maven" }
}
dependencies {
classpath "com.chaquo.python:gradle:9.1.0"
}
}
在app目录下的build.gradle添加(如果是Mac本不知道python位置,可以安装一个pycharm工具查看,Preference--Project:****--Python Interpreter中可以看到):
plugins {
id 'com.chaquo.python'
}
android {
......
defaultConfig {
python {
// python安装位置(windows可以直接找到exe文件位置)
buildPython "/usr/local/bin/python3.7"
// 安装python源码所需的三方库
pip {
install "numpy"
install "scipy"
}
}
}
sourceSets {
main{
// Android代码模块
setRoot "src/main"
// Python代码模块,也就是你的Python源码所在项目中的文件夹
python.srcDirs = ["src/main/java/com/naolu/eeg_safetyhelmet/python"]
}
}
}
在Android Studio中安装Python插件,调出Plugins,查找Python Community Edition并安装:
![](https://img.haomeiwen.com/i13087334/015d3168af787dbb.png)
![](https://img.haomeiwen.com/i13087334/4ffbc494147983fb.png)
然后就可以编写我们的Python代码,切记要确保python代码的可运行性,否则有意想不到的问题出现。找问题还麻烦!
hello.py
import numpy as np
def getArray():
data = ["1","sd","sdff","ssssf","fffff","ffggg"]
x = np.array(data)
return x[4]
在主程中调用:
/** Android 调用 Python **/
if(!Python.isStarted()){
Python.start(AndroidPlatform(this))
}
val py = Python.getInstance()
val call = py.getModule("hello").callAttr("getArray") //("getData")
Log.d("ddddd",call.toString())
到这里也就差不多了,我从CLE for Android发现不支持numpy和scipy等三方库,感觉很坑,最后转到了Chaquopy这里,发现可以很好的支持,先到这里吧,今天很累!
补充点:Chaquopy是收费产品,只能运行5分钟会自动关闭你的APP,据官网说的意思是可以做成开源库实现免费使用,具体还没有尝试
其他大神的回复是,证书有两种:
1,商业证书。email给contact@chaquo.com这个邮箱,告诉他你的公司和有多少人参与到这个项目要用chaquopy。他会回复你相关表格去填写。
2,开源证书。把你的使用chaquopy的项目上传到git之类的开源社区。添加个开源许可证参照这个就行(https://blog.csdn.net/qq_35246620/article/details/77647234)。然后同样email给contact@chaquo.com,告诉他你的开源项目git网址,和build.gradle中你的app的唯一包名。(在开源有效日期内,都是他提供的key都是有效的) 拿到key之后,在local.properties中添加 chaquopy.license=<license key> 就行了。
参考官方:https://chaquo.com/chaquopy/doc/current/android.html
参考其他:https://stackoverflow.com/questions/65169273/failed-to-apply-plugin-id-com-chaquo-python-while-gradle-build
参考其他:https://blog.csdn.net/wwb1990/article/details/104051068
参考其他:https://blog.csdn.net/wwb1990/article/details/104053465