I am having a trouble with kivy app. It works on PC properly but gives black screen on android after compiling with buildozer and launch .apk. Thanks for advance
import kivy
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label
from kivy.uix.scrollview import ScrollView
from kivy.core.window import Window
from kivy.clock import Clock
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.button import Button
from kivy.uix.checkbox import CheckBox
from kivy.uix.textinput import TextInput
from kivy.core.audio import SoundLoader
from kivy.utils import platform
import yfinance as yf
import numpy
from datetime import datetime
import json
import os
def HisseGecmisiniCek(hisseadi, interval):
while(1):
try:
data= yf.Ticker(hisseadi)
except:
continue
if(interval=="5m"):
aralik="30d"
try:
data_return = data.history(period=aralik, interval=interval)
if(len(data_return)!=0):
return(data_return)
else:
continue
except:
continue
def TrailingStopSmaSinyal(atr_carpan, atr_day, sma_day, hisse_gecmisi, aralik, hisse_adi):
XXXXXXXXXXXXX
return [len(hissegecmisi)-pozisyona_girilen_mum-2, pozisyon], giris_fiyati, hissegecmisi[-2][3]
def unique_2d_array(arr):
..........
def save_settings(settings):
with open('settings.json', 'w') as file:
json.dump(settings, file)
def load_settings():
try:
with open('settings.json', 'r') as file:
data = json.load(file)
# Okunan verileri değişkenlere atama
checkboxed_index = data.get("checkboxed_index", [])
max_pozisyon_sayisi = data.get("max_pozisyon_sayisi", [0])
strateji_array = data.get("strateji_array", [['XXXX', 'XXXX', 'XXXXX', XXXX, '']])
return checkboxed_index, max_pozisyon_sayisi, strateji_array
except FileNotFoundError:
# Dosya bulunamazsa veya okunamazsa varsayılan ayarları döndür
return [],[0],[['XXXX', 'XXXX', 'XXXX', XXXX, '']]
checkboxed_index, max_pozisyon_sayisi, strateji_array = load_settings()
class SettingsScreen(Screen):
def __init__(self, **kwargs):
super(SettingsScreen, self).__init__(**kwargs)
layout = GridLayout(cols=2)
scrollview = ScrollView(size_hint=(1, None), size=(Window.width, Window.height))
scrollview.add_widget(layout)
self.add_widget(scrollview)
self.checkboxed_index=[]
layout.add_widget(Label(text='Max Pozisyon'))
self.max_pozisyon = TextInput(multiline=False, text=str(max_pozisyon_sayisi[0]))
layout.add_widget(self.max_pozisyon)
layout.add_widget(Button(text='Geri Dön', on_press=self.go_back))
def go_back(self, instance):
# Ayarlar ekranından ana ekrana dönmek için kullanılacak metod
self.manager.current = 'main'
max_pozisyon_sayisi[0] = int(self.max_pozisyon.text)
class MainScreen(Screen):
def __init__(self, **kwargs):
super(MainScreen, self).__init__(**kwargs)
self.label_dict = {}
self.data_history = {}
self.data_history_list = []
main_layout = BoxLayout(orientation='vertical')
scrollview = ScrollView(size_hint=(1, None), size=(Window.width, Window.height*9/10))
layout = GridLayout(cols=4, size_hint_y=None) # Tabloda 3 sütun
layout.height = Window.height/10*(len(strateji_array)+2)
layout.add_widget(Label(text='Güncelleme\nZamanı'))
self.guncel_label = Label(text='')
layout.add_widget(self.guncel_label)
layout.add_widget(Label(text='Saat'))
self.saat_label = Label(text='', size_hint_x=None, width=Window.width/10)
layout.add_widget(self.saat_label)
layout.add_widget(Label(text='Hisse Adı'))
layout.add_widget(Label(text='Strateji'))
layout.add_widget(Label(text='Durum'))
layout.add_widget(Label(text='Pozisyonda mı?', size_hint_x=None, width=Window.width/10))
for i in range(len(strateji_array)):
self.data_history_list.append([strateji_array[i][0],strateji_array[i][1]])
self.label_dict[str(i)] = [
Label(text=f'{strateji_array[i][0]} ({strateji_array[i][1]})', color=(1, 1, 1, 1)),
Label(text=f'{strateji_array[i][2]}\n{strateji_array[i][3]}', color=(1, 1, 1, 1)),
Label(text=f'{strateji_array[i][4]}', color=(1, 1, 1, 1))
]
self.data_history_list = unique_2d_array(self.data_history_list)
# Veri satırları
self.indis = 0
for i in self.label_dict.values(): # Örnek olarak 5 satır ekliyoruz
layout.add_widget(i[0])
layout.add_widget(i[1])
layout.add_widget(i[2])
checkbox = CheckBox(active=True if self.indis in checkboxed_index else False, size_hint_x=None, width=Window.width/10)
layout.add_widget(checkbox)
checkbox.bind(active=lambda instance, value, index=self.indis: self.checkbox_func(value, index))
self.indis += 1
scrollview.add_widget(layout)
bottom_layout = GridLayout(cols=2, size_hint_y=Window.height/10)
settings_button = Button(text='Ayarlar', size_hint_y=1, size_hint_x=1)
settings_button.bind(on_press=self.show_settings)
bottom_layout.add_widget(settings_button)
self.button_stop = Button(text='Alarmı Durdur', size_hint=(1, 1), disabled=True)
self.button_stop.bind(on_press=self.stop_alarm)
bottom_layout.add_widget(self.button_stop)
main_layout.add_widget(scrollview)
main_layout.add_widget(bottom_layout)
self.add_widget(main_layout)
Clock.schedule_once(self.PozisyonCheck, 0)
Clock.schedule_interval(self.update_time, 1) #Arkaplanda çalışması gereken kod
def show_settings(self, instance):
# Ayarlar ekranını açmak için kullanılacak metod
self.manager.current = 'settings'
def update_time(self, dt):
tam_saat = datetime.now().strftime('%H:%M:%S')
self.saat_label.text = tam_saat
saat = datetime.now().hour
dakika = datetime.now().minute
saniye = datetime.now().second
if (9 <= saat < 19)and(dakika%5==0)and(saniye==10):
Clock.schedule_once(self.PozisyonCheck, 0)
self.guncel_label.text = tam_saat
elif (dakika%5==0)and(saniye==10):
self.guncel_label.text = 'Piyasa Kapalı'
def checkbox_func(self, value, indis):
if value:
checkboxed_index.append(indis)
else:
checkboxed_index.remove(indis)
checkboxed_index.sort(reverse=True)
def start_alarm(self, instance=None):
self.alarm_sound = SoundLoader.load('alarm_sound.mp3')
if self.alarm_sound:
self.alarm_sound.play()
self.button_stop.disabled = False
def stop_alarm(self, instance):
if self.alarm_sound:
self.alarm_sound.stop()
self.button_stop.disabled = True
def PozisyonCheck(self, dt): # dt parametresi, Clock tarafından otomatik olarak iletilir
for i in self.data_history_list:
gecmis = HisseGecmisiniCek(str(i[0])+'.is',i[1])
self.data_history[i[0]+i[1]] = gecmis.to_numpy()
for indis, i in enumerate(strateji_array):
if(i[2]=='TS&SMA'):
sonuc_array, giris_fiyati, son_fiyat = TrailingStopSmaSinyal(i[3][0], i[3][1], i[3][2], self.data_history[i[0]+i[1]], i[1], i[0]+".is")
self.label_dict[str(indis)][0].text = f'{strateji_array[indis][0]} ({strateji_array[indis][1]})\n{round(son_fiyat,2)} % {round((son_fiyat*100/giris_fiyati)-100,2)}'
if not (sonuc_array[-1] in self.label_dict[str(indis)][2].text):
if(sonuc_array[-1]=='AL')and(int(max_pozisyon_sayisi[0])>len(checkboxed_index)and('SAT' in self.label_dict[str(indis)][2].text)):
self.start_alarm()
elif(sonuc_array[-1]=='SAT')and(indis in checkboxed_index)and('AL' in self.label_dict[str(indis)][2].text):
self.start_alarm()
if (sonuc_array[-1]=="AL"):
self.label_dict[str(indis)][0].color = (0, 1, 0, 1)
self.label_dict[str(indis)][1].color = (0, 1, 0, 1)
self.label_dict[str(indis)][2].color = (0, 1, 0, 1)
else:
self.label_dict[str(indis)][0].color = (1, 0, 0, 1)
self.label_dict[str(indis)][1].color = (1, 0, 0, 1)
self.label_dict[str(indis)][2].color = (1, 0, 0, 1)
self.label_dict[str(indis)][2].text = sonuc_array[-1]+f" @ {round(giris_fiyati,2)}"+"\n"+str(sonuc_array[0])+" Mum Önce"
class TableApp(App):
def build(self):
if platform == "android":
from android.storage import primary_external_storage_path
from android.permissions import request_permissions, Permission
# Request storage access permissions
request_permissions([
Permission.WRITE_EXTERNAL_STORAGE,
Permission.READ_EXTERNAL_STORAGE,
Permission.INTERNET,
Permission.READ_MEDIA_AUDIO,
Permission.READ_MEDIA_IMAGES,
Permission.MANAGE_EXTERNAL_STORAGE
])
# ScreenManager oluştur
screen_manager = ScreenManager()
# Ana ekranı oluştur ve ScreenManager'a ekle
main_screen = MainScreen(name='main')
screen_manager.add_widget(main_screen)
# Ayarlar ekranını oluştur ve ScreenManager'a ekle
settings_screen = SettingsScreen(name='settings')
screen_manager.add_widget(settings_screen)
return screen_manager
def on_stop(self, *args):
data = {
"checkboxed_index": checkboxed_index,
"max_pozisyon_sayisi": max_pozisyon_sayisi,
"strateji_array": strateji_array
}
with open('settings.json', 'w') as file:
json.dump(data, file)
Window.clearcolor = ((135 / 255), (135 / 255), (135 / 255), 1)
TableApp().run()
Addition First run after launch apk i am getting "Message: 'Error when copying logo directory'" on adb but still black screen. Other runs clear on adb.