Kivy SDL2 Python3.5 build сбой на Android 5 и выше
Некоторое время я пытался создать приложение, используя Kivy SDL2 с python3crystax, и все работает как положено. Я сделал минимальное значение api равным 16, а цель - 21 (так как на данный момент это самый высокий уровень crystax). Приложение прекрасно работает на любом андроиде ниже 5, но вылетает на 5 или выше. В logcat все, что мне удалось увидеть с помощью фильтра "-s AdBuddiz:D python:D"
является то, что он перестает работать, когда он попадает сюда:
I/python (10645): Android kivy bootstrap done. __name__ is __main__
I/python (10645): AND: Ran string
I/python (10645): Run user program, change dir and execute entrypoint
I/python (10645): main.py
I/python (10645): [WARNING] [Config ] Older configuration version detected (0 instead of 19)
I/python (10645): [WARNING] [Config ] Upgrading configuration in progress.
I/python (10645): [INFO ] [Logger ] Record log in /data/data/f4f.ddddd.com.f4f/files/app/.kivy/logs/kivy_17-06-12_0.txt
I/python (10645): [INFO ] [Kivy ] v1.10.0
I/python (10645): [INFO ] [Python ] v3.5.0 (default, Dec 24 2015, 05:56:40)
I/python (10645): [GCC 5.3 20151204]
I/python (10645): [INFO ] [Factory ] 194 symbols loaded
I/python (10645): [INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_gif (img_pil, img_ffpyplayer ignored)
I/python (10645): [INFO ] [Text ] Provider: sdl2
Это все, что я вижу, прежде чем он падает без каких-либо ошибок, и он падает только на Android 5+ и только при использовании версии kivy SDL2.
У меня вопрос, почему именно он падает?
РЕДАКТИРОВАТЬ: После дальнейшей отладки я обнаружил следующую ошибку, отображаемую в logcat
E/WindowState( 1331): getStack: Window{33a025fb u0 f4d.ddddd.com.f4f/org.kivy.android.PythonActivity} couldn't find taskId=249 Callers=com.android.server.wm.WindowState.getDisplayContent:776 com.android.server.wm.WindowState.getWindowList:1347 com.android.server.wm.WindowState.getNeedsMenuLw:715 com.android.internal.policy.impl.PhoneWindowManager.updateSystemUiVisibilityLw:6862
РЕДАКТИРОВАТЬ 2: После дополнительной отладки и проб других примеров приложений, кажется, что-то в моем коде, что делает его сбой на более поздних версиях ОС Android. Начну разбирать код и посмотреть, где он падает
РЕДАКТИРОВАТЬ 3: Очевидно, что сбой моего приложения была моя реализация AdBuddiz
from kivy.app import platform
if platform == 'android':
from utils import PythonActivity, AdBuddiz
class AdsNetwork:
def __init__(self):
if platform == "android":
AdBuddiz.setPublisherKey("TEST_PUBLISHER_KEY") # replace the key with your app Key
AdBuddiz.setTestModeActive() # test mode will be active
AdBuddiz.cacheAds(PythonActivity.mActivity) # now we are caching the ads
def show_ads(self):
if platform == 'android':
AdBuddiz.showAd(PythonActivity.mActivity) #show a popup ad
1 ответ
Проблема заключается в следующем:
Для андроида ниже 5 активность называется org.renpy.android.PythonActivity
поэтому, когда мы инициализируем AdBuddiz, как сказано в документации, он будет работать для версий Android ниже 5, но для Android 5 и выше, имя класса активности org.kivy.android.PythonActivity
который, очевидно, потерпит неудачу, если мы попытаемся выполнить автокласс, используя старое имя класса активности