我正在使用Kivy制作一个蓝牙Android应用程序。如何使用pyjnius将自己的java类导入到python代码中?但不是安卓系统中的内置java类,如"Android.bluetooth.BluetoothAdapter".
这是我的错误。我使用buildozer在Android手机上部署和运行该应用程序。
07-29 08:38:40.035 601 2007 I python : Android kivy bootstrap done. __name__ is __main__
07-29 08:38:40.035 601 2007 I python : AND: Ran string
07-29 08:38:40.035 601 2007 I python : Run user program, change dir and execute entrypoint
07-29 08:38:40.450 601 2007 I python : Traceback (most recent call last):
07-29 08:38:40.450 601 2007 I python : File "/home/kali/buildozer/.buildozer/android/app/main.py", line 32, in <module>
07-29 08:38:40.451 601 2007 I python : File "/home/kali/buildozer/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/remote_app/jnius/reflect.py", line 208, in autoclass
07-29 08:38:40.451 601 2007 I python : File "jnius/jnius_export_func.pxi", line 28, in jnius.jnius.find_javaclass
07-29 08:38:40.451 601 2007 I python : jnius.jnius.JavaException: Class not found b'BluetoothGattImplem'
07-29 08:38:40.451 601 2007 I python : Python for android ended.
BluetoothGattImplem.java是我想要导入的文件,其中只有一个类,也叫BluetoothGattImplem。我把.java文件和main.py放在同一个字典下,并从main.py中的jnius调用autocalss函数,如下所示:
from jnius import autoclass
BluetoothGattImplem = autoclass('BluetoothGattImplem')
我试着寻找答案,但还是找不出一些要点。
- 我应该把我的BluetoothGattImplem.java放在哪里?我输入的jnius.autoclass(path(中的路径应该是什么?由于我在安卓系统上运行代码,我认为我应该输入这个应用程序在安卓上运行的路径,但不应该输入PC上的路径。然而,我不知道这个应用程序main.py在安卓的哪里运行,buildozer会自动部署和运行这个应用程序
- 我看到一些答案建议使用jnius_config.set_classpath(absoulte_path/to/my_app(来设置路径。再说一遍,我应该进入什么路径?我知道我的电脑系统中的.java文件在哪里,但我不知道它在安卓系统中的位置
- 我应该使用什么文件类型进行导入?我有BluetoothGattImplement.java文件,但我看到有人使用.class,有些人使用.jar
我也在寻找一个完整的例子,关于如何使用kivy和buildozer制作蓝牙安卓应用程序,因为似乎安卓上的蓝牙功能没有得到kivy的很好支持,而且没有简单的方法来做到这一点。
谢谢你回答我的问题,我真的很困惑,谢谢你的任何暗示或建议。
我可以部分回答其中的一些问题。
- 编译java代码并将jar放在某个路径中
- 使用
jnius_config.add_classpath("path/to/jars/*")
。这需要在发生任何autoclass
之前进行定义 - 导入类路径,例如
BluetoothGattImplem = autoclass("com.something.BluetoothGattImplem").