Kivy使用篇5

Kivy使用篇之第一個Android程序

  1. 新建一個文件夾first_apk
  2. 創建一個腳本文件main.py
  3. 編輯文件
import kivy
from kivy.app import App
from kivy.uix.button import Button


class FirstApp(App):
    """第一個Android程序"""
    def build(self):
        return Button(text='Hello Android')


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

  1. 進入目錄first_apk執行初始化命令
$ buildozer init

系統提示

File buildozer.spec created, ready to customize!
  1. 修改配置文件
    其他默認,修改如下,跳過SDK更新,和自動許可授權
# (bool) If True, then skip trying to update the Android sdk
# This can be useful to avoid excess Internet downloads or save time
# when an update is due and you just want to test/build your package
android.skip_update = True

# (bool) If True, then automatically accept SDK license
# agreements. This is intended for automation only. If set to False,
# the default, you will be shown the license when first running
# buildozer.
android.accept_sdk_license = True
  1. 執行生成程序
$ buildozer -v android debug

第一次執行該過程可能需要很長時間,因爲需要下載SDK等文件。
執行成功系統提示

BUILD SUCCESSFUL in xs

並在bin目錄下生成一個文件myapp-0.1-debug.apk

  1. 下載程序到手機
    可見生成的apk文件下載到手機安裝,或者將手機連接至電腦,並開啓調試,執行命令
$ buildozer android debug deploy run

直接將生成的apk文件推送至手機並安裝運行
運行結果如下
程序運行結果圖

小提示

預下載需要的python-for-androidrecipes來節省時間。
python-for-android 下載地址https://github.com/kivy/python-for-android
下載完成後,修改配置文件

# (str) python-for-android git clone directory (if empty, it will be automatically cloned from github)
p4a.source_dir = DIR_python-for-android

recipes下載地址,可在pythoh-for-android源文件中查看,查看路徑爲

/python-for-android/pythonforandroid/recipes/XXX

xxx爲recipes的名字,以kivy爲例
打開文件夾

/python-for-android/pythonforandroid/recipes/kivy

目錄結構圖下所示

.
├── __init__.py
├── __init__.pyc
└── __pycache__
    └── __init__.cpython-35.pyc

1 directory, 3 files

打開文件__init__.py找到

	version = '1.11.0'
    url = 'https://github.com/kivy/kivy/archive/{version}.zip'
    name = 'kivy'

可知kivy下載鏈接爲https://github.com/kivy/kivy/archive/1.11.0.zip
可使用其他下載工具下載文件1.11.0.zip
項目文件結構如下

.
├── bin
│   └── myapp-0.1-debug.apk
├── .buildozer
│   ├── android
│   │   ├── app
│   │   │   ├── _applibs
│   │   │   ├── main.py
│   │   │   └── sitecustomize.py
│   │   └── platform
│   │       ├── build
│   │       └── python-for-android
│   ├── applibs
│   └── state.db
├── buildozer.spec
└── main.py

其中.buildozer文件夾爲buildozer工作目錄
.buildozer/android/platform/build/爲程序生成過程目錄,其中包含要下載的源文件包,其結構如下:

.
├── build
│   ├── bootstrap_builds
│   ├── javaclasses
│   ├── libs_collections
│   ├── other_builds
│   └── python-installs
├── dists
│   └── myapp
└── packages
    ├── hostpython3
    ├── kivy
    ├── libffi
    ├── openssl
    ├── pyjnius
    ├── python3
    ├── sdl2
    ├── sdl2_image
    ├── sdl2_mixer
    ├── sdl2_ttf
    ├── six
    └── sqlite3

其中packages裏存放的是需要recipes的源文件,其文件結構如下

.
├── hostpython3
│   ├── .mark-Python-3.7.1.tgz
│   └── Python-3.7.1.tgz
├── kivy
│   ├── 1.11.0.zip
│   └── .mark-1.11.0.zip
├── libffi
│   ├── .mark-v3.2.1.tar.gz
│   └── v3.2.1.tar.gz
├── openssl
│   ├── .mark-openssl-1.1.1.tar.gz
│   └── openssl-1.1.1.tar.gz
├── pyjnius
│   ├── 6553ad4.zip
│   └── .mark-6553ad4.zip
├── python3
│   ├── .mark-Python-3.7.1.tgz
│   └── Python-3.7.1.tgz
├── sdl2
│   ├── .mark-SDL2-2.0.9.tar.gz
│   └── SDL2-2.0.9.tar.gz
├── sdl2_image
│   ├── .mark-SDL2_image-2.0.4.tar.gz
│   └── SDL2_image-2.0.4.tar.gz
├── sdl2_mixer
│   ├── .mark-SDL2_mixer-2.0.4.tar.gz
│   └── SDL2_mixer-2.0.4.tar.gz
├── sdl2_ttf
│   ├── .mark-SDL2_ttf-2.0.14.tar.gz
│   └── SDL2_ttf-2.0.14.tar.gz
├── six
│   ├── .mark-six-1.10.0.tar.gz
│   └── six-1.10.0.tar.gz
└── sqlite3
    ├── .mark-sqlite-amalgamation-3150100.zip
    └── sqlite-amalgamation-3150100.zip

所以手動下載recipes壓縮文件後,需要將其複製到對應的文件夾中,如果文件夾中沒有.mark-XXX文件,則需手動添加一個.mark-XXX空文件。
例如,將預下載的文件1.11.0.zip複製到kivy目錄下,並新建一個空文件.mark-1.11.0.zip
另外, SDK 和 NDK程序僅第一次執行buildozer時下載,其存儲位置爲

~/.buildozer/android/platform/

也可以通過其他途徑下載,然後在配置文件中制定其位置

# (str) Android NDK directory (if empty, it will be automatically downloaded.)
android.ndk_path = DIR_android.ndk_path

# (str) Android SDK directory (if empty, it will be automatically downloaded.)
android.sdk_path = DIR_android.sdk_path

# (str) ANT directory (if empty, it will be automatically downloaded.)
android.ant_path =DIR_android.ant_path

除此之外,生成程序還會自動下載gradle工具,並默認安裝在用戶目錄下

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章