如何用 Python 编写 Android 应用程序?

想用 Python 构建 Android 应用程序吗?全球有超过 30 亿台设备运行 Android。这使其成为世界上最重要或可能最重要的智能手机操作系统之一。假设android的重要性,有很多android构建工具,例如Android Studio,Kotlin等。

但有没有想过 Android 应用程序是否也可以用 Python 制作?

是的,这是可能的,本文旨在向读者解释和演示如何使用 Python 编写 Android 应用程序。

该任务的框架将采用 Kivy,APK 打包将由Buildozer执行。

使用 Kivy 在 Python 中构建 Android 应用

Kivy用于创建移动应用程序,通常被采用作为 Python 中的框架。该软件可免费使用并经过 MIT 许可证认证。我们首先了解 Kivy 的安装过程。

Python Kivy 生命周期

设置和配置 Kivy

我们将开始在 PyCharm 中安装 Kivy,因为它易于使用。

注意:以下所有步骤都需要Linux发行版,并且在将应用程序打包到android中时,我们将使用严重依赖Linux的Buildozer。如果您使用的是 Windows,那么您无需担心,您可以安装虚拟机来生成 Linux 环境,而如果您使用的是 Windows 10,则只需直接从 Microsoft 商店下载 ubuntu 发行版即可。

配置 WSL(Windows 子系统到 Linux)的参考 –此处

安装步骤:

  • 第一步需要为Windows用户设置Linux发行版,Linux用户可以跳过此步骤。
  • 首先,我们将首先在 PyCharm 中创建一个新项目,然后转到 PyCharm 终端(对于 Windows 用户,在终端下拉列表中选择 Ubuntu 而不是“本地”)。
  • 我们必须建立一个虚拟环境。虚拟环境是 Python 目录的集合,将所有必需的库和脚本存储在一个位置。如果虚拟环境已经处于活动状态,我们将停用它并创建一个可以安装 Kivy 的新环境。要停用,请在终端中输入“停用”。然后输入:
pip3 install virtualenv

virtualenv 的安装将通过上述命令启动,然后:

virtualenv -p python3.8 venv

上面的命令将为您的项目形成一个虚拟环境,“venv”是我们为此 virtualenv 指定的名称,但您可以使用任何合适的名称。

  • 现在我们需要为我们的项目激活这个 virtualenv。一旦激活,无论我们安装什么库,它都会为该项目激活。

对于 Windows 类型:

source ./venv/scripts/activate

在 Windows 中,脚本目录位于 virtualenv 目录中。

对于Linux:

source venv/bin/activate

如果一切都按照上述方式执行,虚拟环境将被激活,并且 virtualenv 的路径位置将显示在闭括号中。下图中,红色突出显示了 venv 激活后的路径位置。

虚拟环境

无法设置您的虚拟环境?检查参考部分以获得进一步的指导。

一切设置完毕后,输入命令

pip install kivy

检查是否安装成功,输入命令python并回车

在 python 中,输入“import kivy”。如果终端没有报错,说明kivy安装成功

安装完成后,我们将了解 Kivy 的基础知识以及在 Python 中实现它的不同方式。下面是一个基本的 python 程序,它生成存储在变量“text”中的字符串,并将其显示在新的对话框中。

代码:

from kivy.app import App
from kivy.uix.label import Label
 
 
class TrialApp(App):
    def build(self):
        return Label(
            text="Making an android app"
        )
 
demo=TrialApp()
demo.run()

导入包:kivy.app import App, kivy.uix.label import Label
TrialApp = 类的名称。
text = 变量
demo = 创建的对象
def build(self):这是一个方法,在该方法中将调用小部件
label : 显示小部件的文本

了解小部件

小部件只是简单的选择,当触发特定事件时(例如当用户进行单击/击键输入时),它们会启动响应。它允许用户完成特定任务,而无需每次键入大量代码或特定于事件的命令。Kivy 有许多小部件可供使用,例如标签、文本框、按钮等。

主要有两种类型的小部件:

属性事件小部件:  当小部件的特性发生变化(例如比例、轮廓、颜色的修改)时激发响应。
小部件定义的事件:当小部件发生修改时触发响应,例如在文本框中写入内容并获取其输出。

了解 Kivy 的布局

网格布局

网格布局允许您形成一个矩阵,并将您的小部件放置在类似表格的结构中,并向其中添加行和列。通过此布局,可以在行和列中专门完成小部件的放置。

下面的程序演示了如何实现网格布局来添加小部件。

class Format_layout_Grid(GridLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.rows=3
        self.cols=3
 
        self.label=Label(
            text="Click ---->"
        )
        self.add_widget(self.label)
        self.but0n=Button(
                text="Tap Here",
                size_hint = (0.3, 0.3),
                background_color = (0.6, 25.7, 1.9),
                color = (1, 0, 1, 1)
                )
        self.add_widget(self.but0n)

锚点布局:

锚点布局允许您将小部件放置或“锚定”在输出屏幕的 4 个角或中心。可以使用anchor_x和anchor_y代码来设置。

class DemoApp(App):
    def build(self):
        layout=AnchorLayout(
            anchor_x="left",anchor_y="top"
        )
        but0n=Button(
            text="This box anchors",
            size_hint=(0.3,0.3),
            background_color=(0.4,25.8,3),
            color=(0,0,0,1)
        )
        layout.add_widget(but0n)
        return layout

浮动布局

这种布局让我们可以将小部件放置在任何我们想要的地方。与需要行和列的网格布局或仅允许我们将小部件放置在角落或中心的锚布局不同,使用浮动布局我们可以将小部件放置在我们想要的任何位置。尽管默认情况下所有小部件都放置在该布局的左下角,但必须给出正确的 x,y 值才能正确调整所有小部件。

class Format_float(FloatLayout):
    def __init__(self,**kwargs):
        super().__init__(**kwargs)
 
        self.label = Label(
            text="Tap on Blue",
            size_hint=(0.1, -0.1),
            pos_hint = {"x": 0.3, "y": 0.7},
        )
        self.add_widget(self.label)
 
        self.button = Button(
            text="Press here",
            size_hint=(0.4, 0.1),
            pos_hint={"x":0.4,"y":0.5},
            background_color=(0.6, 25.3, 2),
            color=(1, 0, 1, 2)
        )
        self.add_widget(self.button)

页面布局

此布局与我们迄今为止讨论的其他布局略有不同。这种布局允许我们创建不同的页面并将多个小部件放置在不同的页面上,并且还允许用户在页面之间滑动。在此布局中无法更改页面的大小或其他属性。

class page_format_layout(PageLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
 
        self.but0ni = Button(
            text="Slide I"
        )
        self.add_widget(self.but0ni)
 
        self.but0ni2 = Button(
            text="Slide II"
        )
        self.add_widget(self.but0ni2)
 
        self.but0ni3 = Button(
            text="Slide III"
        )
        self.add_widget(self.but0ni3)

创建应用程序

我们已经介绍了 Kivy 的基础知识并讨论了广泛使用的布局和小部件。现在我们将研究如何创建一个可以在 Android 手机上运行的独立应用程序。在下面的示例中,我们将创建一个搜索引擎,它接受用户输入并使用 google API 输出结果。

from kivy.app import App
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.button import Button
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
import webbrowser
 
search_api="www.google.com/search=?source=jv&fdf_njg64gfjf=hello"
class Format_float(FloatLayout):
    def __init__(self,**kwargs):
        super().__init__(**kwargs)
 
        self.l = Label(
            text="Place your search query below",
            size_hint=(1.0, 0.6),
            pos_hint = {"x": 0.0, "y": 0.2},
        )
        self.add_widget(self.l)
 
        self.t = TextInput(
            size_hint=(0.8, 0.06),
            pos_hint={"x": 0, "y": 0}
        )
        self.add_widget(self.t)
        self.bt0n = Button(
            text='send',
            size_hint=(0.2,0.05),
            pos_hint={"x":0.8,"y":0}
        )
        self.bt0n.fbind("on press", lambda x: self.search_api())
        self.add_widget(self.bt0n)
 
    def search_api(self):
        msg=self.t.text
        print(msg)
        webbrowser.open(search_api.format(msg))
 
 
 
class DemoApp(App):
    def build(self):
        layout = AnchorLayout(
            anchor_x="left",
            anchor_y="top",
        )
        button = Button(
            text="Send",
            size_hint=(0.2, 0.1),
            background_color=(0.1, 25.86, 1),
            color=(0, 0, 0, 1)
        )
        layout.add_widget(button)
        return Format_float()
 
 
demo=DemoApp()
demo.run()

注意:这里使用的API是用户特定的API,不再有功能。要获取功能性 API,请单击此处

打包应用程序

代码完成后,最后一步是捆绑应用程序并将其打包到 Android APK 中。为此,我们将使用 Buildozer。

Buildozer 是一款基于 Linux 的应用程序打包软件,可将您的应用程序捆绑到 Android 包 (APK) 或基于 IOS 的应用程序中。我们无法在 Windows 中运行 Buildozer,它只能在 Linux 机器和 Mac OS 机器上运行。

要安装Buildozer,您需要按照Buildozer官方文档中提到的步骤进行操作

安装完成后,可以通过两种方式进行打包:

  • 如果您使用的是 mac/Linux 计算机,则可以按照官方文档中提到的步骤来定位包并构建应用程序。
  • 如果您使用的是 Windows 计算机,那么在虚拟机或 Linux 发行版中运行构建过程会在其间引发多个错误。为了克服这种情况,您可以使用google Collab它是一个可以为您完成这项工作的共享 Linux 服务器。

有几点需要注意:

  1. 写入源代码的文件名应重命名为“main.py”,并删除任何其他同名文件。
  2. 命令“buildozer init”创建一个 gradle 文件,其中包含所有必要的应用程序构建数据。您需要填写:title、package.name、package.domain 行以及您自己的详细信息。
  3. 命令“buildozer -v android debug”启动构建应用程序的过程。这是一个漫长的过程,需要 17-20 分钟,在此期间您需要通过输入“y”并按 Enter 键来授予权限。
  4. 构建过程完成后,应用程序将在“lib”文件夹中创建。

结论

我们在本文中学习了如何用 Python 编写 Android 应用程序。我们必须了解 Kivy 的基本基础知识 – 关于不同的布局和小部件、在 Windows 上设置 WSL 以及使用 Buildozer 打包我们的应用程序。希望这篇文章对您有所帮助。

参考

将 python 文件转换为 apk:https://towardsdatascience.com/3-ways-to-convert-python-app-into-apk-77f4c9cd55af

应用程序构建参考:https://youtube.com/playlist?list =PLtFHvora00y-6UmADZBOhYxFHYyJ3c25O

.py 到 apk 教程:链接此处

设置虚拟环境的教程:链接