在android app工程中调用python代码

安卓怎么调用python3 可以使用 python-for-android 库来在 Android 设备上运行 Python 代码。这个库可以将 Python 解释器和你的 Python 代码打包到一个 APK 文件中,然后在 Android 设备上安装该 APK 文件即可运行你的 Python 代码。 要使用 python-for-android,首先需要在电脑上安装 python-for-android 的依赖,具体方法... 阅读详情

本示例以Chaquopy 16.0为基础实现,使用android studio 版本android-studio-2024.2.2.13-linux。

1、直接用android studio新建一个Native C++工程(其他类型工程我没有试过,不清除是否可行)

2、修改gradle相关文件:

2.1 修改./gradle/libs.versions.toml

        

[versions]
agp = "8.8.0"
pgp = "16.0.0"
junit = "4.13.2"
junitVersion = "1.2.1"
espressoCore = "3.6.1"
appcompat = "1.7.0"
material = "1.12.0"
constraintlayout = "2.2.1"

[libraries]
junit = { group = "junit", name = "junit", version.ref = "junit" }
ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
material = { group = "com.google.android.material", name = "material", version.ref = "material" }
constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" }

[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
android-python = { id = "com.chaquo.python", version.ref = "pgp" }

第3行pgp = "16.0.0"和最后一行android-python = { id = "com.chaquo.python", version.ref = "pgp" }是添加的必要设置。

2.2 修改./build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
    alias(libs.plugins.android.application) apply false
    alias(libs.plugins.android.python) apply false
}

其中alias(libs.plugins.android.python) apply false是添加的必要配置。

2.3 修改./app/build.gradle

plugins {
    alias(libs.plugins.android.application)
    alias(libs.plugins.android.python)
}

android {
    namespace 'com.example.myapplication'
    compileSdk 35

    defaultConfig {
        applicationId "com.example.myapplication"
        minSdk 30
        targetSdk 35
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        python {
            pip {
                install "six"
                install "opencv-python"
            }
        }
        ndk {
            abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_11
        targetCompatibility JavaVersion.VERSION_11
    }
    externalNativeBuild {
        cmake {
            path file('src/main/cpp/CMakeLists.txt')
            version '3.22.1'
        }
    }
    buildFeatures {
        viewBinding true
    }
}

dependencies {

    implementation libs.appcompat
    implementation libs.material
    implementation libs.constraintlayout
    testImplementation libs.junit
    androidTestImplementation libs.ext.junit
    androidTestImplementation libs.espresso.core
}

其中

        python {
            pip {
                install "six"
                install "opencv-python"
            }
        }
        ndk {
            abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
        }

为添加必要设置,pip部分可以按照自身需要的python库进行设置。

3.添加python代码

在./app/src/main目录下创建python目录

在./app/src/main/python目录下创建python源码文件,如main.py

from six.moves import input
import cv2 as cv
import numpy as np
from gaussian_mix import make_gaussians

def main(dir=""):
    print("Enter your name, or an empty line to exit.")
    cluster_n = 5
    img_size = 512

    # generating bright palette
    colors = np.zeros((1, cluster_n, 3), np.uint8)
    colors[0,:] = 255
    colors[0,:,0] = np.arange(0, 180, 180.0/cluster_n)
    colors = cv.cvtColor(colors, cv.COLOR_HSV2BGR)[0]
    print(colors.shape)
    print('sampling distributions...')
    points, _ = make_gaussians(cluster_n, img_size)

    term_crit = (cv.TERM_CRITERIA_EPS, 30, 0.1)
    _ret, labels, _centers = cv.kmeans(points, cluster_n, None, term_crit, 10, 0)

    img = np.zeros((img_size, img_size, 3), np.uint8)
    for (x, y), label in zip(np.int32(points), labels.ravel()):
       c = list(map(int, colors[label]))

       cv.circle(img, (x, y), 1, c, -1)
    print(img.shape)
    cv.imwrite(dir + "/" + "img.png", img)
    return "python test out"
gaussian_mix.py
#!/usr/bin/env python

# Python 2/3 compatibility
from __future__ import print_function
import sys
PY3 = sys.version_info[0] == 3

if PY3:
    xrange = range

import numpy as np
import cv2 as cv

from numpy import random

def make_gaussians(cluster_n, img_size):
    points = []
    ref_distrs = []
    for _i in xrange(cluster_n):
        mean = (0.1 + 0.8*random.rand(2)) * img_size
        a = (random.rand(2, 2)-0.5)*img_size*0.1
        cov = np.dot(a.T, a) + img_size*0.05*np.eye(2)
        n = 100 + random.randint(900)
        pts = random.multivariate_normal(mean, cov, n)
        points.append( pts )
        ref_distrs.append( (mean, cov) )
    points = np.float32( np.vstack(points) )
    return points, ref_distrs

def draw_gaussain(img, mean, cov, color):
    x, y = mean
    w, u, _vt = cv.SVDecomp(cov)
    ang = np.arctan2(u[1, 0], u[0, 0])*(180/np.pi)
    s1, s2 = np.sqrt(w)*3.0
    cv.ellipse(img, (int(x), int(y)), (int(s1), int(s2)), ang, 0, 360, color, 1, cv.LINE_AA)


def main():
    cluster_n = 5
    img_size = 512

    print('press any key to update distributions, ESC - exit\n')

    while True:
        print('sampling distributions...')
        points, ref_distrs = make_gaussians(cluster_n, img_size)

        print('EM (opencv) ...')
        em = cv.ml.EM_create()
        em.setClustersNumber(cluster_n)
        em.setCovarianceMatrixType(cv.ml.EM_COV_MAT_GENERIC)
        em.trainEM(points)
        means = em.getMeans()
        covs = em.getCovs()  # Known bug: https://github.com/opencv/opencv/pull/4232
        found_distrs = zip(means, covs)
        print('ready!\n')

        img = np.zeros((img_size, img_size, 3), np.uint8)
        for x, y in np.int32(points):
            cv.circle(img, (x, y), 1, (255, 255, 255), -1)
        for m, cov in ref_distrs:
            draw_gaussain(img, m, cov, (0, 255, 0))
        for m, cov in found_distrs:
            draw_gaussain(img, m, cov, (0, 0, 255))

        cv.imshow('gaussian mixture', img)
        ch = cv.waitKey(0)
        if ch == 27:
            break

    print('Done')


if __name__ == '__main__':
    print(__doc__)
    main()
    cv.destroyAllWindows()

4. 添加调用python的代码


        if (!Python.isStarted())
        {
            Python.start(new AndroidPlatform(this));
        }
        Python py = Python.getInstance();
        Log.d(this.getPackageName().toString(), "python test start");
        PyObject pyObject = py.getModule("main").callAttr("main", this.getFilesDir().getPath());
        Log.d(this.getPackageName().toString(), pyObject.toString());

其中


        if (!Python.isStarted())
        {
            Python.start(new AndroidPlatform(this));
        }
        Python py = Python.getInstance();

是初始化,获得python执行对象代码

其中

PyObject pyObject = py.getModule("main").callAttr("main", this.getFilesDir().getPath());

是调用main.py中的main函数,传递一个路径为参数,接收函数的返回值。

同时也可以参考Android App开发教程(二)——透过Chaquopy结合Python第三方库numpy安装与应用-优快云博客

Python图形程序转安卓APP的完整指南 Python作为一门通用编程语言,在移动开发领域一直存在性能与兼容性挑战。通过BeeWare工具链,开发者可以将Python图形界面程序直接打包为安卓APP,无需掌握Java/Kotlin。其核心原理是利用Briefcase打包引擎将Python代码转换为Dalvik字节码,并通过Toga抽象层实现原生UI组件映射。这种技术方案特别适合快速原型验证、算法移植和教育领域,能显著降低移动开发门槛。结合PyJNIus等工具,还能实现摄像头调用、传感器数据获取等高级功能。对于计算密集型任务,采用Python逻辑+原 阅读详情

相关推荐

python和安卓怎么结合,python如何在安卓运行

(本文以Python3为例,Python3是未来,大家都懂的) Python作为一个功能强大又语法简洁的语言,其应用已无需多言。要想在Android平台运行起Python,也有方案实现,其实质就是在Android系统上搭建Python环境。对此Google已经提供了SL4A(Scripting Layer for Android )方案,支持多种脚本语言,除此之外,还可以使用一个叫QPython的app,可以直接在Android上编写以及运行Python代码。

2401_86114424的博客 1194

Android应用中如何使用python

在 Android 应用中使用 Python 可以通过以下几种方式实现: 使用第三方工具将 Python 脚本打包成 Android 应用,例如使用 Kivy 开发 Python 应用。 在 Android 应用中嵌入 Python 解释器,然后调用 Python 代码。有一些项目,例如 python-for-android 和 python-android-launcher,可以帮助开发者在...

weixin_35755188的博客 2995

使用BeeWare将Python图形程序打包为安卓APP的完整指南

Python作为通用编程语言,在跨平台开发领域展现出强大潜力。通过字节码转换和原生接口桥接技术,开发者可以将Python代码转换为移动端可执行文件。BeeWare工具链利用VOC编译器将Python字节码转为JVM字节码,配合Rubicon-Java实现与安卓API的交互,这种技术方案特别适合快速原型开发和教育类应用。在移动开发实践中,该方案能显著降低开发门槛,使Python开发者无需掌握Java/Kotlin就能构建原生安卓应用。通过合理配置Briefcase打包工具和优化APK体积,开发者可以高效地将T

weixin_34128237的博客 418

安卓调用python

安卓设备可以通过使用第三方库来调用 Python 代码。有几种选择可供使用,包括使用 Kivy 构建跨平台应用程序,使用 PyQt 在 Android 设备上构建 GUI 应用程序,或者使用 SL4A(Scripting Layer for Android)在 Android 设备上运行脚本。 如果你想在安卓应用程序中嵌入 Python 代码,你可以使用 Jython,这是一个实现了 Python...

weixin_35756892的博客 1423

Python爬取APP上的数据教程

App抓包原理 1.客户端向服务器发起HTTPS请求 2.抓包工具拦截客户端的请求,伪装成客户端向服务器进行请求 3.服务器向客户端(实际上是抓包工具)返回服务器的CA证书 4.抓包工具拦截服务器的响应,获取服务器证书公钥,然后自己制作一张证书, 将服务器证书替换后发送给客户端。(这一步,抓包工具拿到了服务器证书的公钥) 5.客户端接收到服务器(实际上是抓包工具)的证书后,生成一个对称密钥, 用...

Python追梦 2万+

如何在Android设备上运行Python程序

综上所述,以上是在Android设备上运行Python程序的几种方法。用户可以根据自己的需求和技术偏好选择适合的方法,并按照相应的步骤进行操作。本文将介绍几种在Android上运行Python的方法,并附上相应的源代码示例。在PC上安装Pyqtdeploy,Pyqtdeploy是一个用于打包Python应用程序的工具。在Android设备上安装Kivy应用程序,Kivy是一个用于创建跨平台用户界面的Python库。在Android设备上打开已安装的Kivy应用程序,并加载并运行你的Python文件。

CodeJolt的博客 5672

安卓逆向工程实战:从脱壳到协议分析全流程

逆向工程是分析编译后程序以还原其原始逻辑的重要技术手段,在移动安全领域尤为关键。其核心原理包括动态调试、代码反编译和协议分析等技术,通过Xposed框架等工具实现运行时行为修改。这项技术在安全审计、漏洞挖掘和协议分析等方面具有重要价值,广泛应用于APP安全测试和第三方集成开发场景。以新闻类APP为例,通过fdex2脱壳工具获取DEX文件后,结合jadx反编译工具可还原出接口签名算法,最终实现加密协议逆向。本文通过Genymotion模拟器环境搭建和Xposed模块部署的完整流程,演示了如何破解典型MD5参数

weixin_34009794的博客 405

使用Android Studio编写Python代码

在本文中,我将详细介绍如何在Android Studio中编写Python代码,并附上相应的源代码。通过添加Python支持库和使用kotlinx-coroutines,我们能够轻松地在Android项目中执行Python函数。在接下来的界面中,可以选择Activity的名称和布局文件,但是由于我们是编写Python代码,所以这些选项并不重要。点击Android Studio工具栏中的“Run”按钮,选择模拟器或者连接的设备,然后等待项目构建和安装完成。接下来,让我们开始创建一个新的Python项目。

DevGOOD的博客 1783

从加固原理到实战:手把手教你用Jadx+Python逆向分析App的Token生成逻辑(以某新闻App为例)

本文详细介绍了如何使用Jadx和Python进行安卓逆向工程,以某新闻App为例,解析其Token生成逻辑。从工具链搭建、静态代码分析到签名算法还原,再到通过JPype调用Java代码,手把手教你破解API签名验证机制。文章还涵盖了爬虫系统整合和反反爬虫策略,适合对安卓逆向和爬虫技术感兴趣的开发者。

weixin_30369041的博客 338

[1195]Xposed+FDex2 app脱壳

但是这种把java拿过来直接python调用的方法,不是任何时候都适用的,因为有时候,这段java代码可能是有很多的依赖的包,你运行的时候,就会缺少很多的包,这样就很麻烦,所以用python调用java的情况,这段代码最好不要有太多的依赖,有的app,接口调用的时候,有一个参数sign,要携带上请求接口才行,这个是变动的,你不知道,所以就不能调用通接口,可以通过重放来确定这个参数是不是动态的,下一步就是找到这个signature,然后看他怎么加密的,然后携带上这个signature,才可以请求这个api,

周小董 5063

C语言的文件读取与写入操作

学了一年的C语言了,现在回过头来做一下总结。并且博客开了挺长一段时间却没有谢什么实际的东西。现在做下总结,对之后的学习帮助应该挺大的。与大家共勉! 现在,我先来介绍一下C语言的文件读取与写入的原理和具体操作方法。 C语言文件读取与写入是通过将文件看成一个字符序列进行读入和写出的。所以读取与写入文件就用到了指针,而这个指针是一个特殊的指针,我们称为文件指针。 指针名称是

wzyxdwll的博客 3万+

Android应用逆向——分析反编译代码之大神器

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.youkuaiyun.com/CharlesSimonyi/article/details/52027563   如果说使用dex2jar和JD-GUI获得了一个APP反编译后的JAVA代码,再结合smali代码调试器来进行调试还不够爽,不够畅快的话,下面将介绍一个帮助分析代码执行流程的大神器。这个神器优点很多,不过遗憾的是它有一个致命...

wzlyd1的专栏 1650

基于角谱传播的MATLAB仿真:从相位恢复看自由空间光传播

本文详细介绍了基于角谱传播理论的MATLAB仿真方法,用于模拟自由空间光传播过程。通过傅里叶光学原理,将光场分解为频谱并应用传播相位滤波器,实现了从纯相位物体到可观测衍射图样的仿真。文章结合具体代码,演示了如何利用角谱法进行相位恢复,为计算成像和生物医学检测等领域的研究提供了实用的仿真工具和思路。

weixin_29055699的博客 281

python开发app-如何用python写一个安卓APP?(上)

嘿嘿!被我骗进来了吧!有这种想法的人不在少数,但谁都明白这是不明智的,然而不明智不代表不可行,不管怎样,有一点永远不会变,那就是有这种想法的靓仔靓女一定和小瓦一样帅气逼人!噢耶~Let's Go~~ ——聪明的瓦肯人1 针对这个问题 我劝大伙儿谨慎尝试 谨慎尝试 为什么咧 我把大家骗进来的目的 就是让大家看看 什么叫做 好惨一男的 不过放心 你依然可以看到 这个问题的 可能有效解决方案 然后 你就...

weixin_37988176的博客 3506

Xilinx-复旦微-FPGA-眼图BlockDesign系统制作-针对PCIE系统

XIlinx-复旦微电子-FPGA-眼图BlockDesign系统制作-针对PCIE系统,手把手教你如何建立眼图测试

weixin_43444334的博客 2596

具身智能:从理论突破到场景落地的全解析

具身智能(Embodied Intelligence)是人工智能与机器人学深度融合的前沿领域,其核心在于通过物理实体与环境的动态交互实现智能行为。区别于传统 AI 的 “离身性”(如语音助手仅依赖数据输入),具身智能强调 “智能体通过身体感知世界并反作用于环境”,形成 “感知 - 决策 - 行动” 的闭环。例如,能自主避障的配送机器人、可精准抓取异形物体的机械臂,均通过传感器网络与环境实时互动,在试错中优化行为策略。

LeeKumaの技术Note 2681

python可以编写安卓app嘛,python可以在安卓运行吗

CLE支持python和java之间的交互,同时提供了一个通用的接口,可用于其它多种语言。大家好,本文将围绕python在安卓系统可以编程运行吗展开说明,python程序能不能在安卓手机上跑是一个很多人都想弄明白的事情,想搞清楚python可以在安卓上运行吗需要先了解以下几个事情。大家好,小编来为大家解答以下问题,python在安卓系统可以编程运行吗,python可以编写安卓app嘛,今天让我们一起来看看吧!b: CLE在程序运行的时候,自动从网络上安装,也可以下载库函数,放到工程中。

liuyifan0的博客 1110

基于A*算法的二维栅格地图路径规划与避障MATLAB仿真

本文将介绍如何使用MATLAB编写基于A*算法的二维栅格地图路径规划与避障的仿真程序。我们可以使用二维数组表示地图,其中每个元素表示一个栅格的状态,例如1表示障碍物,0表示可行走区域。接下来,我们需要定义A*算法的节点类。G值表示从起始节点到当前节点的代价,H值是启发式函数估计的从当前节点到目标节点的代价。算法,我们可以有效地找到起始点到目标点的最短路径,并在仿真中进行可视化展示。算法的基本思路是从起始节点开始,按照一定的启发式函数选择下一个节点,直到找到目标节点或者遍历完所有可行走区域。

ByteWhizX的博客 1273

android调用python脚本

前言 文章可以帮你解决android下调用python方法获取返回值,往python函数中传参等。开发环境基于Android studio. 详细介绍 一.环境准备 在官网下载最新的CLE for Android 开发包,其中包含示例工程和API文档。解压开发包,拷贝如下文件 http://www.srplab.com/cn/files/products.html 你可能会遇到的问题 ...

zjy764219923的专栏 9219

【深度学习新浪潮】Qwen门控注意力斩获NeurIPS 2025最佳论文!技术解析与代码实现

Qwen团队的门控注意力机制获得NeurIPS 2025最佳论文,不仅是中国AI研究的重大突破,更是大模型架构创新的重要里程碑。这项研究证明,通过巧妙的架构设计,可以在不显著增加计算成本的前提下,大幅提升模型性能。正如论文所展示的,用一个极其简单的改动,同时解决了Transformer架构中的多个核心问题,这正是优秀研究的价值所在。该技术已成功应用于Qwen3大模型,为通义千问系列产品的性能提升提供了坚实的技术支撑。轻量化大模型设计多模态统一架构专用领域大模型优化边缘计算场景部署。

专注:太空算力、AI infra、异构调度、大模型成本工程 569

sas协议(SAS PL-3)之Zoning功能

1 Zoning overview SAS zoning is implemented by a set of zoning expander devices with zoning enabled that define a zoned portion of a service delivery subsystem (ZPSDS)服务子系统. The zoning expander devices control whether a phy is permitted to participate in

sinat_37817094的博客 1530

安卓开发调用python脚本_android开发调用python脚本

android开发调用python脚本android开发调用python脚本一.环境准备在官网下载最新的CLE for Android 开发包,其中包含示例工程和API文档。解压开发包,拷贝如下文件http://www.srplab.com/cn/files/products.html你可能会遇到的问题1:注意so版本;版本都要一致,从开发包里复制粘贴;2:注意so引入路径;as和ec是有区别的;...

weixin_39926739的博客 1178

《C#零基础入门之百识百例》(七)算数运算符 -- 圆的面积

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C# 有丰富的内置运算符,本文带你学习C# 中算数运算符。

陈言必行 -- Unity游戏开发领域优质博主 3613

android开发调用python脚本

一.环境准备 在官网下载最新的CLE for Android 开发包,其中包含示例工程和API文档。解压开发包,拷贝如下文件 http://www.srplab.com/cn/files/products.html 你可能会遇到的问题 1:注意so版本;版本都要一致,从开发包里复制粘贴; 2:注意so引入路径;as和ec是有区别的; 拷贝 starcore_android_rX.X.jar的arm64-v8a目录内容到工程的libs目录 拷贝starcore_android_rX.X.jar.

u014370269的专栏 4144

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

python毕设安卓校园导航app PC端程序+论文

8] 陈佳佳, 邱晓荣, 熊宇昊, 段莉华. "基于Python的人脸识别技术研究"[J]. 电脑知识与技术, 2023, 19 (08): 34-36+39.[2] 韩文煜. "基于python数据分析技术的数据整理与分析研究"[J]. 科技创新与应用, 2020, No.296(04): 157-158.[11] 王雄伟, 侯海珍. "大数据专业Python程序设计课程建设探究"[J]. 知识窗(教师版), 2023, (10): 117-119.2024年02月: 根据需求分析,进行详细设计;

小许程序设计 1009

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

我使用的是虚拟android设备,故对应的CLE中库文件版本为/x86,你可以根据自己开发环境找到对应的版本。调用的python版本为3.7,以下为主要步骤: 1、环境准备 在官网下载最新的CLE for Android 开发包,其中包含示例工程和API文档。 解压开发包,拷贝如下文件 拷贝 starcore_android_rX.X.jar到工程的libs目录。(该jar文件在download...

u011117131的博客 7848
上一篇: docker空间清理
下一篇: 操作input子系统,用模拟按键输入解锁ubuntu锁屏
robitmind
博客等级 码龄14年 35粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值