导入我自己的 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 包