Android与Python混合编程

前言

早在2017年的时候,出于业余兴趣,我就开始研究关于Python移植到Android上的实现方案,我一直希望能实现Android与Python的混合编程,并为此写了一系列博客,我希望借助JNI技术,实现Java与Python的交互。或许是出于上班忙,时间少,精力有限,人的惰性等等原因,一直没有实现一套框架,降低Android与Python混编的难度,做到尽可能封装C语言代码,让使用者无需掌握NDK开发,C语言编程等。原理是早已走通了,剩下的就是苦力活,写C代码,写JNI代码,对接口一一封装。

现在终于不用遗憾了,因为已经有人做了我一直想做的事,而且是以我想要的思路。我一直关注着Android与Python混合编程的信息,当我看到Chaquopy框架时,真的难掩的开心,比我自己实现的还要开心!

如果有人想探寻Android与Python的混编的原理与实现,那我之前的写的博客还能派上一点用场

Android 平台的Python——基础篇(一)

Android 平台的Python——基础篇(一)

Android 平台的Python——JNI方案(二)

Android 平台的Python——JNI方案(二)

Android 平台的Python——CLE方案实现(三)

Android 平台的Python——CLE方案实现(三)

Android 平台的Python——第三方库移植

Android 平台的Python——第三方库移植

Android 平台的Python——编译Python解释器

Android 平台的Python——编译Python解释器

Chaquopy是什么?

简单的直观的解释,它是在Android Studio中基于Gradle的构建系统实现的一个插件。它可以帮助我们用最简便的方式实现Android技术与Python混合编程。甚至对于Python的忠实拥趸来说,可以完全使用Python语言开发一个apk,基本不用写Java代码。

实际上Chaquopy并不仅仅是一个插件那么简单,它是一套框架。gradle插件这部分只是用来打包apk的而已

基础用法-快速入门

首先使用Android studio创建一个hello工程,快速编写代码感受一下

请先确保你当前电脑上的Python环境可用,Chaquopy是根据当前电脑上的Python版本来选择集成对应的版本解释器到apk中的。如你的电脑上有多个Python版本,可通过配置明确指定对应的版本

defaultConfig {
    python {
        buildPython "C:/Python36/python.exe"
    }
}

配置依赖

工程根目录下的 build.gradle

buildscript {
    repositories {
        google()
        jcenter()
        // 设置仓库
        maven { url "https://chaquo.com/maven" }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.1'
        // 导入Chaquopy框架的包
        classpath "com.chaquo.python:gradle:6.3.0"
    }
}

app模块下的 build.gradle

apply plugin: 'com.android.application'
// 应用插件
apply plugin: 'com.chaquo.python'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "org.hello"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"

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

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
}

配置完成后,同步一下gradle,网络状况不良可能会失败,多同步几次,亲测无需代理,同步成功后,所需的依赖就准备好了

编写代码

同步成功后,在工程中的main目录下会生成python文件夹,如未生成,手动生成一个即可,该目录即用来存放我们自己编写的python代码

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("org.hello.JavaBean")
    jb = JavaBean("python")
    jb.setData("json")
    jb.setData("xml")
    jb.setData("xhtml")
    return jb
Java代码

MainActivity.java

package org.hello;

import android.support.v7.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 
  • 22
    点赞
  • 121
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 47
    评论
评论 47
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程之路从0到1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值