我尝试使用buildozer在真实设备(android 6)上部署一些plyer示例。起初我尝试了相机示例,但是当我尝试拍照并出现以下错误时应用程序出现故障:
DEBUG : Abort message: 'art/runtime/java_vm_ext.cc:410] JNI DETECTED ERROR IN APPLICATION: static jfieldID 0xb052a4b0 not valid for class java.lang.Class<org.renpy.android.PythonActivity>'
DEBUG : r0 00000000 r1 00000c03 r2 00000006 r3 a0fa9978 DEBUG : r4 a0fa9980 r5 a0fa9930 r6 0000000b r7 0000010c
DEBUG : r8 b4b3f378 r9 b4d2a800 sl 00000001 fp 00000001 DEBUG : ip 00000006 sp a0fa3200 lr b6d16c41 pc b6d19030 cpsr 40070010 DEBUG : DEBUG : backtrace:
DEBUG : #00 pc 00042030 /system/lib/libc.so (tgkill+12)
DEBUG : #01 pc 0003fc3d /system/lib/libc.so (pthread_kill+32) DEBUG : #02 pc 0001c3db /system/lib/libc.so (raise+10)
DEBUG : #03 pc 0001958d /system/lib/libc.so (__libc_android_abort+34) DEBUG : #04 pc 000174e0 /system/lib/libc.so (abort+4) DEBUG : #05 pc 00333a39 /system/lib/libart.so (_ZN3art7Runtime5AbortEv+228)
DEBUG : #06 pc 000f464b /system/lib/libart.so (_ZN3art10LogMessageD2Ev+2226)
DEBUG : #07 pc 0025aa9f /system/lib/libart.so (_ZN3art9JavaVMExt8JniAbortEPKcS2_+1550)
DEBUG : #08 pc 0025ae4d /system/lib/libart.so (_ZN3art9JavaVMExt9JniAbortVEPKcS2_St9__va_list+64)
DEBUG : #09 pc 000fd221 /system/lib/libart.so (_ZN3art11ScopedCheck6AbortFEPKcz+32) 05-30 22:32:28.979 346 346 F
DEBUG : #10 pc 00114b01 /system/lib/libart.so (_ZN3art11ScopedCheck16CheckFieldAccessERNS_18ScopedObjectAccessEP8_jobjectP9_jfieldIDbNS_9Primitive4TypeE+452) 05-30 22:32:28.979 346 346 F
DEBUG : #11 pc 00116525 /system/lib/libart.so (_ZN3art8CheckJNI8GetFieldEPKcP7_JNIEnvP8_jobjectP9_jfieldIDbNS_9Primitive4TypeE+524) 05-30 22:32:28.979 346 346 F DEBUG : #12 pc 00116abf /system/lib/libart.so (_ZN3art8CheckJNI20GetStaticObjectFieldEP7_JNIEnvP7_jclassP9_jfieldID+30) 05-30 22:32:28.979 346 346 F DEBUG : #13 pc 00027357 /data/data/test.com.cameraexample/files/app/lib/python2.7/site-packages/jnius/jnius.so
它取决于所有的例子。 我用: kivy == 1.10.0 PLYER == 1.3.0
有人可以帮助我吗?我将非常感激,谢谢!
答案 0 :(得分:0)
确保您在buildozer.spec文件中包含plyer。它看起来应该是这样的(接近第34行):
# (list) Application requirements
requirements = plyer,kivy
以及所需的所有权限here(第54行附近):
# (list) Permissions
android.permissions = INTERNET
注意#符号
答案 1 :(得分:0)
您使用的是SDL工具链吗?它可能与https://github.com/kivy/plyer/issues/245有关。看起来他们可能已经在4月修好了(尽管他们还没有表明,我还没有检查过)。尝试更新plyer;看起来他们现在正在使用1.3.1。
编辑: 我尝试了最新版本,它似乎没有解决我所指的问题。但是,如果您想要快速测试一下,看看是否遇到了这个问题,请快速解决这个问题:
@wrapt.patch_function_wrapper('jnius', 'autoclass')
def hack_autoclass(wrapped, instance, args, kwargs):
if args[0] == 'org.renpy.android.PythonActivity':
return wrapped('org.kivy.android.PythonActivity',
*args[1:], **kwargs)
else:
return wrapped(*args, **kwargs)
这取决于用于猴子修补的包装模块(在pypi上可用),但是如果你不想打扰那些依赖(例如,这不是很难自己修补它)只是我亲自测试过的黑客攻击。
请注意,您希望尽早调用此代码。