- 组件归属模块列表,列出所有四大组件,以及包含此组件声明的模块:
# 在manifest合并后不存在的组件,前面会加上[delete]# 被超过两个以上模块包含的组件,前面会加上[duplicate][duplicate] [activity] com.example.myapplication.MainActivity|-- project:app:1.0|-- project:library-aar-1:1.0[deleted] [service] com.example.myapplication.FirstService|-- project:app:1.0[receiver] com.example.myapplication.FirstReceiver|-- project:library-aar-1:1.0[provider] com.example.myapplication.FirstProvider|-- com.youku.arch:testlib:1.0
- 缺失组件引用检测,识别缺失引用组件名称,以及哪些模块声明了此组件 。同时,提供选项以及白名单,当检测结果不通过时,终止构建过程 。示例检测结果如下:
[activity] org.cocos2dx.javascript.AActivity|-- com.youku.android:interactive-engine:0.2.9[activity] com.ali.lv.HLActivity|-- com.ali.phone.wt:n-build:10.2.3.592[activity] com.youku.pc.debug.DActivity|-- com.youku.android:YKPChannel:2.14.1.28[service] com.youku.feed.utils.FAService|-- com.youku.android:FBase:1.5.20.8
- 导出组件检测,识别导出组件,以及哪些模块声明了此组件 。同时,提供选项以及白名单,当检测结果不通过时,终止构建过程 。对于Target31更安全导出组件的行为变更,专门提供「禁止隐式导出」配置项,会无视白名单,并在分析结果中增加可识别标记 。示例检测结果如下:
# 对于白名单中组件,会在名称前加上[ignored]标识;如果开启「禁止隐式导出」配置项,对于隐式导出组件,会在名称前加上[implicit]标识[activity] com.youku.app.NPageActivity|-- com.youku.android:YoukuHPage:1.9.43.8[ignored][activity] com.ali.MIPreviewActivity|-- com.ali:m-image-selector:10.1.6.190[implicit] [activity] com.youku.fbiz.RPageActivity|-- com.youku.android:fbizSDK:1.0.2.48
在优酷治理实践中,考虑到对各业务研发同学的影响,对存量问题集中添加到白名单,后面择机统一发起清理行动 。随着版本迭代,除了对新增问题的有效拦截,存量问题也有一些“自然修复”,整体情况如下:文章插图
四大组件治理情况
此外,优酷目前的targetSdkVersion是30,明年会进行target31的适配工作,存量隐式导出组件161个,占所有导出组件50%左右,届时这些需要全部解决 。在当前工具和卡口体系下,相信这个问题的整改,会变得轻松而可控 。
2.4 治理全景
至此,对于manifest清单,进行了较全面有效的防腐化能力建设和治理 。最后,给出一份全景图:
文章插图
manifest治理全景
还能做些什么manifest包含的内容,比较有限 。因此,上述治理应该已经覆盖绝大部分问题,但仍然还有一些低概率的边缘case,可以通过同样的思路来提前识别&解决,例如:多个activity的scheme定义重复,导致通过隐式方式启动activity时,出现选择弹窗 。
与工程腐化的对抗,依然艰难,任重而道远,与诸君共勉 。
【参考文档】
- 【google】App Manifest Overview:https://developer.android.com/guide/topics/manifest/manifest-intro
- 【google】Manage manifest files:https://developer.android.com/studio/build/manage-manifests
秒懂生活扩展阅读
- moderately怎么读 moderate
- july吴亦凡音乐在线听 july
- hence能连接句子吗 hence
- fell fell
- assured assure
- associate
- advertise
- dependent否定前缀 dependent
- cool是什么意思 cool
- convince是什么意思 convince