Android插件化,热修复,模块化开发

来源:互联网 发布:excel vb 编辑:程序博客网 时间:2024/05/16 08:38

为什么要做Android插件化,热修复,模块化开发?

app的模块越来越多,有点模块用一段时间就不用了,删除了担心下次还会用,不删除又增加了app的体积。有没有一种方法在我需要这个模块的时候就可以用,不需要的时候不会占用我的app体积。如果修改了一个模块,是不是又需要把app重新发布一边才能更新这个模块?有没有办法解决更新了模块也不要上线新版本。下面就有一个一劳永逸的办法。

实现思路:

我们要理解一个东西,我们有一个root宿主app,里面有很多模块,比如购物,旅游...等等模块,那么购物,旅游就是两个plugin插件。购物这个插件不属于root这个app,他是放在手机储存卡某个文件夹里的。到时候我们点击app的购物模块按钮,进入购物这个插件。听着好像不能实现,但已经有很多大牛跟我们开发了这样一个依赖。可以按照你自己的想法去实现。这样root这个app跟购物模块没有一点联系,只是增大了手机内存,没有增加root这个app的大小,更新时我们可以替换购物模块就可以了。也不需要重新上线root宿主app了。有点像游戏更新插件的道理。


好了。 下面我们就来实现吧。

准备工作:下载依赖

Github地址:     https://github.com/singwhatiwanna/dynamic-load-apk

或者

csdn下载地址:http://download.csdn.net/detail/zzq272804553/9725236  

一个是github上的地址,如果没有github可以选择下面的下载地址。里面有我们需要的依赖。


简单看下下载解压后的项目结构。

开始啦

打开你的AS。新建一个项目名为:MyPluge(一个普通的Android项目)

然后你点击file:import module,选择上面解压里的lib

关键:你的app项目不要引入lib依赖

导入lib依赖后,

更改他的依赖:

dependencies {    provided fileTree(dir: 'libs', include: ['*.jar'])}
将compile改成provided(表示编译时候使用,但不打包到apk中,因为等会会将jar包放到root宿主项目里去,如果重复了就会报找不到插件的activity,ClassNotFindException)

选择lib,然后点击build菜单选择make module lib】目的是在你的lib文件夹下生产class.jar文件目录地址:lib\build\intermediates\bundles\debug\class.jar,将class.jar复制到桌面上,更名为:lib.jar



现在你桌面上做好了一个lib.jar。我们开始使用

将lib.jar导入到里的普通项目app的libs里



生成apk文件后你就可以开发你的root宿主项目了。

我们新建一个项目命名为:MyHost

导入我们的lib.jar包

然后修改AndroidManifest.xml,加入一些权限和两个<activity>标签

然后修改MainActivity.java

我直接贴图了


将自己打包好的apk文件放到手机根目录DynaminLoadHost文件夹下(需要手动创建)

好了,万事俱备:

我们启动MyHost项目:


左边是运行MyHost后的界面,点击按钮之后就跳到apk的主页界面,如右图。(apk文件是你手动加入的呀,别忘记了)

跳转只能跳转到apk的启动页。

如果你放置了多个apk文件,可以通过他们的文件名来判断跳到不同的地方

好了。 这两个项目我都会上传。

下载地址:MyPluge:  http://download.csdn.net/detail/zzq272804553/9725417

MyHost:       http://download.csdn.net/detail/zzq272804553/9725424


以后更新root宿主app就不用重新发布,只要下载一个新的apk到手机里就可以了。 很像游戏更新数据包一样的模式。这样你的root宿主app大小不会变,只是你手机了多了几个apk文件。


//------end-----

1 0