美文网首页后端砖头AndroidAndroid
Android与Python实现混编

Android与Python实现混编

作者: 钉某人 | 来源:发表于2022-10-19 11:07 被阅读0次

    Python是非常实用的编程语言,学习简单,有丰富的三方库,如果想在Android手机中使用Python,实现Android和Python的混编,可以使用Chaquopy。

    Chaquopy是Android基于gradle的构建系统的插件。它可以在满足以下要求的任何应用程序中使用:

    • 在项目的build.gradle文件,Android的gradle插件版本应该在4.1到7.2之间。Chaquopy的旧版本支持最早可追溯到2.2的旧版本。
    • minSdkVersion必须至少为16。Chaquopy的旧版本支持最早可以追溯到15的旧版本。

    基础设置

    在模块构建的build.gradle中,在android plugin之后应用Chaquopy插件。

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

    在项目的build.gradle中,设置如下:

    buildscript {
        repositories {
            maven{url "https://chaquo.com/maven"}
            google()
            jcenter()
            mavenCentral()
    
        }
        dependencies {
            classpath "com.android.tools.build:gradle:4.2.2"
            classpath "com.chaquo.python:gradle:12.0.1"
        }
    }
    
    allprojects {
        repositories {
            maven{url "https://chaquo.com/maven"}
            google()
            jcenter()
            mavenCentral()
    
        }
    }
    
    

    ABI选择

    Python解释器是一个本地组件,所以你必须使用abiFilters设置来指定你希望应用程序支持哪些ABIs。

    目前可用的api有:

    • armeabi-v7a,几乎所有Android设备都支持。
    • arm64-v8a,由最新的Android设备支持。
    • x86,用于Android模拟器。
    • x86_64,用于Android模拟器。

      在开发过程中,你可能想要启用所有这些功能,例如:
     defaultConfig {
        ndk {
           abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
        }
    }
    

    实际上不需要安装NDK,因为Chaquopy的所有本机库都已经预先编译和剥离了。

    每个ABI都会将应用程序的大小增加几个MB,再加上任何本地需求的大小。根据自己的需求,添加需要的ABI。

    Python构建

    默认情况下,chaquopy将尝试使用您的操作系统的标准命令在PATH上查找Python,首先是匹配的小版本,然后是匹配的主版本。

    如果不生效,请使用buildPython设置设置您的Python命令。例如,在Windows上,您可能使用以下其中之一:

    defaultConfig {
        python {
            buildPython "D:/python3.8.3/python.exe"
        }
    }
    

    开发源代码

    默认情况下,Chaquopy会在每个源代码集的Python子目录中查找Python源代码。例如,主源码集的Python代码应该放在src/main/Python中。

    要包含来自其他目录的Python源代码,请使用android.sourceSets。例如:

    android {
        sourceSets {
            main {
                python.srcDir "some/other/dir"
            }
        }
    }
    

    初始化

    chaquopy初始化有两种方式:

    第一种:

    AndroidManifest.xml中<application>使用PyApplication的子类

    第二种:

    AndroidManifest.xml中<application>指定application时,需要启动,如下:

    // "context" must be an Activity, Service or Application object from your app.
    if (! Python.isStarted()) {
        Python.start(new AndroidPlatform(context));
    }
    

    python依赖

    外部Python包可以使用build.gradle中的pip块构建到应用程序中。在这个块中,添加安装行,它可以采用pip install所接受的任何形式。

     defaultConfig {
            python{
                buildPython "D:/python3.8.3/python.exe" //指定python解释器
                pip{
                    options "--extra-index-url","https://pypi.tuna.tsinghua.edu.cn/simple/" //设置下载镜像
                    install "opencv-python"
                    install "requests==2.24.0" //可以指定下载的版本号
                    install "-r", "requirements.txt" //可以将需要导入的三方库在requirements.txt中集中管理,通过此命令统一下载
                }
            }
        }
    

    HelloWorld

    Android调用代码:

    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        public void usePython(View view) {
            Python python = Python.getInstance();
            python.getModule("hello").callAttr("sayHello");
        }
    }
    

    Python实现代码:

    def sayHello():
        print("Hello Python")
    

    官方网站:https://chaquo.com/chaquopy/

    相关文章

      网友评论

        本文标题:Android与Python实现混编

        本文链接:https://www.haomeiwen.com/subject/fisezrtx.html