Приложение Kivy автоматически вылетает на Android после загрузки предварительной заставкиAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Приложение Kivy автоматически вылетает на Android после загрузки предварительной заставки

Сообщение Anonymous »

Итак, это мое первое приложение Kivy. У меня возникла идея создать сценарий, который будет искать информацию о песне в Spotify, а затем загружать ее с YouTube в виде аудио,
до сих пор он отлично работал на моих Windows, поэтому я решил чтобы попытаться заставить его работать на моем Android.
Я запустил сборку buildozer, указал требования и разрешения, все работало гладко, но после установки apk он показал мне логотип, который я выбрал как presplash, а затем сразу автоматически произошел сбой, я попробовал еще раз, и он по-прежнему ведет себя так же.
Я подозреваю, что проблема, с которой я столкнулся, связана с использованием нескольких модулей и отсутствием ссылки на них в требованиях.
для экземпляр, у меня есть два класса каждый в отдельном модуле и main.py
#main.py
import os
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.popup import Popup
from kivy.uix.scrollview import ScrollView
from musicdownloader import MusicDownloader
from youtube import YoutubeDownloader

class DownloaderApp(App):
def build(self):
# Create a BoxLayout
self.layout = BoxLayout(orientation='vertical', padding=10, spacing=10)

# YouTube Downloader Section
self.layout.add_widget(Label(text="YouTube Video URL:"))
self.youtube_url_input = TextInput(hint_text="Enter YouTube URL")
self.layout.add_widget(self.youtube_url_input)

youtube_download_btn = Button(text="Download YouTube Video")
youtube_download_btn.bind(on_press=self.download_youtube_video)
self.layout.add_widget(youtube_download_btn)

# Spotify Downloader Section
self.layout.add_widget(Label(text="Spotify Track URL or ID:"))
self.spotify_input = TextInput(hint_text="Enter Spotify URL or ID")
self.layout.add_widget(self.spotify_input)

spotify_download_btn = Button(text="Download Spotify Song")
spotify_download_btn.bind(on_press=self.download_spotify_song)
self.layout.add_widget(spotify_download_btn)

return self.layout

def get_save_path(self):
"""
Determines the save path based on the platform.
On Android: Uses the app's storage directory.
On other platforms: Uses the "Downloads" directory.
"""
if os.name == "posix": # Likely Android
save_path = "/storage/emulated/0/Download" # Typical Android download path
else: # Likely Windows or Linux
save_path = os.path.join(os.getcwd(), "videos")

os.makedirs(save_path, exist_ok=True)
return save_path

def download_youtube_video(self, instance):
url = self.youtube_url_input.text
if not url:
self.show_popup("Error", "Please enter a YouTube URL.")
return

save_path = self.get_save_path()
try:
# Use YoutubeDownloader class to download video
YoutubeDownloader.download_video(url, save_path)
self.show_popup("Success", "YouTube video downloaded successfully!")
except Exception as e:
self.show_popup("Error", f"Failed to download YouTube video: {e}")

def download_spotify_song(self, instance):
spotify_input = self.spotify_input.text
if not spotify_input:
self.show_popup("Error", "Please enter a Spotify URL or ID.")
return

save_path = self.get_save_path()
try:
# Use MusicDownloader class to search and download song
music_downloader = MusicDownloader()
music_downloader.search_song_on_spotify_and_youtube(spotify_input)
self.show_popup("Success", "Spotify song downloaded successfully!")
except Exception as e:
self.show_popup("Error", f"Failed to download Spotify song: {e}")

def show_popup(self, title, message):
content = BoxLayout(orientation='vertical', padding=10)
content.add_widget(Label(text=message))
close_btn = Button(text="Close")
content.add_widget(close_btn)

popup = Popup(title=title, content=content, size_hint=(None, None), size=(300, 200))
close_btn.bind(on_press=popup.dismiss)
popup.open()

if __name__ == "__main__":
DownloaderApp().run()

#youtube.py

from yt_dlp import YoutubeDL
import os

class YoutubeDownloader():

@staticmethod
def download_video(url, save_path='videos'):
try:
# Ensure the 'videos' folder exists (default to 'videos' if no path is provided)
if not os.path.exists(save_path):
os.makedirs(save_path)

# Configure yt-dlp options
ydl_opts = {
'format' : 'best[ext=mp4]', # Best quality mp4 format
'outtmpl' : os.path.join(save_path, '%(title)s.%(ext)s'), # Save path with video title
}

with YoutubeDL(ydl_opts) as ydl:
ydl.download() print("Video downloaded successfully" ... -is-loaded
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Приложение Kivy автоматически вылетает на Android после загрузки предварительной заставки
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Приложение MAUI вылетает на iOS во время заставки
    Anonymous » » в форуме IOS
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Приложение MAUI вылетает на iOS во время заставки
    Anonymous » » в форуме IOS
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Приложение Kivy успешно собрано с помощью buildozer, но вылетает при открытии на телефоне Android
    Anonymous » » в форуме Android
    0 Ответы
    43 Просмотры
    Последнее сообщение Anonymous
  • РЕШЕНО: приложение Buildozer kivy вылетает на Android сразу после открытия.
    Anonymous » » в форуме Android
    0 Ответы
    59 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»