Python跨平台应用-BeeWare打造移动端应用和构建Android时的异常处理

2023-11-17

目录

简介

安装

创建demo

运行

打包为Windows程序

打包为安卓APP

构建安卓错误处理

>>gradle改为本地

报错1:Could not resolve all artifacts for configuration ':classpath'.

>>解决方案:使用阿里云镜像替代jcenter地址

报错2:No toolchains found in the NDK toolchains folder for ABI with prefix: arm-linux-androideabi

解决方案:下载ndk-r16,解压到android-sdk目录下,重命名文件夹16

>>指定ndk目录

编辑android.toolchain.cmake文件

重新构建安卓应用  briefcase build android

Gradle 版本高于3.5

NDK.dir属性定位NDK方法弃用


持续更新!

简介

Python 语言编写图形界面程序的框架有很多,但是有两款框架号称"一次编写,处处部署",就是Kivy 和 BeeWare ,基于这些个框架编写的图形界面程序,都能够打包为全平台的应用程序,比如:Windows、Linux、macOS、Android、IOS。

Kivy 是一个跨平台的Python GUI,可以在应用程序中使用非本机UI工具包,BeeWare项目是原生Python移动应用,可以构建外观和感觉上对于每个特定移动(和桌面)平台都是100%本机的应用程序,缺点是BeeWare项目仍是一个相对较新的项目。两款框架对比起来其实都差不多,但是Kivy 移动端的打包需要在linux上,不如 BeeWare 方便,所以此处选择了BeeWare

安装

在 Windows 上使用,我们首先需要安装 Git 和 WiX Toolset

ps:python3

pip 工具安装 BeeWare

pip install briefcase

安装Python toga包 一个 Python 原生的, 操作系统原生的 GUI 工具包。

pip install toga

创建demo

使用命令 briefcase new 创建一个应用,命令输入之后,会让我们输入「应用的正式名称」、「应用程序名称」、「域名」、「项目名称」等等信息,也可以直接使用默认值。

 

 

运行

cd到demo,直接运行项目

briefcase dev

  

打包为Windows程序

运行命令,创建应用的脚手架,将会生成一些预配置文件,然后下载依赖的包

briefcase create

构建应用:

briefcase build

运行构建的应用

briefcase run

打包应用,打包完成后,demo\windows目录下会生成一个 .msi 的二进制安装文件

briefcase package

      

 双击

打包为安卓APP

pytest-astropy 0.8.0要求安装以下包,先安装上

pip install pytest-cov
pip install pytest-filter-subpackage

创建应用的安卓脚手架

briefcase create android

构建安卓应用

briefcase build android

运行一下构建好的安卓应用,这里会让选择设备,可以选择 BeeWare 提供的安卓虚拟机或者是在电脑上连接自己的手机

briefcase run android

打包安卓应用

briefcase package android

在 .\android\gradle\Hello World\app\build\outputs 找到打包好的文件

BeeWare 提供了两种打包好的文件,一种是用于上架Google Play 的.aab 格式文件,

一种是用于调试的 .apk 文件

构建安卓错误处理

briefcase build android出现的错误:

>>gradle改为本地

(此处不是错误,可以不改)

#distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
distributionUrl=file:///D:/xxx/az/.gradle/wrapper/dists/gradle-5.4.1-all/3221gyojl5jsh0helicew7rwx/gradle-5.4.1-all.zip

报错1:Could not resolve all artifacts for configuration ':classpath'.

Could not resolve all artifacts for configuration ':classpath'.
   > Could not resolve com.google.guava:guava:27.0.1-jre.

// 解决方案:
在demo\android\gradle\demo的build.gradle中的build.gradle里添加jcenter

>>解决方案:使用阿里云镜像替代jcenter地址

jcenter () {url 'https://maven.aliyun.com/repository/jcenter' }

报错2:No toolchains found in the NDK toolchains folder for ABI with prefix: arm-linux-androideabi

Execution failed for task ':app:stripDebugDebugSymbols'
No toolchains found in the NDK toolchains folder for ABI with prefix: arm-linux-androideabi

打开文件夹 demo\android\gradle\demo\app\.cxx 找到ndk_locator_record.json打开

切换到NDK的的toolchais目录下确认是否有arm-linux-androideabi该工具目录,如果确认没有该工具文件,可在sdk manager中取消勾选ndk–>apply–>卸载后重新安装,也可以借助idea。

找到toolchains文件夹,确实没有arm-linux-androideabi文件夹,打开cmd,mklink /j 创建arm-linux-androideabi文件夹软链接指向 llvm文件夹

(其实是因为版本的问题,高版本和低版本的ndk目录不一样,此处步骤略过,直接下载ndk-r16)

 

mklink /j arm-linux-androideabi llvm
mklink /j aarch64-linux-android llvm
mklink /j x86 llvm
mklink /j x86_64 llvm
mklink /j x86-64 llvm

解决方案:下载ndk-r16,解压到android-sdk目录下,重命名文件夹16

验证ndk: 切换目录D:\xxx\android-sdk-windows\ndk\16,cmd输入ndk-build

>>指定ndk目录

在demo\android\gradle\demo下创建local.properties,内容如下

ndk.dir=D\:\\xxx\\zhuangjiruanjian\\android-sdk-windows\\ndk\\16

如果此时运行还报错:

The CMAKE_C_COMPILER:
      D:/xxxxxxxxxxxx/clang.exe
    is not a full path to an existing compiler tool.

打开CMakeSystem.cmake文件,找到红色圆圈中的文件

编辑android.toolchain.cmake文件

查找  # Toolchain.  关键字

修改set(ANDROID_HOST_TAG windows-x86_64)为set(ANDROID_HOST_TAG windows)

重新构建安卓应用  briefcase build android

然后briefcase package android打包

Gradle 版本高于3.5

Gradle 版本高于3.5,local.properties 文件弃用了,当我创建应用的安卓脚手架后版本就是gradle:4.2.0+同时也遇到了一些问题

NDK.dir属性定位NDK方法弃用

NDK was located by using ndk.dir property. This method is deprecated and will be removed in a future release. Please use android.ndkVersion or android.ndkPath in build.gradle to specify the NDK to use. https://developer.android.com/r/studio-ui/ndk-dir

删除local.properties 中的dir配置,在app/build.gradle 中配置 android{ndkPath}。注意此版本号对应的ndk 版本需存在,文档

android {
    ndkPath  "D:\\xxx\\zhuangjiruanjian\\android-sdk-windows\\ndk/16"
}

其次gradle-wrapper.properties改为对应的版本

distributionUrl=file:///D:/xxx/az/.gradle/wrapper/dists/gradle-6.8.3-all/6czipnbiesy2sl92ioo8dht91/gradle-6.8.3-all.zip

end!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python跨平台应用-BeeWare打造移动端应用和构建Android时的异常处理 的相关文章

  • 如何指定聚类的距离函数?

    我想对给定距离的点进行聚类 奇怪的是 似乎 scipy 和 sklearn 聚类方法都不允许指定距离函数 例如 在sklearn cluster AgglomerativeClustering 我唯一可以做的就是输入一个亲和力矩阵 这将非常
  • Tkinter 菜单删除项

    如何删除任何菜单项 例如我想删除 播放 self menubar Menu self root self root config menu self menubar self filemenu2 Menu self menubar self
  • 将 yerr/xerr 绘制为阴影区域而不是误差线

    在 matplotlib 中 如何将误差绘制为阴影区域而不是误差条 例如 而不是 忽略示例图中各点之间的平滑插值 这需要进行一些手动插值 或者只是获得更高分辨率的数据 您可以使用pyplot fill between https matpl
  • 指示电子邮件的类型

    我有以下自动化程序 它将电子邮件发送给我自己 并添加了特定的链接 import win32com client as win32 import easygui import tkinter as to from tkinter import
  • 数据框 - 平均列

    我在 pandas 中有以下数据框 Column 1 Column 2 Column3 Column 4 2 2 2 4 1 2 2 3 我正在创建一个数据框 其中包含第 1 列和第 2 列 第 3 列和第 4 列等的平均值 ColumnA
  • 使用 Python 3 动态插入到 sqlite

    我想使用 sqlite 写入多个表 但我不想提前手动指定查询 有数十种可能的排列 例如 def insert sqlite tablename data list global dbc dbc execute insert into tab
  • 如何获取numpy.random.choice的索引? - Python

    是否可以修改 numpy random choice 函数以使其返回所选元素的索引 基本上 我想创建一个列表并随机选择元素而不进行替换 import numpy as np gt gt gt a 1 4 1 3 3 2 1 4 gt gt
  • numpy:高效执行数组的复杂重塑

    我正在将供应商提供的大型二进制数组读入 2D numpy 数组 tempfid M N load data data numpy fromfile file dirname fid dtype numpy dtype i4 convert
  • 是否有一个包可以维护所有带有符号的货币列表?

    是否有一个 python 包提供所有 或相当完整 货币的列表与符号 如美元的 有优秀的pycountry 贪财的 https github com limist py moneyed and ccy http code google com
  • 如何使用 opencv python 计算乐高积木上的孔数?

    我正在开发我的 python 项目 我需要计算每个乐高积木组件中有多少个孔 我将从输入 json 文件中获取有关需要计算哪个程序集的信息 如下所示 img 001 red 0 blue 2 white 1 grey 1 yellow 1 r
  • 更改QLineEdit的ClearButton图标

    我想在Windows 10 1909 64位 上的Python 3 8和PyQt5 5 15 0 上更改我的QLineEdit的ClearButton图标 稍后我想在Linux上运行代码 我尝试应用此处找到的代码 如何在 QLineEdit
  • Python 2 的 `exceptions` 模块在 Python3 中丢失了,它的内容到哪里去了?

    一位朋友提到 对于 Python 2 假设您在命令行上的路径环境变量中有它 pydoc exceptions 非常有用 知道它应该可以为他每周节省几分钟的网络查找时间 我自己每周都会用谷歌搜索一次例外层次结构 所以这对我来说也是一个有用的提
  • 为什么这个 if 语句会导致语法错误

    我正在尝试设置一个 elif 语句 如果用户按下 Enter 键 代码将继续 但是我不断遇到语法错误 GTIN 0 while True try GTIN int input input your gtin 8 number if len
  • Python守护进程:保持日志记录

    我有一个将一些数据记录到磁盘的脚本 logging basicConfig filename davis debug log level logging DEBUG logging basicConfig filename davis er
  • 使用 selenium 和 python 来提取 javascript 生成的 HTML?萤火虫?

    这里是Python新手 我遇到的是数据收集问题 我在这个网站上 当我用 Firebug 检查我想要的元素时 它显示了包含我需要的信息的源 然而常规源代码 没有 Firebug 不会给我这个信息 这意味着我也无法通过正常的 selenium
  • numpy polyfit 中使用的权重值是多少以及拟合误差是多少

    我正在尝试对 numpy 中的某些数据进行线性拟合 Ex 其中 w 是该值的样本数 即对于点 x 0 y 0 我只有 1 个测量值 该测量值是2 2 但对于这一点 1 1 我有 2 个测量值 值为3 5 x np array 0 1 2 3
  • 仅允许正小数

    在我的 Django 模型中 我创建了一个如下所示的小数字段 price models DecimalField u Price decimal places 2 max digits 12 显然 价格为负或零是没有意义的 有没有办法将小数
  • PyQt5:如何使QThread返回数据到主线程

    I am a PyQt 5 4 1 1初学者 我的Python是3 4 3 这是我尝试遵循的many https mayaposch wordpress com 2011 11 01 how to really truly use qthr
  • 在matlab中,如何读取python pickle文件?

    在 python 中 我生成了一个 p 数据文件 pickle dump allData open myallData p wb 现在我想在Matlab中读取myallData p 我的Matlab安装在Windows 8下 其中没有Pyt
  • 如何通过点击复制 folium 地图上的标记位置?

    I am able to print the location of a given marker on the map using folium plugins MousePosition class GeoMap def update

随机推荐

  • powerdesigner创建mysql数据库表_使用PowerDesigner创建表并导入到数据库

    使用PowerDesigner创建表并导入到数据库 刚刚学习使用PowerDesigner进行数据库的创建 下面我就分享一下如何创建表并导入到数据库 1 首先到网上下载一下PowerDesigner SQL Service 2008软件并安
  • vue-grid-layout 使用以及所有属性

    vue grid layout 作用 下载及引入 版本 案例 以及所有属性 作用 1 实现桌面拖拽布局功能 2 可调整每个部件的大小 3 可以在不重新构建网格的情况下添加或删除小部件 下载及引入 下载 install with npm 用n
  • Ant design vue 的table实现点击字段,直接在表格编辑功能(举个栗子)

    大概需求 就点击table上某列的字段 然后即可在table上编辑数据 数据失去焦点后即可触发保存的事件 关于无关紧要的代码 你可以不看 因为灭有用 看重点代码 1 table中添加插槽名字如 栗子 重点位置 scopedSlots cus
  • Qt信号槽的两种写法

    Qt信号槽connect是什么 connect 函数的形式 connect sender signal receiver slot type 参数示意 sender 发出信号的对象 signal 发送对象发出的信号 receiver 要接收
  • Sort List

    Merge Sort 链表的merge Sort 就是 找中间结点 算法 merge sorted List 算法 1 快慢指针法定位到中间结点p 从p前面断开 维护prev p是后半部分链表头 得到两个子链表 2 分别递归merge两个子
  • OWTTT

    如何在开放世界进行测试段训练 基于动态原型扩展的自训练方法 本文首次提出一种针对开放世界的测试段训练方法 提高模型泛化能力是推动基于视觉的感知方法落地的重要基础 测试段训练和适应 Test Time Training Adaptation
  • 【网络】静态路由的原理与配置

    路由器的工作原理 路由 是指从源主机到目标主机的转发过程 用来寻找目标地址的位置 路径 路由器 能够将数据包转发到目标地址 并保证是按最佳路径转发的设备 路由器根据路由表转发数据 并以作为工作原理 例题 下图中 主机1 1要发送数据到主机4
  • GIT统计代码量

    GIT统计代码量 Git统计个人提交代码行数 git log format aN sort u while read name do echo en name t git log author name pretty tformat num
  • 【NodeJs】使用ffmpeg将视频webm转换为mp4

    使用Chrome浏览器录制视频文件是webm格式 但是很多媒体播放器是不支持的 不利于分享 需要转换为mp4格式才行 接下来给大家讲 ffmpeg ffmpeg是什么呢 一个免费开源的视频转换工具 一款音视频编解码工具 一组音视频编解码开发
  • Python 输出有颜色的字体

    https www cnblogs com hellojesson p 5961570 html 转载于 https www cnblogs com Presley lpc p 9867058 html
  • typeAliasesPackage的作用

    mybatis和spring整合 typeAliasesPackage自动配置别名
  • JAVA——SWING界面开发

    要开发一个界面 我们一般通过写一个窗体并在这个窗体上放置其它元素组件来实现 一个界面是一个JFrame对象 代码实现如下 package com qsj login1220 public class Login public static
  • 数据结构学习(1)----数组之螺旋矩阵Ⅱ

    题目 给你一个正整数 n 生成一个包含 1 到 n2 所有元素 且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 思路 模拟过程 设置边界 生成一个 n n 空矩阵 res 二维数组 随后模拟整个向内环绕的填入过程 定义当
  • 【PCL】—RANSAC点云分割算法详解

    参考 https www bbsmax com A rV57lnmVdP 1 点云分割的概念 点云分割可谓是点云处理的精髓 也是三维图像相对二维图像最大优势的体现 点云分割的目的是提取点云中的不同物体 从而实现分而治之 突出重点 单独处理的
  • 什么叫机器人编程课

    什么叫机器人编程课 小孩的学习一直都是家长们非常关心和重视一件事情 很多的家长在培养孩子的学习方面也是非常的多的 就拿现在很多的家长给孩子选择机器人编程的课程来说 有的家长对于什么叫机器人编程课并不是很清楚 今天我们就一起来了解一下什么叫机
  • AFX_PMSG数据结构

    AFX PMSG数据结构 定义 typedef void AFX MSG CALL CCmdTarget AFX PMSG void void AFX MSG CALL CCmdTarget AFX PMSG void AFX MSG CA
  • QT5.12在windows上边的安装

    使用国内镜像源在线安装QT 2023 3 25更新 qt国内镜像 Iotfsd的博客 CSDN博客 先下载 STEP1 下载qt online installer Index of official releases online inst
  • 汽车 Automotive > T-BOX GNSS高精定位测试相关知识

    参考 https en wikipedia org wiki Global Positioning System GPS和GNSS的关系 GPS Global Positioning System 全球定位系统是美国军民两用的导航定位卫星系
  • rsa生成公私钥php,php中rsa生成公私钥和加解密

    php中rsa生成公私钥和加解密 注意 php使用RSA时需要开启openssl扩展 生成公私钥 创建公私钥 res openssl pkey new 获取私钥 openssl pkey export res private key 获取公
  • Python跨平台应用-BeeWare打造移动端应用和构建Android时的异常处理

    目录 简介 安装 创建demo 运行 打包为Windows程序 打包为安卓APP 构建安卓错误处理 gt gt gradle改为本地 报错1 Could not resolve all artifacts for configuration