《Buildozer打包实战指南》第三节 安装Buildozer打包所需的依赖文件

news2024/11/25 21:44:49

目录

3.1 安装依赖软件包

3.2 安装Cython

3.3 设置环境变量

3.4 安装p4a、Android SDK、NDK以及其他编译文件


Buidozer这个打包库下载安装完毕之后,我们还需要下载一些打包安卓apk所需要的依赖文件。

3.1 安装依赖软件包

首先输入以下命令更新Ubuntu上的软件包:

sudo apt update

然后输入以下命令下载安装必要的软件依赖包:

sudo apt install -y git zip unzip openjdk-17-jdk autoconf libtool pkg-config zlib1g-dev libncurses5-dev libncursesw5-dev libtinfo5 cmake libffi-dev libssl-dev

3.2 安装Cython

在终端中输入以下命令安装Cython这个第三方库:

pip3 install Cython==0.29.19 -i https://pypi.tuna.tsinghua.edu.cn/simple

3.3 设置环境变量

接下来我们要将buildozer.py这个文件添加到环境变量中,方便我们在终端中使用,这个文件在~/.local/bin路径下。双击桌面上的主目录图标打开主目录,然后按下Ctrl+H键就可以将.local这个隐藏文件夹显示出来。

现在我们打开主目录文件夹下的.bashrc文件。

 然后在文件最后添加下面这一行代码,保存文件。

export PATH=$PATH:~/.local/bin/

 在终端中输入$PATH后如果出现~/.local/bin的话就表明环境变量设置成功。

 注:在Linux上,~就代表主目录,主目录当中会包含当前用户的名称。

3.4 安装p4a、Android SDK、NDK以及其他编译文件

幸运的是,这些我们都不需要我们去单独下载,在首次打包时运行buildozer提供的命令后就会自动下载安装了。

第一步:在桌面上新建一个名为demo的文件夹。

第二步:在demo文件夹下打开终端,输入touch main.py命令新建一个待打包的py文件。

第三步:往main.py中复制以下代码。

__version__ = "1.0.0"
from random import random
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.graphics import Color, Ellipse, Line


class MyPaintWidget(Widget):

    def on_touch_down(self, touch):
        color = (random(), 1, 1)
        with self.canvas:
            Color(*color, mode='hsv')
            d = 30.
            Ellipse(pos=(touch.x - d / 2, touch.y - d / 2), size=(d, d))
            touch.ud['line'] = Line(points=(touch.x, touch.y))

    def on_touch_move(self, touch):
        touch.ud['line'].points += [touch.x, touch.y]


class MyPaintApp(App):

    def build(self):
        parent = Widget()
        self.painter = MyPaintWidget()
        clearbtn = Button(text='Clear')
        clearbtn.bind(on_release=self.clear_canvas)
        parent.add_widget(self.painter)
        parent.add_widget(clearbtn)
        return parent

    def clear_canvas(self, obj):
        self.painter.canvas.clear()


if __name__ == '__main__':
    MyPaintApp().run()

除了第一行表明程序版本信息的代码__version__ = "1.0.0"是笔者自己加上去的之外,区域代码均来自Kivy的官方文档。

代码运行结果如下:

第四步:在终端中输入buildozer init命令,此时可以看待demo文件夹中出现了一个buildozer.spec配置文件。

第五步:在终端中输入buildozer -v android debug命令开始打包。本来在打包前都需要修改buildozer.spec文件的配置,但这第一次打包的主要目的不是为了得到apk文件,而是为了让buildozer下载python-for-android(p4a),Android SDK、NDK以及其他依赖文件,这样以后再打包时就不需要再花很长的时间去下载这些文件了。

现在可以休息下,等待buildozer把必要的文件下载完毕并打包(过程中可能会有需要用户输入y进行确认的步骤,长时间未操作也可能会让Ubuntu进入休眠状态,需要留意下)。如果出现某个文件下载失败的情况,检查下网络是否正常。

笔者这里遇到了一个下载失败的问题,需要科学上网。科学上网之后重新运行buildozer -v android debug命令即可。等待了较长一段时间之后,apk文件成功生成。

经过本教程第一、二、三节的操作,安卓apk的打包环境已经准备完毕,笔者会在下一节教程中讲解buildozer.spec配置文件中的一些常用参数并正式打包一个apk。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/167976.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使众人行:如何带领一群人把事做成?

你好,我是雷蓓蓓,一名程序员出身的项目经理,曾任网易杭研项目管理部总监。 我所带领的网易杭研项目管理部,从2011年成立以来,就一直在互联网项目管理领域深耕,为网易云音乐、网易严选、云计算、智慧企业等…

智慧社区管理系统改造方案

伴随着城市发展的持续加速,许多在建智慧社区和老旧小区智能化改造都在有规划的展开着。如今许多老旧小区在展开设备升级,许多小区智能安防设备、物业管理服务系统软件、社区综合服务平台及其监控器设备等都会展开智能化改造。但是,很多人对老…

17.优于select的epoll

优于select的epoll epoll 理解及应用 select复用方法其实由来已久,因此,利用该技术后,无论如何优化程序性能也无法同时接入上百个客户端(当然,硬件性能不同,差别也很大)。这种select方式并不适…

IIC驱动中景园0.96寸OLED

驱动硬件介绍 1、驱动电压3.3到5,但是正点的也是这个芯片说用3.3 5会烧坏掉。 2、RST 上的低电平,将导致OLED 复位,在每次初始化之前,都应该复位一下 OLED 模块。而我们使用四线,里面就没有复位了 3、裸屏有多种接口方式(驱动芯片为SSD1306) 6800、8080 两种并行接口方…

Redis应用2(Redison)

不推荐使用application的配置方式,因为会替代spring内部的对于redis的配置方式 注意:如果redis数据库没有密码,不要使用 config.useSingleServer().setPassword("") 的形式,直接跳过setPassword()就可以,配置类写法如下: Configuration public class RedisConfig…

MySQL进阶——索引

一、索引及其分类 1.索引的概念 索引是一种特殊的文件,包含着对数据表中所有记录的引用指针通俗点说,索引就好比是一本书的目录,能加快数据库的查询速度例如需要遍历 200 条数据,在没有索引的情况下,数据库会遍历全部…

Spring之事务编程概述

目录 一:基本概念 搭建测试环境 基于xml声明式事务控制 二:事务相关配置 ​编辑 基于注解声明式事务控制 三:Spring事务角色 四:事务传播行为 五:案例:转账业务追加日志 一:基本概念 事…

Vue.nextTick核心原理

相信大家在写vue项目的时候,一定会发现一个神奇的api,Vue.nextTick。为什么说它神奇呢,那是因为在你做某些操作不生效时,将操作写在Vue.nextTick内,就神奇的生效了。那这是什么原因呢? 让我们一起来研究一…

手把手教你写Dockerfile以及测试

Dockerfile是什么? dockerfile就是用来构建docker镜像的构建文件,命令参数脚本。 如何使用Dockerfile? 1、编写一个Dockerfile文件2、docker build构建成 基础使用(此处罗列一些我们经常用到的) # 指定依赖镜像版本&#xff…

【附代码】十大主流聚类算法

准备工作安装必要的库pip install scikit-learn准备数据集使用 make _ classification ()函数创建一个测试二分类数据集。数据集将有1000个示例,每个类有两个输入要素和一个群集。这些群集在两个维度上是可见的,因此我们可以用散点图绘制数据&#xff0c…

第18章_JDBC

一、JDBC概述JDBC概述什么是JDBCJDBC(Java DataBase Connectivity, Java数据库连接) ,是一种用于执行SQL语句的Java API,为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成有了JDBC,程序员只需用JDBC API写一个…

夜深忽梦少年事,7年又一年,来看看95年那个小伙现在怎么样了

2022年已到尾声,疫情也结束了,这三年太不容易了,今年也是一样在疫情的艰难的度过,就是做了两件事,防疫和上班,没什么可写的。但是在一个深夜晚上,想了很多以前的事,想想还是写一点东…

亚马逊云科技Amazon DeepRacer互联网行业全国冠军诞生

1月11日,首届亚马逊云科技Amazon DeepRacer自动驾驶赛车互联网行业全国总决赛圆满结束,从全国各地选拔出的9支冠军队伍齐聚滨海三亚,向总决赛的桂冠发起了冲击。 本次比赛沿袭了Amazon DeepRacer League全球赛事标准,使用了全新的…

Vue.js的this如何取到data和method里的属性?

本篇文章介绍的是Vue.js如何取到data和methods里的属性? 准备工作 克隆源码到本地 git clone https://github.com/vuejs/vue.git 下载完毕后,用vscode打开,目光移动到package.json的scripts属性,我们看到有dev和build&#xff0…

Golang -- openwechat发送消息、自动回复

开篇 马上就要到农历新年了,不妨写一段代码准时为好友们送上祝福。 该 Demo 使用开源项目 openwechat ,实现获取好友列表、为好友发送消息、图片或文件,接收来自好友或群组的消息并设置自动回复等功能。 openwechat Github地址 openwechat 文…

CSS设置元素内边距(padding)、外边距(margin)

设置元素内边距padding 所有的 HTML 元素基本都是以矩形为基础。 每个 HTML 元素周围的矩形空间由三个重要的属性来控制: padding(内边距) margin(外边距) border(边框) padding控制着元素内容…

产品经理需要懂的专业术语有哪些?

不同的行业都有着不同的专业术语,掌握专业术语不仅是个人专业能力的体现,还可以进一步促进工作中的交流,提高工作效率。 1、工作类 BRD:商业文档,包含了商业几乎,产品背景,可行性说明&#xff…

Redis底层数据结构简介

目录 1、Redis存储结构 2、数据结构 2.1、简单动态字符串(SDS) 2.2.1、SDS数据结构 2.2.2、编码 2.2.3、SDS与C字符串对比 2.2、链表(Linkedlist) 2.2.1、链表数据结构(双向链表) 2.2.2、特性 2.3、跳表(Skiplist) 2.3.1、数据结构 2.3.2、特点 2.3.3、增删查操作…

宝元机床联网

一、设备信息确认 宝元数控在台湾也是做的比较早的数控系统品牌,13年被研华并购。 1、确认型号 宝元的数控面板关机情况下是没办法判断型号的,要在开机的一瞬间确认。 此系统为:M520 注:目前接触宝元系统基本上都含网口。 2、…

maven依赖设置

之前说过了可以通过依赖的方式将一个大程序分为多个小的模块,模块之间可以利用依赖链接在一起。 但是如果有多个依赖的情况下会怎么样呢? A依赖于B、C,而B、C又有各自的依赖,那么A是否依赖于B、C的依赖呢? 答案是是的…