当前位置: 首页 > 后端技术 > Python

PyJNIus—允许您在Python中轻松调用Java方法

时间:2023-03-26 17:34:12 Python

PyJNIus是一个神奇的Python第三方模块。它是一个Python模块,可以使用Java本机接口将Java类作为Python类进行访问。如果您需要在Python中使用Java类,这个第三方模块是您的最佳选择。1.在开始之前,您需要确保您的计算机上已经成功安装了Python和pip。如果使用Python进行数据分析,可以直接安装Anaconda,Anaconda内置了Python和pip。另外,推荐大家使用VSCode编辑器,它有很多优点。请选择以下方式之一输入命令安装依赖项:Windows环境打开Cmd(开始-运行-CMD)。MacOS环境打开Terminal(command+空格进入Terminal)。如果您使用的是VSCode编辑器或Pycharm,则可以直接使用界面底部的Terminal。pip安装pyjnius2。快速开始使用Jnius导入Java类非常简单,你只需要导入autoclass并引用你需要的类:>>>fromjniusimportautoclass>>>autoclass('java.lang.System')。out.println('Helloworld')Helloworld>>>Stack=autoclass('java.util.Stack')>>>stack=Stack()>>>堆栈。推('你好')>>>堆栈。push('world')>>>print(stack.pop())world>>>print(stack.pop())hello引入类的时候只需要按照Java函数操作即可,如上面代码中的push和pop函数。最令人惊讶的是,您还可以在Android中使用此模块来使用Python调用Java类:.getDPI())Hardware.accelerometerEnable(True)forxinxrange(20):print(Hardware.accelerometerReading())sleep(.1)输出结果如下:i/python(5983):Androidkivybootstrapdone.__name__是__main__I/python(5983):运行用户程序,更改目录并执行main.pyI/python(5983):DPI是160I/python(5983):[0.0,0.0,0.0]I/python(5983):[-0.0095768067985773087,9.3852710723876953,2.2218191623687744]I/python??(?5983):?[-0.0095768067985773087,9.3948478698730469,2.2218191623687744]I/python??(?5983):?[-0.0095768067985773087,9.3948478698730469,2.2026655673980713]I/python??(?5983):?[-0.028730420395731926,9.4044246673583984,2.2122423648834229]我/蟒蛇(5983):[-0.019153613597154617,9.3852710723876953,2.2026655673980713]我/蟒蛇(5983):[-0.0287304271595973,2.2122423648834229]I/python??(?5983):?[-0.0095768067985773087,9.3852710723876953,2.1835119724273682]I/python??(?5983):?[-0.0095768067985773087,9.3756942749023438,2.1835119724273682]I/python??(?5983):?[0.019153613597154617,9.3948478698730469,2.2122423648834229]I/python(?5983):?[0.038307227194309235,9.3852710723876953,2.2218191623687744]I/python??(?5983):?[-0.028730420395731926,9.3948478698730469,2.2026655673980713]I/python??(?5983):?[-0.028730420395731926,9.3852710723876953,2.2122423648834229]I/python??(?5983):?[-0.038307227194309235,9.3756942749023438,2.2026655673980713]I/python??(?5983):?[0.3926490843296051,9.3086557388305664,1.3311761617660522]I/python??(?5983):?[-0.10534487664699554,9.4331550598144531,2.1068975925445557]I/python??(?5983):?[0.26815059781074524,9.3469638824462891,2.3463177680969238]I/蟒蛇(5983):[-0.1149216815829277,9.3852710723876953,2.31758713722229]我/蟒蛇(5983):[-0.038307227194309235,9.41400146484375,1.8674772977828979]I/python(5983):[0.13407529890537262,9.4235782623291016,2.2026655673980713]为了实现以上效果,需要使用:python-createfor-androidpackagesonyourAndroid工具分发(包括所需的模块和依赖项),并将其与自己的代码捆绑在APK中。3.高级使用当你使用autoclass时,它会发现指定Java类的所有方法和字段并解析它们。如果你只是想声明和使用你需要的东西。你可以这样做:fromtimeimportsleepfromjniusimportMetaJavaClass,JavaClass,JavaMethod,JavaStaticMethodclassHardware(JavaClass):__metaclass__=MetaJavaClass__javaclass__='org/renpy/android/Hardware'vibrate=JavaStaticMethod('(D)V')JavaStaticMethod('(D)V')JavaStaticAcceler=('(Z)V')accelerometerReading=JavaStaticMethod('()[F')getDPI=JavaStaticMethod('()I')#使用这个新类print('DPIis',Hardware.getDPI())Hardware.accelerometerEnable()forxinxrange(20):print(Hardware.accelerometerReading())sleep(.1)这种形式支持你只导入你要使用的类,不会浪费资源,代码效率更高。尤其是Android系统资源有限,更推荐使用这种部分导入的方式。当然,如果你是桌面系统(windows、macOS),资源相对充足,使用autoclass引入的方式也是可以接受的。但是,在Windows上,确保JAVA_HOME指向您的Java安装路径,以便PyJNIus可以找到jvm.dll并且调用将起作用。这是我们文章的结尾。如果觉得文章还不错的话,请关注公众号:Python编程学习圈,或者去编程学习网了解更多编程技术知识,还有海量干货学习资料!

最新推荐
猜你喜欢