必备条件
我正在试图弄清楚如何使用buildozer打包python应用程序.在浪费了很多时间试图这样做之后,我已经达到了一个陷入困境的地步,这里是我所遵循的步骤的一个小小的总结:
下载了ubuntu16.04 x64 .vdi,提取并运行virtualbox.
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev git
sudo apt-get install build-essential ccache git libncurses5:i386 libstdc++6:i386 libgtk2.0-0:i386 libpangox-1.0-0:i386 libpangoxft-1.0-0:i386 libidn11:i386 python2.7 python2.7-dev openjdk-8-jdk unzip zlib1g-dev zlib1g:i386
sudo apt install curl git
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n …
我正在使用64位Kivy/Buildozer VM来构建和部署Kivy应用程序到Android Lollipop(armeabi-v7a 32位arch).
Buildozer构建是成功的但是在执行应用程序和导入pymssql
包(用于连接到远程MS SQL服务器)时,我收到以下错误:
I/python ( 5335): File "/build/phytogp/android/app/main.py", line 4, in <module>
I/python ( 5335): File "/build/phytogp/android/app/views/apps/phyto_app.py", line 45, in <module>
I/python ( 5335): File "/build/phytogp/android/app/services/twilio_service.py", line 2, in <module>
I/python ( 5335): ImportError: dlopen failed: "/data/data/com.phyto.phytogp/files/app/lib/python2.7/site-packages/pymssql.so" is 64-bit instead of 32-bit
Run Code Online (Sandbox Code Playgroud)
据我了解,预制pymssql-2.1.3-cp27-cp27mu-manylinux1_x86_64.whl
车轮pymssql
应支持64和32位拱.
如何获得pymssql.so
支持32位的?
我试图在 Linux 中从推土机创建 apk 文件,但每次我收到此错误时都找不到 cython。虽然我尝试安装它,但我找到了整个互联网但没有得到答案。请帮助我。我是初学者
\n代码:
(kali\xe3\x89\xbfkali)-[~/Desktop/KivyApp]\n\xe2\x94\x94\xe2\x94\x80$ buildozer android debug 1 \xe2\xa8\xaf\n# Check configuration tokens\n# Ensure build layout\n# Check configuration tokens\n# Read available permissions from api-versions.xml\n# Preparing build\n# Check requirements for android\n# Run 'dpkg --version'\n# Cwd None\nDebian 'dpkg' package management program version 1.20.7.1 (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)\n# -> found at /usr/bin/git\n# Search for Cython (cython)\n# Cython (cython) not …
Run Code Online (Sandbox Code Playgroud) 我仍然是 python 和 kivy 的菜鸟。
无论如何,我正在制作一个简单的 android 应用程序,它只显示一个标签。现在我正在尝试通过 buildozer 将该 python 文件打包到一个 apk。
该buildozer init
作品,但随后的buildozer -v android debug
犯规,并给出错误Unknown command/target android_old
。
任何人都可以帮我解决这个问题吗?谢谢
我已经使用 kivy 为 Android 创建了一个原型应用程序。它已在 buildozer 中编译,我已上传到 Android 设备。
但我不确定将应用程序相关文件(如 ini 文件、图像数据库等)放在哪里。
非常感谢任何帮助
[编辑 2020 07 25]
当我问这个问题时(许多个月前),我对 kivy 和 buildozer 的整个想法还是陌生的。
我没有意识到什么对初学者来说并不明显(见证这个问题被查看的次数)以及@inclement 的答案没有解决的是,Buildozer 将整个 python/kivy 项目包装成一个文件它可以包含您的所有静态数据。所以你只需要确保你的 buildozer 规范选择了它们。
我正在尝试使用 kivy、opencv 创建一个简单的照片捕获应用程序。当我尝试使用 buildozer 创建一个 .apk 文件,并将 opencv 放在 .spec 文件的需求中时,我遇到了这个错误
-- Android: fixup -g compiler option from Android toolchain
-- Update variable ANDROID_SDK from environment: /home/livon/.buildozer/android/platform/android-sdk
-- Android SDK Tools: ver. 2.0 (description: 'Android SDK Command-line Tools')
-- Android SDK Build Tools: ver. 30.0.0 (subdir 30.0.0 from 30.0.0)
CMake Error at cmake/android/OpenCVDetectAndroidSDK.cmake:176 (message):
Android SDK Tools: OpenCV requires Android SDK Tools revision 14 or newer.
Use BUILD_ANDROID_PROJECTS=OFF to prepare Android project files without
building them
Call Stack (most recent …
Run Code Online (Sandbox Code Playgroud) 我试图构建kivy应用程序到Android并得到此错误
# Check configuration tokens
# Ensure build layout
# Check configuration tokens
# Preparing build
# Check requirements for android
# Install platform
# Apache ANT found at /home/ali/.buildozer/android/platform/apache-ant-1.9.4
# Android SDK is missing, downloading
# Unpacking Android SDK
# Command failed: tar xzf android-sdk_r20-linux.tgz
#
# Buildozer failed to execute the last command
# If the error is not obvious, please raise the log_level to 2
# and retry the latest command.
# In case of a bug …
Run Code Online (Sandbox Code Playgroud) 我已经工作了几天,试图在 python-for-android 中使用 cv2.VideoCapture()。我正在使用带有 buildozer 的 kivy 为 android 构建 apk。这是我的代码
from kivy.app import App
from kivy.uix.image import Image
from kivy.clock import Clock
from kivy.graphics.texture import Texture
import cv2
class KivyCamera(Image):
def __init__(self, capture, fps, **kwargs):
super(KivyCamera, self).__init__(**kwargs)
self.capture = capture
Clock.schedule_interval(self.update, 1.0 / fps)
def update(self, dt):
print 'hello'
ret, frame = self.capture.read()
print frame
if ret:
# convert it to texture
buf1 = cv2.flip(frame, 0)
buf = buf1.tostring()
image_texture = Texture.create(
size=(frame.shape[1], frame.shape[0]), colorfmt='bgr')
image_texture.blit_buffer(buf, colorfmt='bgr', bufferfmt='ubyte')
# …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 kivy 在 Android 中执行前台服务。
我已经按照互联网上的不同示例创建了一个服务,但是在进入睡眠状态(打瞌睡模式)几分钟后,甚至当我更改为另一个应用程序时,所有这些服务都会被 Android 杀死。
我尝试了几个例子并尝试了不同的选择,但几分钟后没有人活着。
其中我尝试过
https://python-for-android.readthedocs.io/en/latest/services/
https://github.com/tshirtman/kivy_service_osc
https://github.com/kivy/kivy/wiki/Background-Service-using-P4A-android.service
如何在Android中保持kivy服务在后台运行(切换到其他应用程序或锁定屏幕时服务仍然运行)?
看来,由于应用程序生成的 Android Oreo 服务一旦被终止,就会被终止。如果您想在后台运行服务,则需要向用户显示持续通知,告诉他们您的应用程序正在后台运行。但我不知道如何在基维中做到这一点。
如果有人可以帮助我或展示如何做到这一点的示例,我将不胜感激。
提前致谢
编辑:我目前的解决方案,以防万一它可以帮助某人。
最后,我已经能够使用 kivy 启动前台服务(因此当手机进入睡眠状态或当您使用其他应用程序时它不会被 Android 杀死),但我必须编辑 buildozer 结构的一个文件。
我已使用https://github.com/tshirtman/kivy_service_osc中的示例来创建我执行的 apk
buildozer -v android debug deploy run logcat
Run Code Online (Sandbox Code Playgroud)
然后我已经编辑.buildozer/android/platform/build-armeabi-v7a/dists/oscservice__armeabi-v7a/templates/Service.tmpl.java
(服务脚本在service.y
文件中)并且我已经更改
intent.putExtra("serviceStartAsForeground", "{{ foreground|lower }}");
Run Code Online (Sandbox Code Playgroud)
经过
intent.putExtra("serviceStartAsForeground", "true");
Run Code Online (Sandbox Code Playgroud)
然后我又执行了
buildozer -v android debug deploy run logcat
Run Code Online (Sandbox Code Playgroud)
我还没有找到任何其他方法来告诉 kivy 我想要执行前台服务。如果有人知道并分享其他更好的形式来做到这一点,我将不胜感激。
我的 Kivy 应用程序在 Android 手机上启动时崩溃。buildozer logcat 显示以下错误:
02-21 17:09:58.777 14941 14979 I python : ModuleNotFoundError: No module named 'PIL'
02-21 17:09:58.777 14941 14979 I python : Python for android ended.
Run Code Online (Sandbox Code Playgroud)
这是我的 buildozer.spec 要求:
requirements = python3,kivy==2.0.0,git+https://github.com/HeaTTheatR/KivyMD.git,sdl2_ttf==2.0.15,python-dateutil,requests,urllib3,chardet,idna,plyer,android,jnius,oscpy
Run Code Online (Sandbox Code Playgroud)
据我了解,只有 KivyMD 依赖于 PIL。该应用程序在我的 Mac 上完美运行,之前在 Android 手机上也运行良好。错误才刚刚开始发生。所以,我真的很困惑,非常感谢任何帮助。提前致谢!