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 который, очевидно, потерпит неудачу, если мы попытаемся выполнить автокласс, используя старое имя класса активности

Другие вопросы по тегам