Android Lint的使用
- 启动检测
gradlew :app:lintDebug
- 添加依赖
// app lintChecks project(path: ':lintlib') // module的aar内部包含检测规则 lintPublish project(path: ':lintlib')
备注:.github/workflows/android.yml github编译工作流
- LogDetector 不允许直接使用Log
- GlideWithDetector Glide.with不允许传入Application
- DependencyDetector 组件依赖关系,输出的字符串复制到字符串生成图形
功能:
1. 检测HashMap能否替换为SparseArray
2. Toast创建之后没有调用show方法
3. 避免使用Log/System.out.println
添加plugin,统一lint.xml,lintOptions,自动更新最新aar(含lint规则)
功能:
Crash预防:
扫描项目中所有的Fragment都必须有空参构造函数,否则给与报错;避免直接使用kt扩展函数String#toXXX统一使用项目工具类String#toSafeXXX。
安全&性能:
避免直接使用原生Toast、Log、Sp、Thread类,统一使用项目封装工具类;使用RxBus的时候必须调用disposeOnDestroy避免页面销毁了监听还在,导致npe异常。
代码规范:
资源命名必须满足约定好的正则表达式;Activity必须继承BaseActivity不能直接继承AppCompatActivity等等
其他:
增量扫描(增量文件寻找方式:git diff $baseline $revision --name-only --diff-filter=ACMRTUXB)
json动态下发配置
1. ContextCastDetector 不允许context返回值ContextWrapper/Application强转【类型/返回值判断】
2. EventSpaceDetector Event参数是否有空格【参数判断,是否有空格,event类名】
3. GlideDetector 不允许使用glide/decodeFile,应该使用中间方法【方法判断,glide.with判断,BitmapFactory.decodexxx判断】
4. LogDetector 不允许使用Log.xxx【方法判断】
5. PngResourceDetector 扫描drawable/mipmap目录文件大于10【文件判断】
6. RouteDetector 不允许使用路由Annotation/方法/DefaultUriRequest【注解/方法/类名判断】
7. SafeFileDetector 不允许使用Environment.xxx/Pictures【方法/参数判断】
8. ThreadDetector 不允许使用Thread【类名判断】
9.AlertDialogDetector 不允许使用AlertDialog【类名判断】
DynamicLint json配置文件,在beforeCheckRootProject读取并解析【类名/方法判断】
PrivacyClassDetector 默认有配置文件,xxAsmNodeTypes通过ASM的方式,校验MethodInsnNode字节码【方法字节码判断】