首页
首页
沸点
课程
直播
活动
竞赛
商城
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
shifujun
掘友等级
客户端开发
|
腾讯
获得徽章 0
动态
文章
专栏
沸点
收藏集
关注
作品
赞
5
文章 5
沸点 0
赞
5
返回
|
搜索文章
最新
热门
Shadow对PackageManager的处理方法
在Android开发中免不了使用PackageManager获取当前应用的一些信息。 从官方文档上能确定PackageManager一般都是通过Context的getPackageManager方法获得的,实际上我们平常开发中也只有这个途径。 显然,如果插件框架什么都不做,插件…
Shadow对插件包管理的设计
在Shadow开源的代码中,首先分为core层和dynamic层。core层就完成了插件框架的全部功能,dynamic层又将插件框架动态化起来了。然后core层本身主要也分为两部分,一部分是loader相关的,一部分是manager相关的。其中loader就是解决插件框架核心功…
调试研究Shadow对字节码编辑的正确姿势
Shadow是通过字节码编辑技术向插件插入中间层,完成插件技术的核心工作的。所以,有必要给新接触字节码编辑技术的同学分享一下研究这项技术的入门姿势。 Android 官方的构建过程提供了名为TransForm的API,详见这里 。这个API允许第三方插件在class转换成dex…
Shadow支持WebView使用file:///android_asset/协议加载插件资源的方法
在正常的App开发中,我们可以用这样的代码加载App的Assets中打包的Web页面。 Android系统实现这个功能时,并没有像我们想象的使用webview对象的Context去查找Assets资源。而是通过当前应用的ApplicationId,反查了当前安装的应用的apk路…
Shadow解决插件和宿主有同名View的方法解析
在“免安装运行App”这个场景中,插件代码通常和宿主是完全不相关的。甚至项目都是独立管理的,插件和宿主是不同团队开发,不同版本发布管理的。在这种情况下,插件和宿主中出现相同名字的类是非常常见的。只要设计好ClassLoader的结构,将插件和宿主的ClassLoader隔离开,…
Shadow的全动态设计原理解析
我们在宣传Shadow的时候说了Shadow具有两大特性,其中一个叫做“全动态插件框架”。这篇文章就讲这个特性。我们很早之前用过一款基于数百反射私有API实现的插件框架,在前面的文章也提过,在这种插件框架里要不停的兼容新版本的Android系统,OEM系统。尤其是Activit…
Shadow的跨进程设计与插件Service原理
这篇文章介绍一下Shadow的跨进程设计和插件Service的原理。一同讲这两部分是因为它们是相关的。这篇文章假设读者对于Android的Service、Binder通信没有那么了解,因此会提及一些可能对你来说有些简单的内容。 在Android系统中,应用可以是多进程的。这在移…
Shadow解决Activity等组件生命周期的方法解析
每个Android插件框架要解决的首要问题都是Activity的生命周期问题。Activity代表了Service等其他需要注册的组件。不同是插件框架解决这个问题的前提也不完全一样。而我们的业务要求比较苛刻,再加上Android 9.0的非公开API限制,所以由这些前提要求: …
Shadow的缺点介绍
看到有网友看到Shadow的开源公告和Github主页的README之后,觉得都是报喜不报忧的介绍。我们也多少同意这个看法。如果开源一个项目,并不指望其他人能真正使用,也不期待收获网友们回馈的代码贡献,那么报喜不报忧问题不大。但是Shadow开源的目的不是单纯的吹嘘自己的技术多…
Shadow为什么要求插件和宿主包名一致
我们过去也用过基于各种反射实现的插件框架,用了3年左右时间,也维护了3年左右时间。在过去维护的经验中,我们就发现了插件使用单独包名(ApplicationId,下同)带来的问题。 ApplicationId一般是在build.gradle中设置的,在编译时这个字符串会被记录在2…
下一页
个人成就
文章被点赞
665
文章被阅读
104,995
掘力值
2,250
关注了
7
关注者
973
收藏集
0
关注标签
23
加入于
2019-06-26