Kivy使用篇之第一個Android程序
- 新建一個文件夾
first_apk
- 創建一個腳本文件
main.py
- 編輯文件
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()
- 進入目錄
first_apk
執行初始化命令
$ buildozer init
系統提示
File buildozer.spec created, ready to customize!
- 修改配置文件
其他默認,修改如下,跳過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
- 執行生成程序
$ buildozer -v android debug
第一次執行該過程可能需要很長時間,因爲需要下載SDK等文件。
執行成功系統提示
BUILD SUCCESSFUL in xs
並在bin
目錄下生成一個文件myapp-0.1-debug.apk
- 下載程序到手機
可見生成的apk文件下載到手機安裝,或者將手機連接至電腦,並開啓調試,執行命令
$ buildozer android debug deploy run
直接將生成的apk文件推送至手機並安裝運行
運行結果如下
小提示
預下載需要的python-for-android
和recipes
來節省時間。
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
工具,並默認安裝在用戶目錄下