
【Android 插件化开发】
sbsujjbcy
业精于勤,荒于嬉;行成于思,毁于随!
展开
-
Android插件化开发之OpenAtlas中四大组件与Application功能的验证
使用OpenAtlas进行插件化开发,插件的开发几乎可以按照正常程序的开发流程进行,无需添加额外的东西。为了验证四大组件是否能够正常工作,这里编写一个插件,验证其功能。除了四大组件外,大多数应用还有Application类。该类我们也需要进行验证。首先新建一个模块,按照正常流程进行开发。新建Application类,为了方便起见,所有验证都使用日志输出形式。原创 2015-08-24 16:06:10 · 3614 阅读 · 1 评论 -
反射还能这么玩?
其实本来想加个前缀,结果标题是《Android 中反射还能这么用?》,后来想想,也不恰当,就把Android去了,本身反射是Java的东西,你硬生生的加个Android显然是不恰当的。 这几天稍微过了一下Weex的源码,可谓是亲眼目睹了它的源码。无意间发现一个类,叫WXHack,搜索一下代码,发现在Weex里用的地方就一处,好奇心驱使下去看了WXHack的源码,好家伙!看完之后总觉得这个类似曾相识原创 2016-04-29 11:32:18 · 9936 阅读 · 0 评论 -
聊聊Android 热修复Nuwa有哪些坑
前面写了两篇关于Nuwa的文章然后我说了Nuwa有坑,有人就问Nuwa到底有哪些坑,这篇文章对自己在Nuwa上走过的坑做一个总结,如果你遇到了其他坑,欢迎留言,我会统一加到文章中去。当然有些也不算是Nuwa的坑,算是ClassLoader这种方式进行热修复暴露出来的问题吧。原创 2016-03-31 21:51:50 · 11528 阅读 · 14 评论 -
Android aapt实现资源分区(补充携程aapt源码)
大致内容看这篇文章Android中如何修改编译的资源ID值(默认值是0x7F…可以随意改成0x02~0x7E),但是该文章中修改并不完全,是有问题的,见后文细说。该文章也参考了携程的aapt源码。从该文章中看到修改的地方主要有这么几个地方。 - 加入- -apk-module 参数读取外部packageId值。 - 根据Bundle把packageId传入,并进行传递。 -原创 2016-05-14 12:16:26 · 8989 阅读 · 3 评论 -
如何在不影响原有aapt源码的情况下编译定制版aapt
上篇文章Android aapt实现资源分区(补充携程aapt源码)讲了通过修改aapt源码来实现资源的分区。但是我想保留一份原来的源码,而不是通过git去查看历史的版本。这时候,就需要编译自定义的模块。在这之前,需要搭建环境和下载源码,具体可以参考google官方的文章。Establishing a Build EnvironmentDownloading the SourceBuildin原创 2016-05-15 19:28:59 · 9001 阅读 · 0 评论 -
如何脱离Android源码环境编译aapt
由于要修改aapt源码,所以clone了一份android源码,无奈mac的ssd只有256G,所以把源码下到了虚拟机里,这个虚拟机在移动硬盘中,系统是ubuntu的,编译linux和windows版的aapt没有问题,但是需要编译mac的aapt时就遇到了问题,我不可能把ubuntu中的源码整个拷到mac中去编译,加起来有好几十G呢,ssd已经爆了。于是,我需要将aapt的最小依赖环境提取出来。标原创 2016-06-08 14:15:23 · 6952 阅读 · 4 评论 -
Android热更新之so库的热更新
声明:本篇文章禁止转载,原创地址:http://blog.youkuaiyun.com/sbsujjbcy/article/details/51475499【区长原创】本来想写资源的热修复的,虽然方案差不多已经完成了,但是考虑到一些敏感问题,资源修复就不写了。那就来写写so的热修复,其原理和class的修复是一样的,但是so的热修复的需求并不高,就当做学习吧。首先来总结一下Android的ClassLoade原创 2016-05-22 16:28:30 · 14024 阅读 · 6 评论 -
Android Classloader热修复技术之百家齐放
大概在2015年10月底,QQ空间发了一篇叫《安卓App热补丁动态修复技术介绍》的文章,文章中提到为了能让Class进行热修复,其中一个条件就是防止类被打上CLASS_ISPREVERIFIED标记,具体的做法便是让一个Dex引用另一个Dex(hack.apk)中的空类(为了让业务无感知,需要在编译时动态注入字节码),并且在应用程序Application类起来的时候要加载这个hack.apk。也就是原创 2016-07-21 19:24:39 · 9380 阅读 · 2 评论 -
Android 热补丁技术——资源的热修复
今年真是热补丁框架的洪荒之力爆发的一年,短短时间内,已经出现了好几个热修复的框架了,基本上都是大同小异,这里我就不过多的去评论这些框架。只有自己真正的去经历过,你才会发现其中的坑。事实上,现在出现的大多数热修复的框架,稳定性和兼容性都还达不到要求,包括阿里的Andfix,据同事说,自己的app原本没有多少crash,接入了andfix倒引起了一部分的crash原创 2016-09-15 08:55:30 · 24663 阅读 · 11 评论 -
Android 热修复使用Gradle Plugin1.5改造Nuwa插件
从1.5开始,gradle插件包含了一个叫**Transform**的API,这个API允许第三方插件在class文件转为为dex文件前操作编译好的class文件,这个API的目标就是简化class文件的自定义的操作而不用对Task进行处理,并且可以更加灵活地进行操作。我们如何注入一个Transform呢,很简单,实现Transform抽象类中的方法,使用下面的两个方法之一进行注入即可原创 2016-03-12 10:13:21 · 19457 阅读 · 7 评论 -
Android 热修复Nuwa的原理及Gradle插件源码解析
现在,热修复的具体实现方案开源的也有很多,原理也大同小异,本篇文章以Nuwa为例,深入剖析。 Nuwa的github地址 https://github.com/jasonross/Nuwa 以及用于hotpatch生成的gradle插件地址 https://github.com/jasonross/NuwaGradle而Nuwa的具体实现是根据QQ空间的热修复方案来实现的。原创 2016-03-06 19:09:17 · 20214 阅读 · 17 评论 -
Andriod React Native 样式表中可用样式属性
写了这么多篇Android React Native的博文,基本上把复杂的东西都搞定了,接下来来看看一些轻松的东西,和布局有关,就是css样式,那么一个View可以设置哪些css样式呢,是和web中的css样式完全一样呢,还是有所不同呢?其实你只要在样式表中书写一个不存在的样式,就会报一大堆错,提示你该样式不存在,然后提供所有可用的样式给你,如图下面的样式就是样式表中所有可用的属性。"alignIt原创 2015-11-24 18:58:28 · 27357 阅读 · 1 评论 -
Android插件化开发之OpenAtlas插件启动方式与插件启动广播
到现在为止已经写了6篇文章了Android插件化开发之OpenAtlas初体验Android插件化开发之OpenAtlas生成插件信息列表Android插件化开发之OpenAtlas资源打包工具补丁aapt的编译Android插件化开发之OpenAtlas插件适配Android插件化开发之解决OpenAtlas组件在宿主的注册问题Android插件化开发之OpenAtlas中四大组件与A原创 2015-08-25 13:26:38 · 3763 阅读 · 0 评论 -
Android插件化开发之OpenAtlas插件的安装与卸载、更新与回滚
用过Android的同学都知道,手机上的APP可以进行安装,安装完之后可以卸载,安装完后如果有新版本的话可以更新。此外还有一点,就是像windows那样,从win7升级到win10感觉不满意可以回滚到win7。但是回滚功能貌似在Android里是没有的。OpenAtlas也是如此,在我们的宿主上安装的插件,也是类似这个机制。OpenAtlas为我们提供了很好的插件安装,卸载,更新,回滚的功能。假设现原创 2015-08-26 09:23:48 · 4251 阅读 · 4 评论 -
Android插件化开发之OpenAtlas初体验
OpenAtlas一款强大的Android非代理动态部署框架,目前已经处于稳定定状态。 与传统的代理方式插件不同,OpenAtlas需要对注册动态部署的组件到manifest文件。初体验,只不过就是把程序跑起来,跑通,后面的路还很长。这个过程中也是遇到了不少问题,刚开始拿到这个项目真是无处下手(没有看到有wiki),后来百度搜索了下找到四篇博文,大概就是OpenAtlas的作者写的吧And原创 2015-08-12 16:29:03 · 14570 阅读 · 10 评论 -
Android插件化开发之OpenAtlas资源打包工具补丁aapt的编译
我们先来看看Android Studio自动生成的R文件里的内容,你会发现,R文件里有很多内部类,而内部类里有很多int类型的值,他们都是以0x7f开头。 我们在编译一个Android应用程序的资源的时候,至少会涉及到两个包,其中一个是被引用的系统资源包,另外一个就是当前正在编译的应用程序资源包。每一个包都可以定义自己的资源,同时它也可以引用其它包的资源。那么,一个包是通过什么方式来引用其它包的资原创 2015-08-19 12:42:09 · 7123 阅读 · 2 评论 -
Android插件化开发之OpenAtlas插件适配
前三篇文章,介绍了OpenAtlas的一些基本用法以及patch的aapt的编译方法。 - Android插件化开发之Atlas初体验 - Android插件化开发之Atlas生成插件信息列表 - Android插件化开发之Atlas资源打包工具补丁aapt的编译OpenAtlas的原则就是避免引入冗余的库。也就是宿主中提供了第三方库后,插件中就不要再引入该库,编译的时候以provide原创 2015-08-20 12:09:46 · 5863 阅读 · 2 评论 -
Android插件化开发之OpenAtlas生成插件信息列表
上一篇文章,[Android插件化开发之Atlas初体验]( http://blog.youkuaiyun.com/sbsujjbcy/article/details/47446733),简单的介绍了使用Atlas的整个流程,但是如果你没有实践过的话估计还是一头雾水,从这篇文章开始,慢慢的切入细节。这篇文章的主题是生成插件信息列表。细心的你或许发现了上篇文章中我们使用了一个叫openatlasbundler的原创 2015-08-13 11:40:49 · 4034 阅读 · 0 评论 -
Android插件化开发之解决OpenAtlas组件在宿主的注册问题
OpenAtlas有一个问题,就是四大组件必须在Manifest文件中进行注册,那么就必然带来一个问题,插件中的组件都要重复在宿主中注册。像Service,ContentProvider等组件目前没有什么好的解决方法,只能在宿主中注册。但是像Activity,显然是有解决方法的,就是使用Fragment代替Activity,Activity只是作为一个放Fragment的容器,那么不仅在插件中不用原创 2015-08-21 12:38:03 · 4413 阅读 · 0 评论 -
Android 携程动态加载框架的打包流程分析
最近携程开源了一套动态加载的框架,总的来说,该框架和OpenAtlas还是有一定的相似之处的,比如资源的分区。此外该框架也支持热修复。个人觉得该框架中携程做的比较多的应该在打包语句的编写上面,这篇文章主要用于记录自己学习该框架的一个过程。在携程的github上,给出的打包方法是命令行执行gradle,如下git clone https://github.com/CtripMobile/Dynamic原创 2015-11-15 17:27:43 · 10139 阅读 · 13 评论 -
Android 一种在Dalvik虚拟机上多Dex加载优化的方案
在Android源码中,DexFile中有一个openDexFile方法,就是通过byte数组加载一个Dex,可以达到秒级加载,亲自测了下,如果一个使用Multidex加载的App,第二个Dex如果需要加载耗时2s+,则使用这个函数去加载,只需要300ms以内即可完成原创 2016-11-28 18:26:24 · 7302 阅读 · 0 评论