zoukankan      html  css  js  c++  java
  • 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). This is free software; see the GNU General Public License version 2 or later for copying conditions. There is NO warranty. "# 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打包。

    题外话:

    当一件事没有完成的时候,心里总是惦记着,总想努力去完成。有一天终于达成所愿,才明白原来我追求的不是结果,是过程。

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

  • 相关阅读:
    个人7天冲刺计划
    团队项目开发个人周计划
    满足NABC的软件创意
    关于二维数组相邻元素和的最大值问题的探讨
    敏捷软件开发综述
    关于开发方法的综述
    二维数组的子数组求最大值问题
    电梯调度实施
    小组作业提交报告
    模拟卷链接
  • 原文地址:https://www.cnblogs.com/lanqie/p/8359231.html
Copyright © 2011-2022 走看看