返回顶部
首页 > 资讯 > 后端开发 > Python >android 调用 python
  • 180
分享到

android 调用 python

androidpython 2023-01-31 01:01:02 180人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

我这里使用AS,如果使用ec开发的直接看 Http://www.srplab.com/cn/index.html 官方下载的开发包 里面有demo,我下载了可以跑通; 不管是不是AS和ec,开始还是去看下CLE官网的开发

我这里使用AS,如果使用ec开发的直接看 Http://www.srplab.com/cn/index.html 官方下载的开发包 里面有demo,我下载了可以跑通;

不管是不是AS和ec,开始还是去看下CLE官网的开发包吧,下载下来看看,ec的有例子,可以编译过;
http://www.srplab.com/cn/index.html

开发包下载: http://www.srplab.com/cn/files/products.html

你可能会遇到的问题

1:注意so版本;版本都要一致,从开发包里复制粘贴;
2:注意so引入路径;as和ec是有区别的;


有什么问题大家可以一起讨论,之前找了很多资料,只有这个最后成功了,但是开始也有很多问题,还有通过JNI的 , 但是引入python.h 和Python libs有问题VC上可以,在AS这个开发工具上怎么搞不知道,,现在这种移植也还行,简单,比较方便;之前还看了SL4A那个 也太扯淡了 ; jython在JVM环境下编译没毛病,一个jar搞定,但是如果在Android下编译,那就不能用了,dvm和jvm确实不一样的;;;还是第一次直观的表现出来;还有一些其它的,太难懂,就不一一说了;


如下图:

libs的和jniLibs里面的so;
这里写图片描述

assets中放.py的文件和python的zip包;

我的add.py文件的代码

import time

def get_time():
    return time.time();

print("sin sin sin sin sin")

def add_num(a,b):  // 相加
    return a+b

def get_array(a): // 外边传入一个数组
    return a[0]  

def get_Str():  // 返回字符串
    return "sin niu bi"

里面import time 这里会爆红,需要把 time.cpython-34m.so放到assets下面可以执行get_time()这个函数;

下面是代码;

public class MainActivity extends Activity {

    static {
        System.loadLibrary("native-lib");
    }

    public native String stringFromJNI();


    public StarSrvGroupClass SrvGroup;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView tv1 = (TextView) findViewById(R.id.sample_text1);
        TextView tv2 = (TextView) findViewById(R.id.sample_text2);
        TextView tv3 = (TextView) findViewById(R.id.sample_text3);
        TextView tv4 = (TextView) findViewById(R.id.sample_text4);
        TextView tv5 = (TextView) findViewById(R.id.sample_text5);
//        tv.setText(stringFromJNI());

        // // TODO: 2018/5/4

        File destDir = new File("/data/data/" + getPackageName() + "/files");
        if (!destDir.exists())
            destDir.mkdirs();
        java.io.File python_libFile = new java.io.File("/data/data/" + getPackageName() + "/files/python3.4.zip");
        if (!python_libFile.exists()) {
            try {
                copyFile(this, "python3.4.zip", null);
            } catch (Exception e) {
                System.out.println("cccccccc///  " + e);
            }
        }

        try {
            copyFile(this, "add.py", "");
        } catch (Exception e) {
            System.out.println("aaaaaaaaa///  " + e);
        }


        try {
//            copyFile(this, "_struct.cpython-34m.so", null);
//            copyFile(this, "binascii.cpython-34m.so", null);
            copyFile(this, "time.cpython-34m.so", null);
            copyFile(this, "zlib.cpython-34m.so", null);  //     这里zlib需要加上,不知道具体用法,不加会报zlib引入错误;估计是so里面有使用;
        } catch (Exception e) {
            System.out.println("DDDDDD/// " + e);
        }

        try {
            //--load python34 core library first;

            System.load(this.getApplicationInfo().nativeLibraryDir + "/libpython3.4m.so");
            Log.e("aaaaa", "aaaaaaaaaaaaa-->" + this.getApplicationInfo().nativeLibraryDir + "/libpython3.4m.so");
        } catch (UnsatisfiedLinkError ex) {
            Log.e("aaaaa", "bbbbbbbbbbbbbbb");
            System.out.println("bbbbbbbbbb///   " + ex.toString());
            Log.e("ssssss", "qweqweqwe-->" + this.getApplicationInfo().nativeLibraryDir + "/libpython3.4m.so");
        }

        
        StarCoreFactoryPath.StarCoreCoreLibraryPath = this.getApplicationInfo().nativeLibraryDir;
        StarCoreFactoryPath.StarCoreShareLibraryPath = this.getApplicationInfo().nativeLibraryDir;
        StarCoreFactoryPath.StarCoreOperationPath = "/data/data/" + getPackageName() + "/files";

        StarCoreFactory starcore = StarCoreFactory.GetFactory();
        StarServiceClass Service = starcore._InitSimple("test", "123", 0, 0);
        SrvGroup = (StarSrvGroupClass) Service._Get("_ServiceGroup");
        Service._CheckPassword(false);

        
        SrvGroup._InitRaw("python34", Service);
        StarObjectClass python = Service._ImportRawContext("python", "", false, "");
        python._Call("import", "sys");

        StarObjectClass pythonSys = python._GetObject("sys");
        StarObjectClass pythonPath = (StarObjectClass) pythonSys._Get("path");
        pythonPath._Call("insert", 0, "/data/data/" + getPackageName() + "/files/python3.4.zip");
        pythonPath._Call("insert", 0, this.getApplicationInfo().nativeLibraryDir);
        pythonPath._Call("insert", 0, "/data/data/" + getPackageName() + "/files");


        //
        String CorePath = "/data/data/" + getPackageName() + "/files";
        Service._DoFile("python", CorePath + "/add.py", "");
        int _Callint = python._Callint("add_num", 5, 8);
        Log.e("ssssss", "_Callint: " + _Callint);


        Object add_num1 = python._Call("add_num", 1, 6);
        int a = (int) add_num1;
        Log.e("aaa", a + "");

        tv1.setText("python中计算5+8:   " + _Callint + "");
        tv2.setText("python中计算1+6:   " + a + "");


        short[] arrS = {456, 254, 693};  //get_array
        Object get_array = python._Call("get_array", arrS);
        String s = get_array.toString();
//        short[] aaa = (short[]) get_array;
        Log.e("ccc", "aaa.len: " + s);

        Object get_str = python._Call("get_Str");
        Log.e("dddd", "get_str: " + (String) get_str);

        tv3.setText("往python中传递一个数组 {456, 254, 693},python中获取第一个值并返回:   " + s + "");
        tv4.setText("python返回一个字符串:   " + (String) get_str + "");


        Object get_time = python._Call("get_time");
        Log.e("tttt","get_time: "+get_time);

    }


    private void copyFile(Activity c, String Name, String desPath) throws IOException {
        File outfile = null;
        if (desPath != null)
            outfile = new File("/data/data/" + getPackageName() + "/files/" + desPath + Name);
        else
            outfile = new File("/data/data/" + getPackageName() + "/files/" + Name);
        //if (!outfile.exists()) {
        outfile.createNewFile();
        FileOutputStream out = new FileOutputStream(outfile);
        byte[] buffer = new byte[1024];
        InputStream in;
        int readLen = 0;
        if (desPath != null)
            in = c.getAssets().open(desPath + Name);
        else
            in = c.getAssets().open(Name);
        while ((readLen = in.read(buffer)) != -1) {
            out.write(buffer, 0, readLen);
        }
        out.flush();
        in.close();
        out.close();
        //}
    }


}

好了,大功告成,总之现在是可以调用了,还不知道在复杂的python代码下能不能经得起考验 ,反正目前这样看着是没有问题的;有问题及时讨论。。。
另外,刚开始网上找解决办法看的这篇文章: https://blog.csdn.net/yingshukun/article/details/78571992
这里面也有其他方式调用python,有兴趣也可以看看;
此处谢谢大佬分享。


--结束END--

本文标题: android 调用 python

本文链接: https://lsjlt.com/news/184432.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • android 调用 python
    我这里使用AS,如果使用ec开发的直接看 http://www.srplab.com/cn/index.html 官方下载的开发包 里面有demo,我下载了可以跑通; 不管是不是AS和ec,开始还是去看下CLE官网的开发...
    99+
    2023-01-31
    android python
  • python调用调用Linux命令
    如何调用Linux命令下面代码演示了调用一个shell命令, 其中,命令的输出会存储到result变量中, 而命令的返回值,则存储到exitcode中,由此可见,调用shell命令还是很方便的:import commandsexitcode...
    99+
    2023-01-31
    命令 python Linux
  • python调用golang并回调
    最近折腾python交互,也真够呛的,一连玩了好几天,被虐的不要不要的。天天各种百度,Google之间。好吧,废话少说,转入我们的正题。其实,py调用go一般的函数,只是第一道坎,正主其实是py调用go,并且go还回调py!!!网上其实这...
    99+
    2023-01-31
    回调 python golang
  • C# 调用Python
    一、简介 IronPython 是一种在 NET 和 Mono 上实现的 Python 语言,由 Jim Hugunin(同时也是 Jython 创造者)所创造。 Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性...
    99+
    2023-10-07
    c# python
  • Python调用DLL
    C语言中的函数默认是__cdecl调用,C++中可用__stdcall来显示声明调用,但也可以用extern “C” 用python调用dll时需要根据不同的调用约定而使用不同的函数。但是不管什么调用,最后都必须用extern “C”...
    99+
    2023-01-31
    Python DLL
  • python调用tcl
          今天遇到一个问题,一个设备的接口API都是tcl脚本形式的,但是我的code都是python的,然后python需要调用tcl。以下是简单的解决方法。 先写一个tcl脚本(求阶乘)helloworld.tcl: #!usr/bi...
    99+
    2023-01-31
    python tcl
  • python调用PHP
    . 调用php 方法一: import subprocess #simple caller, disguard output subprocess.call("php /path/to/my/old/script.php")...
    99+
    2023-01-31
    python PHP
  • python调用caffe
    首先需要安装caffe for python,安装过程可以参考:http://blog.csdn.net/u011961856/article/details/76557509 python 中调用caffe库函数为: import ca...
    99+
    2023-01-31
    python caffe
  • Python调用autoit
    1. 安装pywin32模块,地址:http://sourceforge.net/projects/pywin32/  选择对应的版本下载 2.从autoit3\AutoItX下找到AutoItX3_x64.dll AutoitX.dll...
    99+
    2023-01-31
    Python autoit
  • Python调用Mysql
     最近在学习Python,发现Python的众多类库给Python开发带来了极大的便利性。 由于项目中使用Mysql,就考虑尝试使用Python调用Mysql,方便写一些调试用的小程序代码。花了半天差了些资料,自己动手,做了个简单的demo...
    99+
    2023-01-31
    Python Mysql
  • php调用python
    php文件: <php $program="/usr/bin/python ./a.py "; #注意使用绝对路径 $g='b'; $p=exec($program.$g);echo $p; pythond文件:#!usr/bin/...
    99+
    2023-01-31
    php python
  • Golang调用Python
    摘要: Python是时髦的机器学习御用开发语言,Golang是大红大紫的新时代后端开发语言。Python很适合让搞算法的写写模型,而Golang很适合提供API服务,两位同志都红的发紫,这里就介绍一下正确搅基的办法。 ![干他一炮...
    99+
    2023-01-31
    Golang Python
  • python 调用grep
    #因为我现在还有找到在大量文件查找python实现的好方法。 #实现采用了grep的方法。 #使用了os.popen而不是subprocess中的Popen,因为前者的参数更简单 #不知subprocess中的Popen是否有更好的地方?...
    99+
    2023-01-31
    python grep
  • Python SOAP 调用
    python编写SOAP服务   SOAP简介引用 简单对象访问协议(SOAP,全写为Simple Object Access Protocol)是一种标准化的通讯规范,主要用于Web服务(web service)中。SOAP的出...
    99+
    2023-01-31
    Python SOAP
  • Python调用ansible2.4
    代码如下:#!/usr/bin/env python import json import shutil from collections import namedtuple from ansible.parsing.dataloade...
    99+
    2023-01-31
    Python
  • Python调用:'get_column
    在学习《Python编程快速上手》12.3.4:列字母和数字之间的转换按照书上的代码做练习,结果输出如下:ImportError: cannot import name 'get_column_letter'导入错误:不能导入'get_co...
    99+
    2023-01-31
    Python get_column
  • scala调用python
    scala项目中调用python的几种方法 首先在工程目录某个地方建立了一个python文件 test.py import sys def addNum(a, b): return a + b if __name__...
    99+
    2023-01-31
    scala python
  • python调用api接口教程(Python调用ChatGPT-3.5-API)
    要在Python中调用ChatGPT-3.5-API,您需要使用Python的请求库和json库来发送HTTP请求和处理返回的JSO...
    99+
    2023-09-22
    python
  • 利用Python调用HBASE
    利用Python调用HBASE的 需要安装thrift hbase-thrift 启动hbase的thrift服务:bin/hbase-daemon.sh start thrift 默认端口是9090mysql 到hbase的数据同步: 1...
    99+
    2023-01-31
    Python HBASE
  • android调用WebService实例分析
    本文实例讲述了android调用WebService的方法。分享给大家供大家参考。具体如下: WebService是一种基于SOAP协议的远程调用标准,通过webservice...
    99+
    2022-06-06
    WebService Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作