Python 学习笔记 您所在的位置:网站首页 下载androidstudio在Runing停止 Python 学习笔记

Python 学习笔记

2024-07-13 19:57| 来源: 网络整理| 查看: 265

序言

使用的是Chaquopy官网: https://chaquo.com/chaquopy/

下载最新版Android Studio

我目前下的是Android Studio 3.5 (https://developer.android.google.cn/studio/)

另附: 配置Android Studio的缓存文件路径(释放你的C盘) (https://blog.csdn.net/soonfly/article/details/77933786)

新建Android工程

minSdkVersion must be at least 16. (android SDK 版本16以上) Android Gradle plugin version should be between 3.1 and 3.5 (Android Gradle 版本3.1-3.5)

配置python环境

在工程目录下的build.gradle里添加如下:

buildscript { repositories { ... maven { url "https://chaquo.com/maven" } //添加行 } dependencies { ... classpath "com.chaquo.python:gradle:6.3.0" //添加行 } }

在这里插入图片描述 在app目录下的build.gradle添加: 使用插件:

apply plugin: 'com.chaquo.python' //添加行

指定NDK:

ndk { // 指定abi,如需在模拟器调试,增加"x86",否则指定"armeabi-v7a"即可 abiFilters "armeabi-v7a", "x86" }

Python路径: (如果没有安装python,可参照我另一篇文档中的python安装方式https://blog.csdn.net/wwb1990/article/details/103883775)

python { // 指定python路径 buildPython "F:/IDE/Anaconda3/envs/py36/python.exe" }

在这里插入图片描述 配置好上面的两个gradle文件之后,同步一下 在这里插入图片描述 成功之后如下图 在这里插入图片描述 并且在src/main的目录下可以看到,新加的python文件夹 在这里插入图片描述 安装python文件编辑工具: 点击File -> setting 到设置界面,点击plugin,搜索python 在这里插入图片描述 安装成功之后,按钮会变为重启android studio 在这里插入图片描述 点击重启即可。

测试代码

在python文件夹上点击右键,新建python文件 在这里插入图片描述 新建hello.py 在这里插入图片描述 之后在hello.py中添加代码: (其中com.wwb.test.python.JavaBean改为自己的包名和class名)

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

修改MainActivity.java,代码如下:

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 pyList = obj3.asList(); Log.d(TAG,"get_list = "+pyList.toString()); // 将Java的ArrayList对象传入Python中使用 List params = new ArrayList(); 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(); } }

新建java类JavaBean,用于python回调java

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 data; public JavaBean(String n){ this.name = n; data = new ArrayList(); } public void setData(String el){ this.data.add(el); } public void print(){ for (String it: data) { Log.d("Java Bean - "+this.name,it); } } }

之后编译运行,我在虚拟机里跑了一下,可以看到logcat中打印出了每个方法的调用结果: 在这里插入图片描述 下一篇我再尝试一下高级用法,AS中添加几个Chaquopy支持的python库的调用。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有