最近项目有一个需求,需要根据用户需求动态加载APP内某功能模块,且当该部分功能模块代码有变动,只需更新该功能JAR,无需更新整个APK,基于这个需求,决定采用动态加载Jar的方式去实现,于是各种查资料进行验证,终于搞定,由于最近脑子容量不够,所以将实现方式整理出来并开放给大家进行参考。
实现过程需要注意的点:
1、当我们实现功能的Library工程中还依赖了其他第三方Jar,我们需要将其合并,否则你生成的Library对应的Jar包不含第三方文件会报错;
2、Android的虚拟机(Dalvik VM)是无法识别Java打出jar的class文件,DVM识别的是dex文件,所以需要通过dx工具转换成包含有dex文件的jar;
所以整个过程可以分为以下三个步骤来实现:
第一步:创建Library工程,导出Jar;
第二步:将主Jar和依赖Jar进行合并(ANT),将合并后的Jar进行DX处理;
第三步:利用DexClassLoader动态加载;
下面通过一个例子来介绍具体实现,首先看一下整个项目组成部分: