android动态加载外部jar包,用eclipse将class转换成dex

来源:互联网 发布:php get object vars 编辑:程序博客网 时间:2024/06/03 22:15

应用场景:我们把apk提供给第三方,jar包中是需要第三方实现的接口,第三方实现以后可以替换原apk中的jar包。这篇文章的第五步可以将.class类型的jar转换成.dex类型,作用同dx工具。

第一步:在AndroidManifest.xml文件中添加<uses-library,name是自己用到的jar包中类的包名,如图,我用到的类分布在三个包中




第二步:我们会添加jar包到自己的项目中,方法如下图,右键项目--Build Path--Configure Build Path



第三步:选择Libraries,根据箭头所示添加外部jar包



第四步:外部jar包添加进来以后,选择Order and Export,将jar包勾选上(默认是不勾选的),这样才能对其进行编译,把.class编译成.dex文件,如第五步所示



第五步:执行Run As编译工程以后,在bin文件下的dexedLibs下会生成一个对应的新jar包,如下图所示,我们可以打开jar包看一下,发现里面的.class文件已经变成了.dex,这很重要,后面会说到,这样的jar包push到手机的/system/framework目录下才能被识别,说白了我们只是利用eclipse将原来的jar包编译了一下,以便Dalvik能识别




第六步:运行cmd,执行adb remount命令,获得手机文件读写权限,Ctrl+c复制上面的新jar包到一个新地方,执行adb  push  [新jar包的位置]  /system/framework,把新jar包复制到手机系统存放jar文件的位置/system/framework,用到的几个jar包都要push进去,apk运行的时候会自动寻找




第七步:执行adb pull /system/etc/permissions/platform.xml E:/命令,将手机系统中的platform.xml文件复制到E盘,我们打开该文件,在最下面的<library name标签下添加几行,保存




其中name与前面AndroidManifest.xml文件中添加的<uses-library中的name一样,是类所在的包名,file是包名所在的jar包,这就是apk运行的时候会自动寻找的原因,因为我们在platform.xml文件中说明了类所在的包名和包名所在的jar包。


第八步:执行adb push E:\platform.xml /system/etc/permissions/platform.xml命令,用修改后的platform.xml文件替换手机系统中的原文件。

第九步:取消第四步勾选的jar包,重新编译一下项目,生成不包含jar包的apk并安装到手机中(如果安装失败,报[INSTALL_FAILED_MISSING_SHARED_LIBRARY]错误,说明系统没有找到对应jar包),重启手机(千万别忘了),这时我们发现apk仍然能正常运行,因为apk引用了我们push到手机中的jar包。

1 0
原创粉丝点击