如何将python应用编译到android运行

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
容器镜像服务 ACR,镜像仓库100个 不限时长
函数计算FC,每月15万CU 3个月
简介: 【6月更文挑战第27天】本文介绍在Ubuntu 20上搭建Android开发环境,包括安装JRE/JDK,设置环境变量,添加i386架构,安装依赖和编译工具。并通过`p4a`命令行工具进行apk构建和清理。

1 简介

本文介绍搭建android编译环境,从下载Android SDK、NDK及平台工具,配置~/.bashrc,设定ANDROID_HOME等路径。使用SDK Manager安装Android平台和构建工具。配置p4a以使用SDK、NDK,构建Kivy或SDL2应用,或WebView应用。

treeoflife6.png

2 安装工具环境

Ubuntu20为编译环境

sudo apt install default-jre

sudo apt install default-jdk

添加环境变量

    sudo vim /etc/environment
        JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
    source /etc/environment

3 安装 编译工具依赖

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install -y build-essential ccache git zlib1g-dev python3 python3-dev libncurses5:i386 libstdc++6:i386 zlib1g:i386 openjdk-8-jdk unzip ant ccache autoconf libtool libssl-dev        
  • 下载安装编译工具

4 android SDK编译工具链接

https://dl.google.com/android/repository/commandlinetools-linux-7583922_latest.zip

5 平台工具

wget https://dl.google.com/android/repository/platform-tools_r31.0.3-linux.zip
  • 创建android-sdk 工具目录

结构形如

android-sdk
    platform-tools
    cmdline-tools
        ...
android-ndk-r23b

6 环境变量设置

# Update Bash
sudo nano ~/.bashrc

# Android - SDK Tools & Platform Tools
export ANDROID_HOME=/data/android_pycompare/android-sdk
export PATH=/data/android_pycompare/android-sdk/platform-tools:/data/android_pycompare/android-sdk/cmdline-tools/tools:/data/android_pycompare/android-sdk/cmdline-tools/tools/bin:${PATH}

# Save .bashrc

# Reload Bash
source ~/.bashrc

7 编译环境 创建

$SDK_DIR/tools/bin/sdkmanager "platforms;android-27"
  • 安装构建工具

    $SDK_DIR/tools/bin/sdkmanager --list
    $SDK_DIR/tools/bin/sdkmanager "build-tools;28.0.2"

8 配置p4a 以使用SDK、NDK

编辑您~/.bashrc或其他喜欢的 shell 以包含在 android 上构建所需的新环境变量
Adjust the paths!

export ANDROIDSDK="/data/android_pycompare/cmdline-tools"
export ANDROIDNDK="/data/android_pycompare/android-ndk-r23b"
export ANDROIDAPI="27"  # Target API version of your application
export NDKAPI="21"  # Minimum supported API version of your application
export ANDROIDNDKVER="r23b"  # Version of the NDK you installed

使用以下命令在任何命令上配置 SDK、NDK 和 Android API 的 PATH:

--sdk-dir PATH相当于$ANDROIDSDK
--ndk-dir PATH相当于$ANDROIDNDK
--android-api VERSION相当于$ANDROIDAPI
--ndk-api VERSION相当于$NDKAPI
--ndk-version VERSION相当于$ANDROIDNDKVER

9 构建

指定根工作目录

安装一个 API 平台作为目标

sudo cmdline-tools/bin/sdkmanager "platforms;android-27" --sdk_root=counds

安装构建工具

查看所有选项

$SDK_DIR/tools/bin/sdkmanager --list

# TODO
$SDK_DIR/tools/bin/sdkmanager "build-tools;28.0.2" --sdk_root=counds

10 Kivy 或 SDL2 应用程序

要构建应用程序,你需要指定名称,版本,一包标识符,您要使用的引导(SDL2为kivy或SDL2应用程序)和要求

p4a apk --private $HOME/code/myapp --package=org.example.myapp --name "My application" --version 0.1 --bootstrap=sdl2 --requirements=python3,kivy

注意 --requirements:您必须添加应用程序运行所需的所有库/依赖项。 例子:--requirements=python3,kivy,vispy。对于 SDL2 应用程序, 不需要 kivy,但您需要添加您可能使用的任何包装器(例如pysdl2)。

这个p4a apk ...命令使用python3、 kivy以及您在需求中指定的所有其他内容构建发行版。它将使用 SDL2 引导程序打包,并生成一个.apk文件。

test

p4a apk --private ./cound --package=link.letschats.counds --name "counds" --version 0.1 --bootstrap=sdl2 --requirements=python3,kivy --sdk_root=counds

test2

p4a apk --private ./cound --package=link.letschats.counds --name "counds" --version 0.1 --bootstrap=sdl2 --requirements=python3,kivy --sdk_root=counds --android_sdk=./android-sdk/cmdline-tools/bin/ --android_ndk=android-ndk-r23b --ignore-setup-py

11 构建一个 WebView 应用程序

要构建您的应用程序,您需要有一个名称、版本、一个包标识符,并明确使用 webview 引导程序,以及要求:

p4a apk --private $HOME/code/myapp --package=org.example.myapp --name "My WebView Application" --version 0.1 --bootstrap=webview --requirements=flask --port=5000

12 重建

p4a clean_all

  • 仅仅清理构建环境,避免重新下载

p4a clean_builds && p4a clean_dists

  • 高级用法

可用编译工具列表

p4a recipes

目录
相关文章
|
1月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
2月前
|
机器学习/深度学习 Python
堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能
本文深入探讨了堆叠集成策略的原理、实现方法及Python应用。堆叠通过多层模型组合,先用不同基础模型生成预测,再用元学习器整合这些预测,提升模型性能。文章详细介绍了堆叠的实现步骤,包括数据准备、基础模型训练、新训练集构建及元学习器训练,并讨论了其优缺点。
89 3
|
14天前
|
算法 数据处理 Python
高精度保形滤波器Savitzky-Golay的数学原理、Python实现与工程应用
Savitzky-Golay滤波器是一种基于局部多项式回归的数字滤波器,广泛应用于信号处理领域。它通过线性最小二乘法拟合低阶多项式到滑动窗口中的数据点,在降噪的同时保持信号的关键特征,如峰值和谷值。本文介绍了该滤波器的原理、实现及应用,展示了其在Python中的具体实现,并分析了不同参数对滤波效果的影响。适合需要保持信号特征的应用场景。
73 11
高精度保形滤波器Savitzky-Golay的数学原理、Python实现与工程应用
|
23天前
|
数据挖掘 vr&ar C++
让UE自动运行Python脚本:实现与实例解析
本文介绍如何配置Unreal Engine(UE)以自动运行Python脚本,提高开发效率。通过安装Python、配置UE环境及使用第三方插件,实现Python与UE的集成。结合蓝图和C++示例,展示自动化任务处理、关卡生成及数据分析等应用场景。
96 5
|
1月前
|
缓存 开发者 Python
深入探索Python中的装饰器:原理、应用与最佳实践####
本文作为技术性深度解析文章,旨在揭开Python装饰器背后的神秘面纱,通过剖析其工作原理、多样化的应用场景及实践中的最佳策略,为中高级Python开发者提供一份详尽的指南。不同于常规摘要的概括性介绍,本文摘要将直接以一段精炼的代码示例开篇,随后简要阐述文章的核心价值与读者预期收获,引领读者快速进入装饰器的世界。 ```python # 示例:一个简单的日志记录装饰器 def log_decorator(func): def wrapper(*args, **kwargs): print(f"Calling {func.__name__} with args: {a
44 2
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
探索未来编程:Python在人工智能领域的深度应用与前景###
本文将深入探讨Python语言在人工智能(AI)领域的广泛应用,从基础原理到前沿实践,揭示其如何成为推动AI技术创新的关键力量。通过分析Python的简洁性、灵活性以及丰富的库支持,展现其在机器学习、深度学习、自然语言处理等子领域的卓越贡献,并展望Python在未来AI发展中的核心地位与潜在变革。 ###
|
2月前
|
机器学习/深度学习 自然语言处理 语音技术
Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧
本文介绍了Python在深度学习领域的应用,重点讲解了神经网络的基础概念、基本结构、训练过程及优化技巧,并通过TensorFlow和PyTorch等库展示了实现神经网络的具体示例,涵盖图像识别、语音识别等多个应用场景。
84 8
|
17天前
|
存储 缓存 算法
探索企业文件管理软件:Python中的哈希表算法应用
企业文件管理软件依赖哈希表实现高效的数据管理和安全保障。哈希表通过键值映射,提供平均O(1)时间复杂度的快速访问,适用于海量文件处理。在Python中,字典类型基于哈希表实现,可用于管理文件元数据、缓存机制、版本控制及快速搜索等功能,极大提升工作效率和数据安全性。
52 0
|
19天前
|
Shell 开发工具 Python
如何在vim里直接运行python程序
如何在vim里直接运行python程序
|
2月前
|
设计模式 开发者 Python
Python编程中的设计模式应用与实践感悟####
本文作为一篇技术性文章,旨在深入探讨Python编程中设计模式的应用价值与实践心得。在快速迭代的软件开发领域,设计模式如同导航灯塔,指引开发者构建高效、可维护的软件架构。本文将通过具体案例,展现设计模式如何在实际项目中解决复杂问题,提升代码质量,并分享个人在实践过程中的体会与感悟。 ####