Shadow 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
Shadow 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
Shadow 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 BSD
开发语言 Kotlin Java 查看源码 »
操作系统 Android
软件类型 开源软件
开源组织 腾讯
地区 国产
投 递 者 红薯
适用人群 未知
收录时间 2019-06-26

软件简介

Shadow是一个腾讯自主研发的Android插件框架,经过线上亿级用户量检验。 Shadow不仅开源分享了插件技术的关键代码,还完整的分享了上线部署所需要的所有设计。

与市面上其他插件框架相比,Shadow主要具有以下特点:

  • 复用独立安装App的源码:插件App的源码原本就是可以正常安装运行的。
  • 零反射无Hack实现插件技术:从理论上就已经确定无需对任何系统做兼容开发,更无任何隐藏API调用,和Google限制非公开SDK接口访问的策略完全不冲突。
  • 全动态插件框架:一次性实现完美的插件框架很难,但Shadow将这些实现全部动态化起来,使插件框架的代码成为了插件的一部分。插件的迭代不再受宿主打包了旧版本插件框架所限制。
  • 宿主增量极小:得益于全动态实现,真正合入宿主程序的代码量极小(15KB,160方法数左右)。
  • Kotlin实现:core.loader,core.transform核心代码完全用Kotlin实现,代码简洁易维护。

支持特性

  • 四大组件
  • Fragment(代码添加和Xml添加)
  • DataBinding(无需特别支持,但已验证可正常工作)
  • 跨进程使用插件Service
  • 自定义Theme
  • 插件访问宿主类
  • So加载
  • 分段加载插件(多Apk分别加载或多Apk以此依赖加载)
  • 一个Activity中加载多个Apk中的View
  • 等等……

编译与开发环境

环境准备

第一次clone Shadow的代码到本地后,建议先在命令行编译一次。

  • 在编译前,必须设置ANDROID_HOME环境变量。
  • 在编译时,必须使用gradlew脚本,以保证采用了项目配置的Gradle版本。

在命令行测试编译时可以执行这个任务:

./gradlew build

如果没有出错,再尝试用Android Studio打开工程。

  • 必须使用3.4或更高版本的Android Studio打开工程。(业务插件开发时没有限制)
  • 必须关闭Android Studio的Instant Run功能。

然后就可以在IDE中选择sample-host模块直接运行了。

 

Shadow的所有代码都位于projects目录下的3个目录,分别是:

  • sdk包含SDK的所有代码
  • test包含SDK的自动化测试代码
  • sample包含演示代码

其中sample应该是大家体验Shadow的最佳环境。 详见sample目录中的README介绍。

自己写的测试代码出错?

以我们多年的插件环境下业务开发经验,插件框架是不可能一步到位实现完美的。 因此,我们相信大部分业务在接入时都是需要一定的二次开发工作。 Shadow现有的代码满足的是我们自己的业务现在的需求。得益于全动态的设计, 插件框架和插件本身都是动态发布的,插件包里既有插件代码也有插件框架代码, 所以可以根据新版本插件的需要同时开发插件框架。

例如,ShadowActivity没有实现全所有Activity方法,你写的测试代码可能用到了, 就会出现Method Not Found错误,只需要在ShadowActivity中实现对应方法就可以了。 大部分方法的实现都只是需要简单的转调就能工作正常。

如果遇到不会实现的功能,可以提Issue。最好附上测试代码。

后续开发

  • 原理与设计说明文档
  • 多插件支持的演示工程
  • 自动化测试用例补充
  • 开源包含下载能力的manager实现
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
暂无内容
发表于大前端专区
2016/12/05 14:10

box-shadow(text-shadow)参数详解

基本语法是{box-shadow:[inset] x-offset y-offset blur-radius spread-radiuscolor} 对象选择器 {box-shadow:[投影方式] X轴偏移量 Y轴偏移量阴影模糊半径 阴影扩展半径 阴影颜色} box-shadow属性的参数设置取值: 阴影类型:此参数可选。如不设值,默认投影方式是外阴影;如取其唯一值“inset”,其投影为内阴影; X-offset:阴影水平偏移量,其值可以是正负值。如果值为正值,则阴影在对象的右边,其值为负值时,阴影在对象的...

0
0
发表了博客
2018/11/21 17:39

Firebird shadow

火鸟数据库的shadow,即实时镜像。 主库发生变化,shadow也跟随变化,防止任何意外造成主库损坏无法使用,当然shadow可以有多个。 1、创建shadow的准备:修改Firebird.conf配置文件,追加一个数据库目录 DatabaseAccess = Restrict db; shadow 我这里安装目录下db目录是数据库主目录,shadow目录作为镜像目录。这两个目录是平级的,不存在shadow目录必须放镜像的误导, 只是目录命名为了放置镜像数据库。因为镜像shadow数据库不...

0
0
发表了博客
2010/10/27 10:14

/etc/passwd & /etc/shadow

一、/etc/passwd文件 这个文件的构造是这样的:每一行都代表一个账号,有几行就代表有几个账号在你的系统中。不过需要特别留意的是,里头很多账号本来就是系统中必须要的(例如 bin, daemon, adm, nobody 等等),请不要随意删除。文件的内容类似: root❌0:0:root:/root:/bin/bash bin❌1:1:bin:/bin:/sbin/nologin daemon❌2:2:daemon:/sbin:/sbin/nologin adm❌3:4:adm:/var/adm:/sbin/nologin 可以明显看出,每一行使用“...

0
2
发表于运维专区
2016/10/14 13:51

Linux Shadow-Password-HOWTO - 2. 为何shadow

Linux Shadow-Password-HOWTO - 2. 为何shadow Linux学习教程 兄弟连IT教育官方分享 大部分目前 Linux 发行版本预设值并未包含Shadow Suite 安装。这些版本包括 Slackware 2.3, Slackware 3.0 和其他受欢迎的发行版本。主要原因之一是在原始Shadow Suite版权声明中并未很清楚的描述该软体是否需使用者付费。 Linux 使用 GNU 版权通常允续使用者可免费且任意使用相关套件。 Shadow Suite现在维护人员 Marek Michalkiewicz 已经可...

0
0
发表了博客
2012/11/22 14:47

Shadow Mapping

Shadow Mapping Shadow mapping was introduced by Lance Williams in 1978, in a paper entitled "Casting curved shadows on curved surfaces". It has been extensively used since, both in offline rendering and real time graphics. Shadow mapping is used by Pixar's Renderman and was used on major films such as "Toy Story". Shadow mapping is just one of many different ways of producing shadows in your gr...

0
0
发表了博客
2012/11/21 10:33

shadow map

> SM: Shadow Maps ASM: Adaptive Shadow Maps ASM/AFSM: Alias-free Shadow Maps ASSM: High-Quality Adaptive Soft Shadow Mapping BSM: Bitmap Shadow Maps CSM: Cascaded Shadow Maps CSM: Coherent Shadow Maps DASM: Dynamic Adaptive Shadow Maps ESM: Exponential Shadow Maps LogSM: Logarithmic Shadow Maps LogPSM: Logarithmic Perspective Shadow Maps LogTSM: Logarithmic Trapezoidal Shadow Maps LSPSM/LispSM...

0
0
发表了博客
2019/09/04 13:39

shadow使用方法

cd shadow/resource/examples for d in shadow.data/host/*client*: do grep "transfer-complete" ${d}/* done |tee clients.log | wc -l //tgen完成1000次传输 for d in shadow.data/hosts/*server*: do grep “ transfer-complete ”${d}/*; done | tee servers.log | wc -l //客户端完成传输次数 cd ../.. # parse the shadow output file python src/tools/parse-shadow.py --help python src/tools/...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
73 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部