导入我自己的 java 文件时找不到 Pyjnius 类

Posted

技术标签:

【中文标题】导入我自己的 java 文件时找不到 Pyjnius 类【英文标题】:Pyjnius Class not found Error when importing my own java file 【发布时间】:2020-11-18 12:49:40 【问题描述】:

我正在使用 Kivy 制作蓝牙 android 应用程序。如何使用 pyjnius 将我自己的 java 类导入我的 python 代码?但不是 Android 中的内置 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) 中的路径应该是什么?当我在 Android 上运行代码时,我认为我应该输入此应用在 Android 上运行的路径,而不是 PC 上的路径。但是,我不知道这个应用程序 main.py 在 Android 上运行在哪里,buildozer 会自动部署和运行这个应用程序。 我看到一些答案建议使用 jnius_config.set_classpath(absoulte_path/to/my_app) 来设置路径。同样,我应该输入什么路径?我知道 .java 文件在我的 PC 系统中的位置,但我不知道它在 Android 系统中的位置。 我应该使用什么文件类型来导入?我有 BluetoothGattImplem.java 文件,但我看到有人使用 .class,有人使用 .jar。

我也在找一个完整的例子,说明如何使用kivy和buildozer制作蓝牙android应用,因为kivy似乎对android上的蓝牙功能没有很好的支持,也没有简单的方法可以做到。

感谢您回答我的问题,我真的很困惑,感谢您的任何提示或建议。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于导入我自己的 java 文件时找不到 Pyjnius 类的主要内容,如果未能解决你的问题,请参考以下文章

使用 Pyinstaller 时找不到隐藏的导入 Tensorflow 包

导入具有导出枚举的模块时找不到模块错误

Swift:通过 Bridging-Header 文件导入时找不到 CorePlot-CocoaTouch.h 文件

从 PyQt4 导入 QtGui 时找不到图像错误

Java通过Eclipse运行时找不到文件

自己编译的Python找不到numpy怎么办