Kivy SDL2 Python3.5 构建在 android 5 及更高版本上崩溃
Kivy SDL2 Python3.5 build crashing on android 5 and above
我一直在尝试使用 Kivy SDL2 和 python3crystax 构建一个应用程序,一切都按预期工作。
我将最小 api 设置为 16,将目标设置为 21(因为这是 crystax 目前拥有的最多)
该应用程序在低于 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
这是我在它没有任何错误地崩溃之前看到的所有内容,它只在 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
问题如下:
对于下面的 android 5,activity 被称为 org.renpy.android.PythonActivity
所以当我们像文档告诉我们的那样初始化 AdBuddiz 时,它将适用于 android 5 以下的版本,但对于 android 5 及更高版本,activity class 名称是 org.kivy.android.PythonActivity
如果我们尝试使用旧的 activity class name
autoclass 显然会失败
我一直在尝试使用 Kivy SDL2 和 python3crystax 构建一个应用程序,一切都按预期工作。
我将最小 api 设置为 16,将目标设置为 21(因为这是 crystax 目前拥有的最多)
该应用程序在低于 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
这是我在它没有任何错误地崩溃之前看到的所有内容,它只在 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
问题如下:
对于下面的 android 5,activity 被称为 org.renpy.android.PythonActivity
所以当我们像文档告诉我们的那样初始化 AdBuddiz 时,它将适用于 android 5 以下的版本,但对于 android 5 及更高版本,activity class 名称是 org.kivy.android.PythonActivity
如果我们尝试使用旧的 activity class name