写这款工具主要是看了优酷的几篇 向工程腐化开炮 的系列文章,觉得其中的几个点可以通过依赖检查的方式提前找到问题,所以着手找了几个点写了下,并输出 report html 方便查看。

一、检查

目前该检查工具提供了 5 项内容的检查:

  • so 文件检查
  • 64 位 so 未适配检查
  • 更安全的导出组件检查
  • 未匹配的权限检查
  • uses-sdk 检查

1、so 文件检查

so 文件检查可以分析出依赖里面包含了多少个 so 文件,并且展示 so 大小,做这个可以辅助 apk 包体积优化来提前分析,哪些 so 文件过大,并且这个 so 文件属于哪个依赖,然后根据依赖找到开发责任人进行沟通,如下是检查结果展示:

2、64 位 so 未适配检查

Google Play 自 2019 年 8 月 1 日起就强制应用必须支持 64 位 架构,但国内的应用市场会相对应的滞后:

平台 32 位库文件夹 64 位库文件夹
ARM lib/armeabi-v7a lib/arm64-v8a
x86 lib/x86 lib/x86_64

对于我们工具的检查,只需要遍历获取 32 位 so 的文件名称,然后去查下这个文件在 64 位的目录下存不存在,如果存在,说明该 so 支持,反之不支持,检测效果如下:

3、更安全的导出组件检查

在 Android 12 的适配中,如果 activity、received 和 service 有使用 intent-filter,则必须显示申明 exported 的值,否则应用将无法在搭载 Android 12 或更高版本的设备上进行安装。工具检测效果如下:

4、未匹配的权限检查

在我们的应用开发中,会对所有的权限申明进行管控,每个敏感权限的申请都需要经过团队的把关,也即意味着权限不能乱申请和乱用。所以,我们需要事先申明好一份白名单配置,在检查依赖的过程中,如果依赖中的 AndroidManifest.xml 申明的权限不在这个白名单中,则会提示该依赖使用了白名单之外的敏感权限,需要进行确认。工具检测效果如下:

5、uses-sdk 检查

manifest 中一些全局性配置,对 apk 安装和运行时行为具有重要影响,最为典型的就是 minSdkVersion和 targetSdkVersion,一旦非预期变更被带到线上,后果不堪设想。

检查工具会检查如果与白名单的配置不一致,则会输出结果:

二、使用

如果想体验 demo 的话,可以直接执行命令:

./gradlew checkDependency -Pbuild=debug

他会在 build 的 checkPlugin 目录输出 html 报告文件,用浏览器打开即可预览:

当然,你也可以直接查看 demo 输出的报告,我已经给仓库开通了 github pages,html 浏览地址为 https://mrwangqi.github.io/pluginDemo/

1、接入

尝试过几次在 jitpack 发布 gradle 插件,经常会报莫名的错误,所以,就不打算对外发布插件了,如果想用到自己项目的话,可以发布到 maven local,展开 task 点击 publish 发布到本地:

然后在在自己项目的 build.gradle 中配置 mavenLocal 镜像源和依赖,示例如下:

buildscript {repositories {...// 配上本地 maven 源mavenLocal()}dependencies {classpath "com.android.tools.build:gradle:7.0.4"// 依赖 check 插件,版本号可以发布本地 maven 之前修改classpath "com.github.MRwangqi:checkPlugin:1.0.0"}
}

然后在 app 工程的 build.gradle 中依赖插件,并且在工程下面配置白名单文件:

plugins {id 'com.android.application'// apply check 插件id 'checkPlugin'
}check{// 配置白名单manifestWhiteFile="ManifestWhite.xml"
}

ManifestWhite.xml 文件如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.codelang.includebuildingdemo"><!--  插件会读取 uses-sdk ,如果分析出的依赖不等于 targetSdk 或是如果不等 minSDK 则会输出分析--><uses-sdk android:minSdkVersion="14" android:targetSdkVersion="30" /><!--  插件会读取 uses-permission ,如果分析出的依赖权限不在下面则会输出分析--><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/></manifest>

2、使用

执行命令模板如下:

./gradlew checkDependency -Pbuild=${build variant}

要执行的 build variant 可以在 Android studio 中查看:

比如我们要检查 debug 的依赖分析,则命令如下:

./gradlew checkDependency -Pbuild=debug

当然,也可以直接使用如下命令进行检查,插件默认的 build variant 是 debug

./gradlew checkDependency

三、原理

原理很简单,就是从 configurations 中拿到继承自 implements 的 CompileClassPath configuration,然后通过 asPath 方法拿到所有依赖缓存到本地的路径,然后解析依赖拿到文件和内容进行分析,然后产出报告,具体可以查看源码。

四、总结:

基于工程腐化系列的文章其实可以做很多的检查,比如混淆章节中:

layout 中引用不存在的 class 需要进行检查,而且在 apk 编译过程中,并不会引发构建失败,但依然会生成相对应的keep规则,并且这个layout 一旦在运行时被“加载“,那么会引发 Java 类找不到的异常

其他的实现就交给大家自己发挥实现了,最后附上源码地址:https://github.com/MRwangqi/pluginDemo/

向工程腐化开炮系列:

  • 向工程腐化开炮 | proguard治理
  • 向工程腐化开炮 | manifest治理
  • 向工程腐化开炮 | Java代码治理
  • 向工程腐化开炮|资源治理

我写了款依赖检查的插件相关推荐

  1. owasp maven_OWASP依赖性检查Maven插件–必须具备

    owasp maven 我不得不非常遗憾地承认,我不知道OWASP依赖检查maven插件 . 自2013年以来似乎已经存在.显然GitHub上已有千个项目正在使用它. 过去,我手动检查了依赖项,以根据 ...

  2. OWASP依赖性检查Maven插件–必须具备

    我不得不非常遗憾地承认,我对OWASP依赖检查maven插件一无所知. 自2013年以来似乎已经存在.显然GitHub上已有千个项目正在使用它. 过去,我手动检查了依赖项,以根据漏洞数据库对其进行检查 ...

  3. 一款语文老师写的word办公神级插件

    没错,正如题所说,这是一款语文老师开发的word办公神级插件----不坑盒子,小编体验了一下还真是太强大了! 双击exe文件,选择任意安装目录即可开始安装 如果你的电脑缺少运行库,软件会自动帮你下载安 ...

  4. 21 款 yyds 的 IDEA插件

    以下文章来源方志朋的博客,回复"666"获面试宝典 最近,闲来无事,为了改变一下枯燥的编程环境,特地搜寻了下有助提升代码功力的插件. 1.Stackoverflow  这个插件其实 ...

  5. python七大神级插件_IntelliJ IDEA 15款超级牛逼插件推荐(自用,超级牛逼)

    满满的都是干货  所有插件都是在 ctrl+alt+s   里的plugins 里进行搜索安装 1.CodeGlance 代码迷你缩放图插件 2. Codota 代码提示工具,扫描你的代码后,根据你的 ...

  6. 上班聊天,摸鱼神器,手写一款即时通讯工具(附源码!!!)

    文章目录 即时通讯工具 客户端 服务端 1.链接 2.登录 3.其他方法 3.1.读取客户端的消息 3.2.给客户端发送消息 3.3.日志记录 3.4.工具集合 3.5.ChatSocket 服务端部 ...

  7. idea服务器性能插件,IntelliJ IDEA 15款超级牛逼插件推荐(自用,超级牛逼)

    满满的都是干货  所有插件都是在 ctrl+alt+s   里的plugins 里进行搜索安装 1.CodeGlance 代码迷你缩放图插件 2. Codota 代码提示工具,扫描你的代码后,根据你的 ...

  8. 几款不错的VisualStudio2010插件

    昨天在visualstudiogallery里逛了一下,发现里面已经有不少VisualStudio2010的插件,这里挑几个我比较喜欢的推荐一下: Gradient Selection 这个插件能使V ...

  9. 9款别出心裁的jQuery插件

    jQuery插件开发正在以惊人的速度快速增长,因其强大且易用的jQuery框架,使得我们的工作变得更加轻松!除了jQuery,还有 Flash,HTML5/CSS3以及一些强大的Web浏览器的支持,可 ...

  10. 分享一款CHROME极速下载管理器插件

    大家好,我是TJ 一个励志推荐10000款开源项目与工具的程序员 又是一个阳光明媚的周末,每到周末TJ君都会将积攒一周没时间下载的电影.电视剧.工具都下载下来,美滋滋的看上一番,小伙伴们是不是也是这样 ...

最新文章

  1. 关于git bush 中不能复制黏贴的问题
  2. python安卓打包_Android多渠道打包之Python打包
  3. javascript动态创建可拖动、最大化、最小化的层
  4. 面经——Java基础
  5. 为什么Python中称__lt__、__gt__等为“富比较”方法
  6. 如何验证登录oracle,Oracle登录验证方式详解
  7. FPGA复位激励编写(方法一)
  8. 总谐波失真80_如何将总谐波失真降至 10% 以下
  9. java学习---Nginx 反向服务代理
  10. [re入门]音乐文件加密破解
  11. 区块链对于相关流程和环节的联系,让元宇宙不再是虚无缥缈的概念
  12. 神来之笔,2021CTF内核漏洞精选解析
  13. python写excel文件头_Python帮你做Excel——写入Excel文档
  14. Logistic-Sine-Cosine混沌映射(提供文献及Matlab代码)
  15. inet addr、bcast、mask
  16. 在数据增强、蒸馏剪枝下ERNIE3.0分类模型性能提升
  17. 网页布局中的 px,em,rem,pt
  18. C++多线程同时读同一文件
  19. MIND——Modality independent neighbourhood descriptor 模态无关邻域描述符
  20. Office技巧:发布日志到MSN空间

热门文章

  1. texture_laws 纹理滤波用于缺陷检测
  2. argmax() 函数
  3. Pwnagotchi_waveshare_V3适配(海南大学)
  4. B2C电商项目(第八天、用户认证、单点登录、Oauth2认证、项目认证开发、认证服务对接网关、登录页、SpringSecurity 权限控制)
  5. 有关vc++ 时钟程序的学习与体会
  6. [人工智能-深度学习-23]:卷积神经网络CNN - 卷积核的本质是多维输入的神经元
  7. BZOJ4378[POI2015]Logistyka——树状数组
  8. 陈丽莎计算机科学与技术专业,关于表彰我校成人高等学历教育2015届毕业生学习奖和优秀学生干部获奖者的通知...
  9. 0 win10重装partition_如何重装win 10 系统?
  10. 【机器学习】TensorFlow共享GPU资源