Android-模块化、组件化、插件化、热修复-插件化-起步模仿一个案例(有猫腻呀)

早期的我搞了一个插件测试工程,但是仅仅只是加载一个apk而已!加载了apk,然后load一个class,完事了new一个接口对象,完事了就可以调用这个接口对象的约定好的各种方法。离插件化还远着了。。

插件化,一个是动态加载资源,动态启动页面(非安装apk的情况下),进一步还可以做热修复。。。插件化的方案也是随着技术的变化逐渐从第一代进化到当前。。腾讯最近不也发布了一个href="https://www.baidu.com/link?url=s_Uq7jtN9_eEztRIqz10QY2Zo2HmqGNoxp2iT9aWA3Dkrw1RIH5giFwV4MuQ2S_lVcFr4Rqk_TqDbDTw3-BMSk8dgVJQ5i9Vs4wEODn3t9C&wd=&eqid=a384f28f00140376000000065da0551a">腾讯新开源的插件化框架 Shadow ...零反射全动态Android插件框架正式开源 。不过应该还没有怎么经过大众检测,所以喜欢的小伙伴或者可以等等。

相关介绍文章也很多。。可以去看看。对于我们刚入门的话,目前只能多接触下这些理论,源码看着可能很费劲。。不急。。。

我的方式就是先照着实践下,熟悉下基础知识。比如反射,代理,apk加载,资源加载这些。。。往后还有Hook技术(目前好像推荐Hook)。 只有了解这些,然后才能去跟的动源码,如果想要自己写,擦,我估计得对Activity、Service这些的启动流程必须熟悉,不然你根本不知道去哪个环节Hook,Hook哪些东西。。。

我一开始反正Hook都不知道的。。。哎。老火。。。完事了我照着实践过程,也是折腾了快两天,主要是就是AppCompatActivity布局增加id就崩溃的问题。。。最后我只能先暂时将代理的Activity继承改成Activity,才能保证运行没问题。。至于如何搞成AppCompatActivity,还得研究下。东西有点多呀。。。

这里我就直接放工程了 NetNut/DocPro 我尽量以简化的方式来实现。很多其他的接口方法需求可能要自己处理或者完善。还是大体简单说下结构啥的。其他的就根据相关知识补补了...

工程结构:

image
image

效果:

2019.04.19_swebviewc.gif

一定要先了解一些基础知识哈。。。

    启动没有注册的Activity的两个主要问题
Activity等组件是需要在Manifest中注册后才能以标准Intent的方式启动的(如果有兴趣强烈推荐你了解下Activity生命周期实现的机制及源码),通过ClassLoader加载并实例化的Activity实例只是一个普通的Java对象,能调用对象的方法,但是它没有生命周期,而且Activity等系统组件是需要Android的上下文环境的(Context等资源),没有这些东西Activity根本无法工作。

使用插件APK里的Activity需要解决两个问题:

1\. 如何使插件APK里的Activity具有生命周期;

2\. 如何使插件APK里的Activity具有上下文环境(使用R资源);

代理Activity模式为解决这两个问题提供了一种思路。

附上几个地址:基本上你参考地址就可以搞了。 从上到下排个序,最后你可以参考最后那个链接来搞!

https://blog.csdn.net/chen03050903/article/details/51604694 - 了解概念就得从这开始

Android动态加载之ClassLoader详解 - ClassLoader分析的妥妥的,有必要了解

--Jvm、Dalvik和Art的区别 - ClassLoader继续深入下

--https://blog.csdn.net/dlwh_123/article/details/39151851

Android插件化之动态加载APK实现 - 这个给人感觉思路比较清晰,虽然没涉及原理,但是大体流程棒棒哒!

问题:我遇到的问题就是如果都采用继承AppCompatActivity的话,布局如果增加了id之类的,则运行就会报错:

         Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'void android.support.v7.widget.DecorContentParent.setWindowCallback(android.view.Window$Callback)' on a null object reference
        at android.support.v7.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:611)
        at android.support.v7.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:518)
        at android.support.v7.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:466)
        at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
        at com.skl.plugin.PluginBaseActivity.setContentView(PluginBaseActivity.java:37)
        at com.skl.pluginapk.PluginMainActivity.onCreate(PluginMainActivity.java:19)
        at com.skl.plugin.ProxyActivity.onCreate(ProxyActivity.java:66)
        at android.app.Activity.performCreate(Activity.java:6664)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
        at android.app.ActivityThread.-wrap12(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:154) 

我跟了一下到这个地方去看了,没看懂!!!

image

TODO 解决????不知道怎么搞。。。目前也就试了下而已.....好多知识不懂妮。。。抛出先....

dexElements 热修复

最全解读地址: 【转】Android插件化从入门到放弃-最强合集 - 还应该加上腾讯的Shadow系列...

先这样吧。。跟这些个源码,启动源码,然后了解一些dex知识,class知识,还是脑壳云云的感觉。。。是要思考,换个方式了。。接下来就需要补一些知识。然后去了解下Hook。。完事了再跟启动流程源码。。。估计方可一试。。试之前我可能会用一下三方的看看效果。 之后的可能才是去看人家的原理,机制,有时间甚至需要看人家的源码妮。。。。

总之,插件化,热修复是一个必要的知识储备。。。。我一路从基础到现在。算是接触了一些东西。 但是还有挺多的。Android的比较深的方向很多,像做逆向的,做安全的,做音视频,图像等等。。。Native啥的。。。还有底层定制,系统定制。。。哎!路漫漫其修远兮,吾将上下而求索,但是有点懒懒的。。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容