
python打包成apk界面设计,python打包成安装文件
bashrc文件可在主目录中找到(隐藏的文件,点击右上角的三条杠即勾选显示隐藏文件即可找到)。链接:链接:https://pan.baidu.com/s/1OyeqhpdxpHiEnlEnfZ9oHw提取码:avmd。
这篇文章主要介绍了如何将python程序打包成apk文件,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。
kivy 打包安卓apk
想将kivy编写Python程序打包成apk,在网上找了一些别人配置的环境,发现版本比较旧了,打包出现一堆问题,因此想自己搭一个,虽然过程艰辛,也算是有所收获,记录下来,方便自己回顾。
一、环境配置:
win10系统
kivy==2.1.0
二、目的:
自己通过kivy(2.1.0)写了一个拍照的程序(调用了opencv),希望通过buildozer工具,将其打包成apk,安装到安卓手机上使用python工程师考什么证书。
三、过程记录:
1、安装ubuntu 22.04虚拟环境:
选用ubuntu22.04原因:尝试过18.04和20.04,均失败了,最后选用了ubuntu22.04 LTS版,成功打包
1.1 virtualbox官网下载virtualbox,安装到电脑;
如果下载的virtualbox不能使用,再去官网上下载拓展包,安装到电脑即可。
1.2 ubuntu官网下载ubuntu 22.04 LTS:
1.3 在virtualbox中安装ubuntu虚拟环境:
参考教程:使用VirtualBox安装Linux虚拟机,避坑指南.
在安装时,分配给虚拟机的内存建议大于35G:
1.4 建立共享文件夹,主机与虚拟机共享粘贴板::
共享文件夹是实现主机与虚拟机文件传输的通道。
① 在“设置”中添加要共享的文件夹:
勾选“固定分配”和“自动挂载”,保存。
② 共享粘贴板:
“设置”→“常规”→“高级”,
“共享粘贴板”和“拖放”均设为“双向”。
③ 安装增强功能:
安装后,点击“VBox_GAs_7.0.10”中的 “VBoxLinuxAdditions.run” ,右键选择“作为程序运行”,完成安装。即可看到“sf_”开头的共享文件夹。
④ 重启虚拟机,设置完成。
⑤ 如果显示没有访问共享文件夹的权限,在终端执行以下语句:
sudo usermod -aG vboxsf $(你的用户名)
重启是虚拟机即可。
2、在虚拟机的主目录下,创建一个空文件夹 “pcaking”,进入该文件夹,右键选择“在终端打开”,在该终端中执行后面的所以命令。
3、在虚拟环境中安装Python3.9
ubuntu22.04中自带的是Python3.10,通过其打包的apk调试时显示没有opencv模块,查了一圈都说在 opencv 4.5.3.56 版本以后,打包经常出现这个问题,因此需要退回4.5.3.56版本,但是在python3.10环境下,一直无法安装opencv 4.5.3.56版本,存在版本冲突。
因此,我们这里需要在虚拟环境中安装python3.9,并在该环境下进行打包。
安装参考:在 Ubuntu 22.04 上安装 Python 3.9(多版本适用)。
在安装3.9以后,不要尝试卸载原来的3.10,因为有些环境依赖于3.10,卸载了可能环境就蹦了!!!
4、配置buildozer:
根据官方文档,配置buildozer工具:
①安装buildozer包
pip3 install --user --upgrade buildozer
②安装依赖
sudo apt update
sudo apt install -y git zip unzip openjdk-11-jdk python3-pip autoconf libtool pkg-config zlib1g-dev libncurses5-dev libncursesw5-dev libtinfo5 cmake libffi-dev libssl-dev
pip3 install --user --upgrade Cython==0.29.33 virtualenv # the --user should be removed if you do this in a venv
官网推荐的openjdk-17在打包报错,改用openjdk-11后解决。
③ 在 ~/.bashrc 文件最后一行加入下列内容:
export PATH=$PATH:~/.local/bin/
.bashrc文件可在主目录中找到(隐藏的文件,点击右上角的三条杠即勾选显示隐藏文件即可找到)。
5、打包:
首先将你需要打包的程序复制到2中创建的 “packing” 文件夹中,其中,主程序命名为 “main.py”(必须这样)。
① 生成 “buildozer.spec” 文件,这个文件将会控制你的打包配置:
buildozer init
“buildozer.spec”的配置及介绍,查看文章 kivy Buildozer文件参数介绍或者去官网看介绍 buildozer.spec文件介绍。
其实官网介绍也比较简单,想深入了解的可以查看生成的 “buildozer.spec” 文件,里面有注释!!!
也可以将自己写好的 “buildozer.spec”放入到当前文件夹,直接执行第②步。
注意:
在 “buildozer.spec” 中,有一行是添加所需的依赖包:
# (list) Application requirements
# comma seperated e.g. requirements = sqlite3,kivy
requirements = python3==3.9.12,hostpython3==3.9.12,kivy==2.1.0,opencv
其中依赖包的写法要对应官网要求的recipes:点击查看recipes。
此外,有时候指明版本号可能会出现网络问题,去掉版本号即可!
② 配置Android环境:
buildozer -v android debug
第一次打包过程比较长,耐心等待~~~
6、实体机调试:
我的手机型号:redmiK30 pro
① 下载adb调试工具:
参考文章:Windows 10 如何安装adb工具并配置变量环境
② 调试语句:
以下语句均在电脑终端输入(“win+R”→输入“cmd”进入);
还需要进入手机的开发者选项,打开无线调试功能!
# 1、无线调试(不需要无线调试的跳过):
adb tcpip 5555(PS:5555是端口号,可以随意地指定)
# 首先要查找到手机的IP地址,比如我的是192.168.0.22,然后执行连接命令:
adb connect 192.168.0.22:5555
# 2、查看是否连接成功(需要保证只有一台设备连接)
adb devices
# 3、调试
adb shell #获取权限
adb shell pm list packages #查看实体机apk
adb install C:\Users\20483\kivy_share\XXX.apk #安装apk,后面为apk在电脑上的绝对路径
run-as com.20483.myapp #驱动程序
# com.20483.myapp = package.domain(= com.20483) + package.name(= myapp)
cd files/app/.kivy/logs #进入日志文件夹,隐藏文件
ls #可查看日志名 kivy_xx-xx-xx_0.txt
cat kivy_xx-xx-xx_0.txt #查看日志内容
7、遇到的问题及解决方法:
Q1: 调试时缺包:
A: 在打包前,请务必现在虚拟机上保证程序能够运行(由于是虚拟机,有时候调用摄像头易出错,多尝试几遍)。
在程序能在虚拟机上运行的前提下,如果出现缺包起来,检查 “buildozer.spec”中依赖包是否写入或规范!
Q2: “gradlew failed!”:
[WARNING]: ERROR: /root/Hidden/.buildozer/android/platform/build/dists/sets/gradlew failed!
A:
1、进入 /home/your_user/.gradle/wrapper/dists 文件夹,可以看到gradlew包;
2、进入链接下载对应版本的gradlew包;
3、将2中下载的包,替换原来的gradlew包;
4、重新执行打包命令即可。
Q3 :“failed to run autopoint”:
autoreconf: failed to run autopoint: No such file or directory
A: 在终端执行:
sudo apt install autopoint
Q4 :NDK version conflict in buildozer for Kivy app:
[ERROR]: Build failed: Please set the environment variable 'LEGACY_NDK' to point to a NDK location with gcc/gfortran support (supported NDK version: 'r21e')
A:
解决方法参考:链接1;链接2。
1、修改“buildozer.spec”文件中的 android.ndk 选项:
android.ndk = 21e
2、执行:
buildozer -v android debug
3、此时可以发现,在“ /home/wuqx1999/.buildozer/android/platform ”文件中,出现 “ android-ndk-r21e” 文件夹;
4、进入 r21e 下载以下两个压缩包到“packing”文件中:
5、返回终端,依次执行:
#安装 aarch64-linux-android-4.9
# 使用rm -rf" 命令删除指定目录及其子目录
rm -rf $(ANDROID_NDK_HOME_LEGACY)/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/
# 使用 "mkdir" 命令创建一个指定目录
mkdir $(ANDROID_NDK_HOME_LEGACY)/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/
# 使用 "tar -xf" 命令将指定的 tar 包解压到指定目录
tar -xf $(ANDROID_NDK_GFORTRAN_ARCHIVE_ARM64) -C $(ANDROID_NDK_HOME_LEGACY)/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/ --strip-components 1
# 使用 "rm -f" 命令删除指定文件
rm -f $(ANDROID_NDK_GFORTRAN_ARCHIVE_ARM64)
#安装arm-linux-androideabi-4.9
rm -rf $(ANDROID_NDK_HOME_LEGACY)/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/
mkdir $(ANDROID_NDK_HOME_LEGACY)/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/
tar -xf $(ANDROID_NDK_GFORTRAN_ARCHIVE_ARM) -C $(ANDROID_NDK_HOME_LEGACY)/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/ --strip-components 1
rm -f $(ANDROID_NDK_GFORTRAN_ARCHIVE_ARM)
_其中:
1、ANDROID_NDK_HOME_LEGACY 为 android-ndk-r21e 的文件路径:
比如我的为:/home/wuqx1999/.buildozer/android/platform/android-ndk-r21e_
2、ANDROID_NDK_GFORTRAN_ARCHIVE_ARM64 = gcc-arm64-linux-x86_64.tar.bz2
(gcc-arm64-linux-x86_64.tar.bz2为下载的第一个压缩包的相对路径)
3、ANDROID_NDK_GFORTRAN_ARCHIVE_ARM = gcc-arm-linux-x86_64.tar.bz2
(gcc-arm-linux-x86_64.tar.bz2为下载的第二个压缩包的相对路径)
6、将1中对 buildozer.spec 的修改注释掉,既改为:
# android.ndk = 21e
7、修改默认使用的NDK:
export LEGACY_NDK=~/.buildozer/android/platform/android-ndk-r21e
8、重新执行打包命令,问题解决:
buildozer -v android debug
Q5 :提示某个包不适用于 arm64框架:
A: 可能是某些第三方包,无法在安卓框架上使用。
四、写在最后:
1、如果嫌麻烦,可使用我搭建的环境:
1.1 .ova下载地址:
链接:链接:https://pan.baidu.com/s/1OyeqhpdxpHiEnlEnfZ9oHw
提取码:avmd
password: 681843242
1.2 ova导入:
① 打开virtualbox,选择“导入虚拟电脑”:
② 选择下载的.ova文件:
③ 修改电脑储存位置,点击“完成”,等待导入完成,启动即可。
1.3 进入主目录中的packing文件,将要打包的文件复制到该文件夹,即可进行打包:
一些打包细节看前面内容。
2、说明:
2.1 由于时间较久,其中一些细节或bug描述可能不够详细,将就看吧。
2.2 欢迎大家多多交流,不喜勿喷。
更多推荐
所有评论(0)