Kivy SDL2 Python3.5在Android 5及更高版本上构建崩溃

时间:2017-06-12 12:39:52

标签: android python python-3.x kivy buildozer

我一直试图使用Kivy SDL2和python3crystax构建一个应用程序,一切都按预期工作。 我将最小api设为16,目标设为21(因为这是目前最大的结果) 该应用程序适用于5以下的任何Android,但在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

这是我在崩溃之前看到的没有任何错误,只有在使用SDL2版本的kivy时它才会在android 5+上崩溃。

我的问题是,为什么会崩溃?

编辑: 进一步调试后,我发现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 个答案:

答案 0 :(得分:0)

问题如下:

对于android bellow 5,该活动被称为org.renpy.android.PythonActivity 因此,当我们按照文档告诉我们初始化AdBuddiz时,它将适用于Android版本,但是对于Android 5及更高版本,活动类名称为org.kivy.android.PythonActivity,如果我们尝试使用旧活动进行自动分类,这显然会失败班级名称