Pyjnius类未找到导入我自己的java文件时出错



我正在使用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')

我试着寻找答案,但还是找不出一些要点。

  1. 我应该把我的BluetoothGattImplem.java放在哪里?我输入的jnius.autoclass(path(中的路径应该是什么?由于我在安卓系统上运行代码,我认为我应该输入这个应用程序在安卓上运行的路径,但不应该输入PC上的路径。然而,我不知道这个应用程序main.py在安卓的哪里运行,buildozer会自动部署和运行这个应用程序
  2. 我看到一些答案建议使用jnius_config.set_classpath(absoulte_path/to/my_app(来设置路径。再说一遍,我应该进入什么路径?我知道我的电脑系统中的.java文件在哪里,但我不知道它在安卓系统中的位置
  3. 我应该使用什么文件类型进行导入?我有BluetoothGattImplement.java文件,但我看到有人使用.class,有些人使用.jar

我也在寻找一个完整的例子,关于如何使用kivy和buildozer制作蓝牙安卓应用程序,因为似乎安卓上的蓝牙功能没有得到kivy的很好支持,而且没有简单的方法来做到这一点。

谢谢你回答我的问题,我真的很困惑,谢谢你的任何暗示或建议。

我可以部分回答其中的一些问题。

  1. 编译java代码并将jar放在某个路径中
  2. 使用jnius_config.add_classpath("path/to/jars/*")。这需要在发生任何autoclass之前进行定义
  3. 导入类路径,例如BluetoothGattImplem = autoclass("com.something.BluetoothGattImplem").

相关内容

最新更新