精华内容
下载资源
问答
  • android studio调用python
    千次阅读
    2021-04-29 10:45:15

    Chaquopy 教程

    Chaquopy

    Chaquopy的作用:使用Chaquopy在Android Studio添加Python环境,java和Python互调

    目前调试后APP可以正常运行(2020年7月28日)

    上一篇文章已经介绍了在Android studio配置chaquopy的步骤,接下来介绍如何在Android studio中运行Python代码。

    安装第三方库

    在配置步骤完成后,右击前文提及的src/main目录下名为“python”的文件夹,在“new”中选择“Python File”新建Python文件,取名后,就可以开始在Android studio中编写Python代码。和在其他Python IDE中一样,如果不安装第三方库,那么只能使用一些内置库,但是一般大多时候我们需要使用到第三方库,一般的方法是使用“pip”命令进行安装,而Android studio中实现的方法有一些不一样。

    在在app/build.gradle文件的如下位置处编写代码:

    pip{

    install "opencv-python"

    install "numpy"

    install "wave"

    install "scipy"

    install "matplotlib"

    }

    如图所示:

    b8f4514c5626

    pythonpip

    图中install后的库为我的项目使用到的第三方库,请按照各自代码需要修改成对应的库名,大部分第三方库都已经支持,详情请看chaquopy的官方链接:https://chaquo.com/pypi-7.0/

    修改完成后,需要Sync项目来进行安装这些第三方库,成功之后,继续在之前新建的python文件中进行代码编写。

    在编写代码的过程中可能会提示没有Python解释器或者import第三方库是显示红色下划线,如图所示:

    b8f4514c5626

    pythoninterface

    这种情况不用在意,只要你前文配置过程没有出错,这里就不用在意,因为之后程序是可以正常运行的。另外提醒,在这里编写代码,没有代码补全功能,所以需要注意代码细节。

    Java中调用Python代码

    编写完Python代码后,接下来介绍如何在其他Java函数中调用Python代码。

    首先需要导入chaquopy的相关类:

    import com.chaquo.python.Kwarg;

    import com.chaquo.python.PyObject;

    import com.chaquo.python.android.AndroidPlatform;

    import com.chaquo.python.Python;

    Kwarg与函数传参有关的类;PyObject与变量有关的类;AndroidPlatform初始化Python环境需要的类Python调用Python代码必须要的接口类。

    调用Python前首先需要初始化Python的环境:

    // 初始化Python环境

    void initPython(){

    if (! Python.isStarted()) {

    Python.start(new AndroidPlatform(this));

    }

    }

    初始化完成后,创建一个连接Python的接口:

    Python py = Python.getInstance();

    再调用Python代码:

    PyObject obj1 = py.getModule("workFlow").callAttr("wav2picture",new Kwarg("wav_path", path),new Kwarg("pic_path", pic_path));

    其中"workFlow"为需要调用的Python文件名,"wav2picture"为需要调用的函数名,"new Kwarg("wav_path", path),new Kwarg("pic_path", pic_path)" 表示函数的形参“wavp_path”传入path的值,形参“pic_path”传入pic_path的值,obj1表示调用函数之后的返回值,因为Python中的数据类型和Java中有些不一样,所以一般不能直接使用,需要进行转换,比如:

    1.如果Python函数return(以上述obj1为例)为int类型,需要使用一下语句进行转换:

    Integer result = obj1.toJava(Integer.class);

    2.如果Python函数return为一维int的list类型,使用以下语句进行转换:

    int[] result = obj1.toJava(int[].class);

    3.如果Python函数return为二维int的list类型,使用以下语句进行转换:

    int[][] result = obj1.toJava(int[][].class);

    以上的int可以按照实际情况替换成float,double等数据类型,转换语句的主要结构是:

    Java数据类型 Java数据变量名 = obj1.toJava(Java数据类型.class)

    这样就转换后的Java数据变量就是调用Python代码后的返回结果。

    这样就完成了在Android studio中调用Python代码。

    补充内容:Python中调用Java类

    其实在Python代码也可以反向的调用Java类,但是这部分实际作用并不大,因为整体流程是在Python中先调用Java类,再使用Java调用Python进行后续操作,所以过程比较繁琐,只当做补充内容即可。

    假设现在有一个名为"Javatest"的Java类,代码如下:

    package com.xzh.test.python;

    import android.util.Log;

    import java.util.ArrayList;

    import java.util.List;

    public class Javatest {

    private String name;

    private List data;

    public Javatest(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("Javatest - "+this.name,it);

    }

    }

    }

    主要包含构造函数,setdata函数用来给list添加数据,print函数用来将list数据打印输出。

    在名为"test.py"的文件中编写一段调用Java类的Python代码,如下:

    from java import jclass

    # python调用Java类

    def get_java_test():

    Javatest = jclass("com.xzh.test.python.Javatest")#用自己的包名

    jb = Javatest("python")

    jb.setData("json")

    jb.setData("xml")

    jb.setData("xhtml")

    return jb

    以上操作分别是指定包名、创建类、list添加三个数据、返回这个类。

    在Java中调用这段Python代码的语句如下:

    // Python中调用Java类

    PyObject obj2 = py.getModule("test").callAttr("get_java_test");

    Javatest data = obj2.toJava(Javatest.class);

    data.print();

    这样程序最终的效果会输出"json"、"xml"和"xhtml"。程序首先会调用Python代码,Python代码依次完成创建类和list添加数据的操作,返回给obj2,obj2再经过类型转换,变成Java类,Java类再正常的调用对应类的输出函数,将list中的数据进行打印输出。

    更多相关内容
  • Android Studio调用python运行thensorflow模型--CLE方案实现Android Studio调用python运行thensorflow模型--CLE方案实现我使用的是虚拟android设备,故对应的CLE中库文件版本为/x86,你可以根据自己开发环境找到对应...

    Android Studio调用python运行thensorflow模型--CLE方案实现

    Android Studio调用python运行thensorflow模型--CLE方案实现

    我使用的是虚拟android设备,故对应的CLE中库文件版本为/x86,你可以根据自己开发环境找到对应的版本。调用的python版本为3.7,以下为主要步骤:

    1、环境准备

    在官网下载最新的CLE for Android 开发包,其中包含示例工程和API文档。

    解压开发包,拷贝如下文件

    拷贝 starcore_android_rX.X.jar到工程的libs目录。(该jar文件在download的starcore_for_android.3.2.0中)

    拷贝libstar_java.so、libstarcore.so、libpython3.7m.so和libstar_python37.so到libs/x86目录。(除了libpython3.7m.so在android.python.3.7.0下载文件中,其余都在download的starcore_for_android.3.2.0/libs/x86中)

    2、编写Python代码

    /----test.py----/

    def add(x,y) :

    return x+y

    /----calljava.py----/

    import imp #test load path

    def log(content):

    JavaClass.d(“formPython”,content)

    log(“Hello Android,form python”)

    /----py_code.py----/

    import time

    def get_time():

    return time.time()

    将py_code.py压缩为py_code.zip文件。将编写的Python源码放入Android 工程的assets目录,其中还要包含一些Python需要的环境及标准库,见下图:(这些库文件都在android.python.3.7.0下载文件/x86目录下)

    如果没有发现assets目录,则如下选择Android下添加:

    3、编写Android相关代码,初始化CLE并调用Python

    首先需要修改build.gradle文件:

    添加jni库文件路径:

    // jni配置

    sourceSets {

    main {

    jniLibs.srcDirs = ['libs']

    }

    }

    然后编写Android相关代码,初始化CLE并调用Python

    import android.os.Bundle;

    import android.support.design.widget.FloatingActionButton;

    import android.support.design.widget.Snackbar;

    import android.support.v7.app.AppCompatActivity;

    import android.support.v7.widget.Toolbar;

    import android.view.View;

    import android.view.Menu;

    import android.view.MenuItem;

    import android.os.AsyncTask;

    import android.app.Activity;

    import android.util.Log;

    import java.io.BufferedInputStream;

    import java.io.BufferedOutputStream;

    import java.io.IOException;

    import java.io.InputStream;

    import java.io.File;

    import java.io.FileOutputStream;

    import java.util.*;

    import com.srplab.www.starcore.*;

    public class MainActivity extends AppCompatActivity {

    public StarSrvGroupClass SrvGroup;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);

    fab.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View view) {

    Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)

    .setAction("Action", null).show();

    }

    });

    final File appFile = getFilesDir(); /*-- /data/data/packageName/files --*/

    final String appLib = getApplicationInfo().nativeLibraryDir;

    loadPy(appFile,appLib);

    // AsyncTask.execute(new Runnable() {

    //

    // @Override

    // public void run() {

    // loadPy(appFile,appLib);

    // }

    // });

    }

    void loadPy(File appFile,String appLib){

    //拷贝Python相关环境

    File pythonLibFile = new File(appFile, "python3.7.zip");

    if (!pythonLibFile.exists()) {

    copyFile(this, "python3.7.zip");

    copyFile(this, "_struct.cpython-37m.so");

    copyFile(this, "binascii.cpython-37m.so");

    copyFile(this, "time.cpython-37m.so");

    copyFile(this, "zlib.cpython-37m.so");

    }

    // 拷贝Python 代码

    copyFile(this, "calljava.py");

    copyFile(this, "test.py");

    try {

    // 加载Python解释器

    System.load(appLib + File.separator + "libpython3.7m.so");

    // 除了将代码直接拷贝,还支持将代码压缩为zip包,通过Install方法解压到指定路径

    InputStream dataSource = getAssets().open("py_code.zip");

    StarCoreFactoryPath.Install(dataSource, appFile.getPath(),true );

    } catch (Exception e) {

    e.printStackTrace();

    }

    /*----init starcore----*/

    StarCoreFactoryPath.StarCoreCoreLibraryPath = appLib;

    StarCoreFactoryPath.StarCoreShareLibraryPath = appLib;

    StarCoreFactoryPath.StarCoreOperationPath = appFile.getPath();

    StarCoreFactory starcore = StarCoreFactory.GetFactory();

    StarServiceClass Service = starcore._InitSimple("test", "123", 0, 0);

    SrvGroup = (StarSrvGroupClass) Service._Get("_ServiceGroup");

    Service._CheckPassword(false);

    /*----run python code----*/

    SrvGroup._InitRaw("python37", Service); // this place

    StarObjectClass python = Service._ImportRawContext("python", "", false, "");

    /*调用tensorflow*/

    //个人推荐使用这种写法,看起来比较直观,不容易带给自己误解

    python._Call("eval", "import sys");

    // python._Call("eval", "sys.path.append(r'" + path + "')");

    python._Call("eval", "import numpy as np");

    python._Call("eval", "import pred as pd");

    //这里在导入tensorflow模型后获得模块接口,可以使用model._Call("func")

    //相当于python._Call("eval", "pd.func()"),但是前一种方法没法保存返回结果

    StarObjectClass model = python._GetObject("pd");

    python._Call("eval", "import operate_data as processor");

    // processor = python._GetObject("processor");

    // 设置Python模块加载路径

    python._Call("import", "sys");

    StarObjectClass pythonSys = python._GetObject("sys");

    StarObjectClass pythonPath = (StarObjectClass) pythonSys._Get("path");

    pythonPath._Call("insert", 0, appFile.getPath()+ File.separator +"python3.7.zip");

    pythonPath._Call("insert", 0, appLib);

    pythonPath._Call("insert", 0, appFile.getPath());

    //调用Python代码

    Service._DoFile("python", appFile.getPath() + "/py_code.py", "");

    long time = python._Calllong("get_time");

    Log.d("", "form python time="+time);

    Service._DoFile("python", appFile.getPath() + "/test.py", "");

    int result = python._Callint("add", 5, 2);

    Log.d("", "result="+result);

    python._Set("JavaClass", Log.class);

    Service._DoFile("python", appFile.getPath() + "/calljava.py", "");

    }

    private void copyFile(Activity c, String Name) {

    File outfile = new File(c.getFilesDir(), Name);

    BufferedOutputStream outStream = null;

    BufferedInputStream inStream = null;

    try {

    outStream = new BufferedOutputStream(new FileOutputStream(outfile));

    inStream = new BufferedInputStream(c.getAssets().open(Name));

    byte[] buffer = new byte[1024 * 10];

    int readLen = 0;

    while ((readLen = inStream.read(buffer)) != -1) {

    outStream.write(buffer, 0, readLen);

    }

    } catch (IOException e) {

    e.printStackTrace();

    } finally {

    try {

    if (inStream != null) inStream.close();

    if (outStream != null) outStream.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    @Override

    public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it is present.

    getMenuInflater().inflate(R.menu.menu_main, menu);

    return true;

    }

    @Override

    public boolean onOptionsItemSelected(MenuItem item) {

    // Handle action bar item clicks here. The action bar will

    // automatically handle clicks on the Home/Up button, so long

    // as you specify a parent activity in AndroidManifest.xml.

    int id = item.getItemId();

    //noinspection SimplifiableIfStatement

    if (id == R.id.action_settings) {

    return true;

    }

    return super.onOptionsItemSelected(item);

    }

    }

    以上是我新建了一个basic activity工程,里面的MainActivity.java文件中初始化python模块并调用文件和函数代码。

    代码中python._Set(“JavaClass”, Log.class)一句,指将一个java类设置给Python,变成Python类,第一个参数指定在Python中的类名,此处随意起了一个类名JavaClass,该类可直接在Python中使用,如上将Android的日志输出类设置给Python使用,完成了Java与Python的互相调用。具体tensorflow模型的使用还只是初尝,等我全部走完美了再来补充。

    Android Studio调用python运行thensorflow模型--CLE方案实现相关教程

    展开全文
  • Android Studio调用python读取图片一、主要任务二、环境配置1、创建一个android studio项目2、配置项目gradle3、配置app下的gradle三、demo测试1、创建python文件2、调用python文件 一、主要任务 主要需要实现通过...

    一、主要任务

    主要需要实现通过Android Studio调用服务器中开的paddlehub接口,paddlehub配置的话参考此码云仓库
    。也就是需要读取图片,并进行传输到服务器,服务器处理完后返回结果即可。当然这只是一种方法,可以用PaddleMobile,也可以android studio直接调用接口,不过那个转码过程有点复杂。使用了Chaquopy,其作用是在Android Studio添加Python环境,java和Python互调。

    二、环境配置

    1、创建一个android studio项目

    这个可参考我这篇博文

    2、配置项目gradle

    找到项目目录的build.gradle文件。
    在这里插入图片描述
    按照下图添加两个语句。
    第一个语句。

    maven { url "https://chaquo.com/maven" }
    

    第二个语句

    classpath "com.chaquo.python:gradle:11.0.0"
    

    在这里插入图片描述
    至于如何确定该选哪个版本,参考官网文档
    我使用的是虚拟环境中的python3.8.11,然后看graddle的版本的话看如图那条语句就行。
    在这里插入图片描述
    选择合适的版本,替换我这上面的3.8.11即可。

    3、配置app下的gradle

    找到如下图的build.graddle。
    在这里插入图片描述
    双击打开,然后替换该文件的第一条语句为下面两条。

    apply plugin:  'com.android.application'
    apply plugin: 'com.chaquo.python'
    

    在这里插入图片描述
    指定abi和配置python环境,如下图所示位置放置:
    在这里插入图片描述
    ndk代码:

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

    python环境代码:

    python {
        buildPython "D:/Users/Administrator/Anaconda3/envs/test/python.exe"
        pip {
            //options "--index-url", "https://mirrors.aliyun.com/pypi/simple/"
            options "--extra-index-url", "https://pypi.tuna.tsinghua.edu.cn/simple/"
            install "opencv-python"
            install "requests"
        }
    }
    

    其中buildPython就是python.exe的位置,可以用anaconda里面的虚拟环境中的python,配置过程参考我这篇博文
    options指定库的镜像下载地址,可选择阿里云,清华等等。
    install后接库名,可以通过pandas==xxx来指定库的版本。
    所有这些完成后点小锤锤build。
    在这里插入图片描述
    如果不报错,则说明环境配置没问题了。

    三、demo测试

    1、创建python文件

    Gradle配置完成后,项目main文件夹下会出现一个python文件夹。
    在这里插入图片描述
    右键python文件夹,创建一个python file

    然后命名这个python文件,写入自己的代码即可,我这里给个demo。

    from os.path import dirname, join
    import requests
    import json
    import cv2
    import base64
    def cv2_to_base64(image):
        data = cv2.imencode('.jpg', image)[1]
        return base64.b64encode(data.tostring()).decode('utf8')
    # 发送HTTP请求
    def finals():
        filename = join(dirname(__file__), "dog.jpg")
        print(filename)
        data = {'images':[cv2_to_base64(cv2.imread(filename))]}
        print(data)
        #print(type(cv2_to_base64(cv2.imread("D:/hb.jpg"))))
        headers = {"Content-type": "application/json"}
        url = "http://101.43.179.20:8866/predict/mobilenet_v3_large_imagenet_ssld"
        r = requests.post(url=url, headers=headers, data=json.dumps(data))
        print(r.json()["results"])
        # return r.json()["results"]
    

    可能会爆红,不用管。
    在这里插入图片描述
    接着强调一点,Chaquopy 6.3.0和更高版本中,可以使用相对于__file__的路径访问数据文件,例如,如果数据文件与Python文件位于同一目录中,使用如下命令。

    from os.path import dirname, join
    filename = join(dirname(__file__), "dog.jpg")
    

    filename就算这张图片的路径了。
    随便把一张图片放到py文件同目录下,改名称即可读取了。
    在这里插入图片描述
    下面那是http请求了,具体的例子参考paddlehub的实现,官网如下:
    https://gitee.com/paddlepaddle/PaddleHub?_from=gitee_search
    我这个端口保持开着,测试的时候可以用我服务器这个端口试试,如果关了,可联系我开一下,服务器采用的是腾讯云(没阿里云稳定)。

    2、调用python文件

    完成上一步后,打开MainActivity文件,添加如下函数:
    在这里插入图片描述

    void initPython(){
        if (!Python.isStarted()) {
            Python.start(new AndroidPlatform(this));
        }
    }
    void callPythonCode() {
        Python py = Python.getInstance();
        PyObject pyObject = py.getModule("python").callAttr("finals");
    }
    

    getModule(“xxx”)中是python文件名,不需要.py后缀,然后.callAttr(“xxx”)里是python文件里的函数名,比如说我上述py文件的名字为python.py,然后要调用的函数是不需要参数的finals,就可以写成上述代码调用,然后在android的主函数调用这两个函数即可。
    在这里插入图片描述
    我这是让点击才进行识别图像。

       initPython();
       callPythonCode();
    

    如果运行不报错,且有python的输出那么恭喜完成了这个流程。
    我这是图像分类的demo,测试图片和返回结果如下:
    在这里插入图片描述

    Pomeranian是博美犬; 博美; 松鼠犬; 波美拉尼亚犬; 松鼠狗。

    展开全文
  • 用别人提供的CLE方法但是在自己下载的文件夹中找不到别人的文件夹里的文件,无法完成后续操作,同样是在官网中下载的为啥我下载的和别人的不一样呢?求教。</p>
  • 引言 ...(上一篇:Python 学习笔记 —— 使用Chaquopy在AndroidStudio添加Python环境,java和python互调) Chaquopy 支持的python库在这个链接里面可以查到:https://chaquo.com/pypi-2.1/ 标题 ...

    引言

    跟随前一篇文章,本篇将尝试,引入python库,并且调用方法。
    (上一篇:Python 学习笔记 —— 使用Chaquopy在AndroidStudio添加Python环境,java和python互调
    Chaquopy 支持的python库在这个链接里面可以查到:https://chaquo.com/pypi-2.1/

    继续添加 python库的调用

    如图在app目录下的build.gradle中,在之前添加的python结构中添加pip指令。
    其中install的库需要是Chaquopy 支持的库中的。不支持的库运行一下会有报错。
    在这里插入图片描述
    然后在python目录中新建callPyLib.py文件,
    在这里插入图片描述
    代码如下,爬虫+numpy调用,还画了个❤

    from bs4 import BeautifulSoup
    import requests
    import numpy as np
    
    # 爬取网页并解析
    def get_http():
        requests.packages.urllib3.disable_warnings()
        r = requests.get("https://www.baidu.com/",verify=False)
        r.encoding ='utf-8'
        bsObj = BeautifulSoup(r.text,"html.parser")
        for node in bsObj.findAll("a"):
            print("---**--- ", node.text)
    
    # 使用numpy
    def print_numpy():
        y = np.zeros((5,), dtype = np.int)
        print(y)
    
    def Love():
        print('\n'.join([''.join([(''[(x-y) % len('wwb_nb')] if ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3 <= 0else' ') for x in range(-30, 30)]) for y in range(30, -30, -1)]))
    

    之后在MainActivity中添加调用方法

    void callPythonCodeFromLib(){
            Python py = Python.getInstance();
            py.getModule("callPyLib").callAttr("get_http");
            py.getModule("callPyLib").callAttr("print_numpy");
            py.getModule("callPyLib").callAttr("Love");
        }
    

    在onCreate中调用方法
    在这里插入图片描述
    爬取网页还需要网络权限,在AndroidManifest.xml中添加网络权限

    <uses-permission android:name="android.permission.INTERNET"/>
    

    之后连手机,运行,在logcat中可以看到打印结果
    (android studio模拟器联网的话还需要模拟器设置一下,这个自己去百度吧)

    打印数组:
    在这里插入图片描述

    打印网站爬取:
    在这里插入图片描述

    打印❤ 哈哈哈哈
    在这里插入图片描述
    整个项目:https://download.csdn.net/download/wwb1990/12120537

    以上~

    展开全文
  • 众所周知,python的语法简洁,并且拥有丰富强大的开源库,如果能把python移植到Android系统,能够用Androidpython混合开发一款app, 那就太酷了。要想移植python,得需要下载源码并且交叉编译才行。这个过程太复杂...
  • I am running Android Studio 2.2.3I need to run Python scripts during my development to process some data files. The final apk does not need to run Python in the device.At the moment I run the scripts ...
  • } } 调用Python方法 Python.getInstance() : 得到python的对象 py.getModule(“xxx”) : 是调用名为xxx的.py文件 callAttr(“photo”,new Kwarg(“jpg”,paths)): 第一个参数表示调用的python中的方法名photo,...
  • 1、下载git,并安装; 2、配置环境变量; 比如:D:\Program Files\Git\bin; 3、编写shell文件(a.sh),放在安卓工程下;...4、打开android studio 底部【Terminal】,运行sh; 5、执行 $ ./a.sh
  • Android Studio2021 手机版本:Android9.0 pytorch1.7-GPU CUDA11.0 二.USB运行调试 在gradle.properties配置文件中最下方加入: android.injected.testOnly=false 这样就可以利用USB进行手机App安装。 ...
  • Android studio 利用Chaquopy运行python代码

    千次阅读 2021-11-21 10:59:02
    如有错误欢迎指正 Chaquopy:Android studio中编写Python代码-2_YukoAraki的博客-CSDN博客
  • Chaquopy:Android studio中编写Python代码-2

    千次阅读 热门讨论 2020-09-05 14:10:29
    Chaquopy 教程 ...上一篇文章已经介绍了在Android studio配置chaquopy的步骤,接下来介绍如何在Android studio中运行Python代码。 安装第三方库 在配置步骤完成后,右击前文提及的src/main目录下名为
  • Android Java代码调用Python代码

    千次阅读 热门讨论 2021-06-27 17:24:20
    1,打开官网下载Android平台对应的download和android.python.x.x.x版本,这两个都要下载; 2,download下的文件提供了不同API平台使用的.so库(例如:armeabi下的libstar_java.so,libstar_python.so,libstarcore....
  • Android Studio查看输出内容的方法

    千次阅读 2021-01-29 14:50:27
    利用命令行工具Logcat(日志猫)对标签过滤,可以在控制台查看输出内容:
  • android调用python脚本

    千次阅读 2019-11-22 09:01:21
    文章可以帮你解决android下调用python方法获取返回值,往python函数中传参等。开发环境基于Android studio. 详细介绍 一.环境准备 在官网下载最新的CLE for Android 开发包,其中包含示例工程和API文档。解压开发...
  • Android Studio调用谷歌浏览器打开网页

    千次阅读 2020-12-17 18:07:01
    前提是我们android手机上有谷歌浏览器,默认使用谷歌打开指定链接,若失败则调用android本地默认浏览器打开网页,代码如下: Uri uri = Uri.parse("https://odga.me/rewards/intl-c/luckywheel/?lang=en&utm_...
  • 参考网上的安卓下调用python是有三种方法的,但是尝试也...3、就是传统的JNI方式了,由java通过JNI调用C,从再调python。而我最后需要再由Python调C,总之弯了一大圈,后来这个方案也被否定了,不采用这种设计架构。
  • Android下Jar包的生成以及调用,包含了jar包的创建,命名规则。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,971
精华内容 4,788
关键字:

android studio调用python

友情链接: redresseur.rar