我已经工作了几天,试图在 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 手机上启动时崩溃。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 手机上也运行良好。错误才刚刚开始发生。所以,我真的很困惑,非常感谢任何帮助。提前致谢!
当我发出命令后:
buildozer android 调试 部署 运行
我收到以下错误。它显示语法错误?
# Install distribute
# Run 'curl http://python-distribute.org/distribute_setup.py | venv/bin/python'
# Cwd /root/Bt/.buildozer
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1395 100 1395 0 0 276 0 0:00:05 0:00:05 --:--:-- 276
File "<stdin>", line 1
<HTML><HEAD>
^
SyntaxError: invalid syntax
# Command failed: curl http://python-distribute.org/distribute_setup.py | venv/bin
/python
Run Code Online (Sandbox Code Playgroud) 我正在尝试建立我的kivy项目的apk。我使用PyCharm在python 2.7中安装了buildozer,然后构建了.spec,但是当我尝试创建apk时,得到了以下结果:我安装了jdk7和8
使用方法: buildozer Android debug
#Check configuration tokens
# Ensure build layout
# Check configuration tokens
# Preparing build
# Check requirements for android
# Java compiler (javac) not found, please install it.
Run Code Online (Sandbox Code Playgroud)使用方法: buildozer -v Android debug
# Check configuration tokens
# Ensure build layout
# Check configuration tokens
# Read available permissions from api-versions.xml
# Preparing build
# Check requirements for android
# Run 'dpkg --version'
# Cwd None
/bin/sh: dpkg: comando non trovato
# …Run Code Online (Sandbox Code Playgroud)我在python 3和kivy中编写了一个小程序.现在我想使用buildozer构建一个.apk并在我的Android手机上测试应用程序.一切正常,我能够在手机上安装应用程序,但应用程序在启动时崩溃.
错误日志显示,apk的python环境是python 2.7而不是3.我的问题是:是否有可能在android上使用python 3环境构建带有buildozer的apk?或者我是否必须在python2中重写应用程序?是否有可能破解迫使buildozer使用python3?
编辑:我按照inclement建议的步骤,并得到以下错误:
Traceback (most recent call last):
File "/usr/lib64/python2.7/runpy.py", line 162, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib64/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/home/micha/python/ZugGit/ZugAppFahrt/.buildozer/android/platform/python-for-android-master/pythonforandroid/toolchain.py", line 747, in <module>
main()
File "/home/micha/python/ZugGit/ZugAppFahrt/.buildozer/android/platform/python-for-android-master/pythonforandroid/toolchain.py", line 744, in main
ToolchainCL()
File "/home/micha/python/ZugGit/ZugAppFahrt/.buildozer/android/platform/python-for-android-master/pythonforandroid/toolchain.py", line 323, in __init__
getattr(self, args.command)(unknown)
File "/home/micha/python/ZugGit/ZugAppFahrt/.buildozer/android/platform/python-for-android-master/pythonforandroid/toolchain.py", line 105, in wrapper_func
build_dist_from_args(ctx, dist, dist_args)
File "/home/micha/python/ZugGit/ZugAppFahrt/.buildozer/android/platform/python-for-android-master/pythonforandroid/toolchain.py", line 142, in build_dist_from_args
build_recipes(build_order, python_modules, ctx)
File "pythonforandroid/build.py", line 560, in build_recipes
recipe.build_arch(arch)
File …Run Code Online (Sandbox Code Playgroud) 尝试使用OpenCV库与kivy和python-for-android 播放视频
这是我的尝试:
import os
import cv2
from kivy.app import App
from kivy.clock import Clock
from kivy.graphics.texture import Texture
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.image import Image
class KivyCamera(Image):
def __init__(self, capture=None, fps=0, **kwargs):
super(KivyCamera, self).__init__(**kwargs)
# self.capture = cv2.VideoCapture("/sdcard2/python-apk/2.mp4")
print "file path exist :" + str(os.path.exists("/sdcard2/python-apk/1.mkv"))
self.capture = cv2.VideoCapture("/sdcard2/python-apk/1.mkv")
Clock.schedule_interval(self.update, 1.0 / fps)
def update(self, dt):
ret, frame = self.capture.read()
print str(os.listdir('/sdcard2/'))
if ret:
# convert it to texture
buf1 = …Run Code Online (Sandbox Code Playgroud) .so lib 文件缺少调试符号
所以我尝试让我的 bin/debug.apk 在 Buildozer VM 中工作,但是加载 adb 并通过 USB 连接我的 Android 设备时出现问题,所以我将我的 bin/debug.apk 导出到我的桌面以在 Android 中调试它工作室。但是,在它的第一步中,它会抛出一个错误,要求我用具有调试符号的相同库替换 .so 库。
在 buildozer android 调试阶段,这些是否隐藏在 Buildozer VM 中的任何位置?
有没有办法获取带有符号的库,或者解决在 Android Studio 或 Buildozer VM 上没有它们的方法?
我在Python上已有一些代码,并希望使用Kivy和Buildozer将其移植到android。但是,我对本地android类“ Visualizer”有依赖性。我的应用程序正确启动,但是当我在应用程序中单击“运行”按钮时,当我在Java中使用以下代码时出现此错误
new Visualizer(0);
Run Code Online (Sandbox Code Playgroud)
要么
Visualizer = autoclass('[visualizer.class.....]')
v = Visualizer(0)
Run Code Online (Sandbox Code Playgroud)
在python中
我授予了所有必需的运行时权限,例如RECORD_AUDIO,MODIFY_AUDIO和INTERNET
ERROR:
06-18 11:25:46.852 24619 24619 D VisualDj: Called set_on_data_capture_listener
06-18 11:25:46.892 24619 24619 D VisualDj: setPlayer1
06-18 11:25:46.968 24622 24622 I crash_dump32: performing dump of process 24619 (target tid = 24619)
06-18 11:25:46.969 24622 24622 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
06-18 11:25:46.969 24622 24622 F DEBUG : Build fingerprint: 'HONOR/PRA-TL10/HWPRA-H:8.0.0/HONORPRA-TL10/373(C10):user/release-keys'
06-18 11:25:46.969 24622 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Kivy 播放声音。声音播放完美,在我的笔记本电脑上一切正常,但是当我在我的 Android 设备上加载 APK 时,声音没有播放。
我在我的 android 设备上手动允许了“存储权限”,在我的 buildozer.spec 文件中,我已经包含了写入和读取外部存储的权限。我创建了一个测试文件来尝试调试以查看出了什么问题,但无济于事。我将在下面分享此测试文件的详细信息。
首先,这是 .py 文件:
import kivy
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics import Color
from kivy.core.audio import SoundLoader
__version__ = '0.1'
class SoundTestApp(App):
def build(self):
self.load_kv('soundtest.kv')
return SoundTestWidget()
class SoundTestWidget(Widget):
def playsound(self):
sound = SoundLoader.load('testmusic.wav')
sound.play()
SoundTestApp().run()
Run Code Online (Sandbox Code Playgroud)
接下来,这里是 .kv 文件:
<SoundTestWidget>:
soundbutton: sound_button
Button:
id: sound_button
size: (root.width,root.height)
background_color: (1, 0, 0, 1)
text: "press to play music"
pos: self.pos
on_release:
self.text = "music is …Run Code Online (Sandbox Code Playgroud) 我刚刚看到Python for Android (p4a)刚刚引入了对 AAB 文件的支持。考虑到从 2021 年 8 月开始,新应用程序需要通过 Google Play 上的 Android App Bundle 发布,这对于任何处理 Android 应用程序的 Python 开发人员来说都是至关重要的补充。
由于我目前通过 Docker 使用 Buildozer,我想知道使它生成 .aab 而不是(或沿着)传统 .apk 的步骤有哪些
为了清楚起见,我使用以下方法从容器内部运行 Buildozer(使用适用于 Windows 的 Docker)来生成 .apk 文件:
docker run --interactive --tty --rm --volume "<full_path_to_project_dir>":/home/user/hostcwd kivy/buildozer -v android debug
Run Code Online (Sandbox Code Playgroud)
我已经看到有一个临时解决方法,但它涉及使用 Android Studio,我不使用并且希望避免使用。而且,它指的是虚拟机用户,但我不确定这是否也适用于 Docker 用户。