Kivy折騰筆記


最近想用Python開發APP,選擇kivy,記錄過程

首先是源碼安裝,各種蛋疼的報錯放棄了。cython高版本有問題。

python3 -m pip  install cython==0.23
python3 -m pip  install kivy

 測試OK:

Type "help", "copyright", "credits" or "license" for more information.
>>> import kivy
[WARNING] [Config      ] Older configuration version detected (0 instead of 19)
[WARNING] [Config      ] Upgrading configuration in progress.
[INFO   ] [Logger      ] Record log in /root/.kivy/logs/kivy_18-01-26_0.txt
[INFO   ] [Kivy        ] v1.10.0
[INFO   ] [Python      ] v3.6.4 (default, Dec 23 2017, 18:28:55)
[GCC 6.3.0 20170406]

安裝打包器:

git clone https://github.com/kivy/buildozer.git
cd buildozer/
python3 setup.py install

 

一段測試代碼:

main.py

from kivy.app import App  # 譯者注:這里就是從kivy.app包里面導入App類
from kivy.uix.label import Label  # 譯者注:這里是從kivy.uix.label包中導入Label控件,這里都注意開頭字母要大寫


class MyApp(App):
    def build(self):  # 譯者注:這里是實現build()方法
        return Label(text='Hello world')  # 譯者注:在這個方法里面使用了Label控件


if __name__ == '__main__':
    MyApp().run()  # 譯者注:這里就是運行了。

 依賴:

python3 -m pip install pygame

 

順便記下一個操蛋的問題:

在Pycharm中設置Python環境后發現沒有kivy模塊,命令行直接輸入python3進入的就可以

后來發現Python3不是/usr/bin/python3.6,

在命令行里輸入:python3 -c "import os; print( os.sys.executable)"

返回:/usr/local/bin/python3
於是修改Pycharm配置就好了。

 成功彈出hello world的窗口。

 

打包:

在項目目錄下:

buildozer init

 於是多了一個文件 buildozer.spec

生成apk,記得用代理翻牆

proxychains buildozer -v  android debug

他媽的又卡住(大概一星期前因為同樣的原因,放棄了),代理也不行:

# Ensure build layout
# Check configuration tokens
# Read available permissions from api-versions.xml
# Preparing build
# Check requirements for android
# Run 'dpkg --version'
# Cwd None
b"Debian 'dpkg' package management program version 1.18.24 (amd64).\nThis is free software; see the GNU General Public License version 2 or\nlater for copying conditions. There is NO warranty.\n"# Search for Git (git)
#  -> found at /usr/bin/git
# Search for Cython (cython)
#  -> found at /usr/local/bin/cython
# Search for Java compiler (javac)
#  -> found at /opt/Java/jdk1.8.0_121/bin/javac
# Search for Java keytool (keytool)
#  -> found at /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/keytool
# Install platform
# Run 'pip install -q --user "appdirs" "colorama>=0.3.3" "sh>=1.10,<1.12.5" "jinja2" "six"'
# Cwd None
# Apache ANT found at /root/.buildozer/android/platform/apache-ant-1.9.4
# Android SDK found at /root/.buildozer/android/platform/android-sdk-20
# Android NDK found at /root/.buildozer/android/platform/android-ndk-r9c
# Run '/root/.buildozer/android/platform/android-sdk-20/tools/android list sdk -u -e'
# Cwd /root/.buildozer/android/platform

沒辦法,換個姿勢,繼續。

用python-for-android 構建APK

參考文檔:https://python-for-android.readthedocs.io/en/latest/quickstart/

貌似python-for-android在python3下有問題

重新在python2 下安裝kivy環境

apt-get install python-dev
python -m pip install cython==0.23
python -m pip install kivy 
python -m pip install pygame

 重新編譯時:

p4a clean_builds && p4a clean_dists

 

完整過程:

1、cd 到main.py同級目錄

2、設置環境變量

export ANDROIDSDK=/root/Android/android-sdk-linux
export ANDROIDNDK=/root/.buildozer/android/platform/android-ndk-r9c
export ANDROIDAPI=19
export ANDROIDNDKVER=r9c

 

說明:之前用 buildozer 的時候自動下載了NDK,SDK,但是那個SDK有問題,在tools下執行./android彈出android-manger,但是獲取不到xml(這也是buildozer卡住的原因),安裝不了platforms,build-tools,即使從其他SDK copy過去的也不行,所以還是指定到新的SDK。NDK沒問題,可以用。

如果執行了第4步后改變了以上配置希望重新編譯,必須

p4a clean_builds && p4a clean_dists

 謹慎使用:p4a clean_all,這個是清空之前所有的緩存,包括那些下載的文件,執行后需要重新下載,一般p4a clean_builds && p4a clean_dists就好了。

,3、安裝ant

apt-get install ant

 4、執行

p4a apk --private . --package=org.example.myapp --name "My application" --version 0.1 --bootstrap=sdl2 --requirements=python2,kivy

 --private 后面指定main.py的所在目錄

最后是漫長的等待。。。

可能會報錯

  File "/root/.local/share/python-for-android/dists/unnamed_dist_5/build.py", line 248, in make_package
    make_tar('src/main/assets/private.mp3', tar_dirs, args.ignore_path)

這他媽是BUG。

需要新建/root/.local/share/python-for-android/dists/unnamed_dist_5/src/main/assets/private.mp3文件(每次的路徑不一樣)

記得有個mp3,還有個png文件,隨便弄兩個文件保證讀得到就可。

終於成功:

[INFO]:    Selecting java build tool:
[INFO]:    Detected highest available build tools version to be 27.0.1
[INFO]:        Building with ant, as no gradle executable detected
[INFO]:    -> running ant debug
[INFO]:    <- directory context /root/PycharmProjects/firstApp                                                                                       
[INFO]:    # Copying APK to current directory
[INFO]:    # Found APK file: /root/.local/share/python-for-android/dists/unnamed_dist_1/bin/Myapplication-0.1-debug.apk
[INFO]:    -> running cp /root/.local/share/python-for-android/dists/unnamed_dist_1/bin/Myapplication-0.1-debug.apk ./

 

最后,想着既然找到buildozer的問題所在,為什么不再試試呢,就是這么愛折騰。

於是重新執行上面的操作,buildozer.spec中替換為新的SDK路徑

然后默默看着終端輸出,結果發現

他媽的跟python-for-android一樣,又一次下載那一堆安裝包到自己的目錄下。

更操的是下了一堆pom,jar,編譯還特慢。。。

好在最終編譯成功。

所以還是建議使用python-for-android打包。

 

 

 

題外話:

當一件事沒有完成的時候,心里總是惦記着,總想努力去完成。有一天終於達成所願,才明白原來我追求的不是結果,是過程。

這大概就是“有得必有失”吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM