1。前言在App端爬取过程中,遇到未知参数时,我们往往需要对App进行逆向工程。参数的生成逻辑,使用Python实现部分App参数的生成逻辑。JAR文件,这时候我们只需要用Python来执行这个JAR文件即可。本文将讨论Python如何调用JAR中的方法。我们首先要把所有的JAR文件合并成一个JAR文件PS:对于AAR文件,可以先用解压软件解压,然后合并JAR。合并JAR分为2??步:解压JAR和合并所有源代码2-1解压JAR\安装JDK之后使用jar-xvf命令解压单个JAR,会在同级目录下生成JAVA编译类文件根据包名#一个一个解压JAR#在本地生成class文件jar-xvfa.jarjar-xvfb.jarjar-xvfc.jar2-2合并所有源码使用jar-cvfM命令生成新的JARalllocalclassfiles#将当前目录下的所有源代码合并成一个JAR#其中:output.jar代表新的JARjar-cvfMoutput.jar.3.Python调用JAR首先,我们安装依赖包:jpype#安装依赖包pip3installJPype1假设JAR中的加密逻辑实现代码如下:packagecom.xingag.common;publicclassEncryHelper{publicStringencrypt(Stringcontent){//加密逻辑}}使用Python调用JAR中的方法分为3步:启动JVM实例化JAVA对象,调用相应方法关闭JVM3-1startJVMimportjpype#JAR本地路径jar_path=os.path.join(os.path.abspath('.'),'./output.jar')#启动jvmjpype.startJVM(jpype.getDefaultJVMPath(),"-ea","-Djava.class.path=%s"%(jar_path))3-2实例化JAVA对象,根据被调用方法的包名调用方法,使用jpyte中的JClass()方法实例化一个类JAVA对象,最后调用JAVA对象的方法。需要注意的是,由于JAVA是实例方法,所以需要先实例化对象,再调用方法;如果是静态方法,可以直接调用方法#传递包名,实例化JAVA对象EncryClass=jpype.JClass("com.xingag.common.EncryHelper")encryClass=EncryClass()#调用JAVA中的加密方法content_encry=encryClass.encrypt("xag")print(content_encry)3-3关闭JVM,可以选择主动关闭JVM,也可以在Python程序运行后自动关闭,释放资源importjpype#closejvmjpype.关闭JVM()4。最后,Python直接调用JAR中的方法,可以帮助我们复用轮子,减少爬虫的工作量!以上就是本次分享的全部内容。觉得文章还不错的话,请关注公众号:Python编程学习圈,每日干货分享,发送“J”还能收到海量学习资料,涵盖Python电子书和教程,数据库编程、Django、爬虫、云计算等或者去编程学习网了解更多编程技术知识。
