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

应用场景:我们把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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值