1.根目录settings.gradle文件添加
maven { url "https://chaquo.com/maven" }
2.项目的build.gradle添加
id 'com.chaquo.python' version '12.0.0' apply false
3.app里面的build.gradle中添加
id 'com.chaquo.python'
4然后在app里面的build.gradle中的defaultConfig中添加
ndk {
abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
}
5.然后在app里面的build.gradle中的defaultConfig中添加
python {
buildPython "D:/miniconda3/python.exe"
}
点击同步
然后即可看到python文件夹
///以下资源来源于网络收集未验证
python hello.py
from java import jclass
def greet(name):
print("--- hello,%s ---" % name)
def add(a,b):
return a + b
def sub(count,a=0,b=0,c=0):
return count - a - b -c
def get_list(a,b,c,d):
return [a,b,c,d]
def print_list(data):
print(type(data))
# 遍历Java的ArrayList对象
for i in range(data.size()):
print(data.get(i))
# python调用Java类
def get_java_bean():
JavaBean = jclass("com.wwb.test.python.JavaBean")#用自己的包名
jb = JavaBean("python")
jb.setData("json")
jb.setData("xml")
jb.setData("xhtml")
return jb
java调python
package com.wwb.test.python;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import com.chaquo.python.Kwarg;
import com.chaquo.python.PyObject;
import com.chaquo.python.android.AndroidPlatform;
import com.chaquo.python.Python;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
static final String TAG = "PythonOnAndroid";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initPython();
callPythonCode();
}
// 初始化Python环境
void initPython(){
if (! Python.isStarted()) {
Python.start(new AndroidPlatform(this));
}
}
// 调用python代码
void callPythonCode(){
Python py = Python.getInstance();
// 调用hello.py模块中的greet函数,并传一个参数
// 等价用法:py.getModule("hello").get("greet").call("Android");
py.getModule("hello").callAttr("greet", "Android");
// 调用python内建函数help(),输出了帮助信息
py.getBuiltins().get("help").call();
PyObject obj1 = py.getModule("hello").callAttr("add", 2,3);
// 将Python返回值换为Java中的Integer类型
Integer sum = obj1.toJava(Integer.class);
Log.d(TAG,"add = "+sum.toString());
// 调用python函数,命名式传参,等同 sub(10,b=1,c=3)
PyObject obj2 = py.getModule("hello").callAttr("sub", 10,new Kwarg("b", 1), new Kwarg("c", 3));
Integer result = obj2.toJava(Integer.class);
Log.d(TAG,"sub = "+result.toString());
// 调用Python函数,将返回的Python中的list转为Java的list
PyObject obj3 = py.getModule("hello").callAttr("get_list", 10,"xx",5.6,'c');
List<PyObject> pyList = obj3.asList();
Log.d(TAG,"get_list = "+pyList.toString());
// 将Java的ArrayList对象传入Python中使用
List<PyObject> params = new ArrayList<PyObject>();
params.add(PyObject.fromJava("alex"));
params.add(PyObject.fromJava("bruce"));
py.getModule("hello").callAttr("print_list", params);
// Python中调用Java类
PyObject obj4 = py.getModule("hello").callAttr("get_java_bean");
JavaBean data = obj4.toJava(JavaBean.class);
data.print();
}
}
python调java
//新建java类JavaBean
package com.wwb.test.python;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
public class JavaBean {
private String name;
private List<String> data;
public JavaBean(String n){
this.name = n;
data = new ArrayList<String>();
}
public void setData(String el){
this.data.add(el);
}
public void print(){
for (String it: data) {
Log.d("Java Bean - "+this.name,it);
}
}
}