如何扫描Android APK依赖的Jar包中哪些文件包含指定字符
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何扫描Android APK依赖的Jar包中哪些文件包含指定字符相关的知识,希望对你有一定的参考价值。
参考技术A 从项目中的build.gradle,罗列的知识点。相当于C中的函数指针,或者Java中的引用。
对比有什么不同,Groovy中,入参只有一个并且是个闭包时,可省略圆角括号;入参最后一个参数为闭包时,该闭包可以单独用花括号包裹并放在圆括号外面。这是语法上的不同。
创建task的过程
1 Task task(Map<String, ?> args, String name, Closure configureClosure); 创建指定类型的Task,也就是org.gradle.api.tasks.Delete
2 调用configureClosure闭包,执行delete函数,入参是rootProject.buildDir。到此cleantask实例创建、初始化成功。
3 执行./gradlew clean。执行clean的action。比如被@TaskAction标注的函数。
练习,猜一下下面日志的输出顺序
修改build.gradle 后点击sync now刷新,以下为输出log顺序
层级关系是这样的gradle -- rootProject -- subProject -- task -- action
生成的taskGraph长什么样子呢?调用./gradlew assembleDebug 后发生了什么
思路:分三步
找到Apk依赖的所有的Jar包 和 Class文件 -----》 解压Jar解析Class内容 ----》 输出文件名。
Class文件格式
转化为Dex之前,可插入Task,输入为当前apk依赖的所有jar和class。自定义一个Transform 或者在 app:compileDebugJavaWithJavac 后面
涉及概念点extension、task、plugin入口、maven管理
把每种技能比喻为一把刀,平时我们用的是菜刀,现在一块大骨头面前想吃牛骨髓,怎么办?不知道大家喜不喜欢吃?就需要一把砍刀。工作中你有多少把刀?
多了一把刀,多了一种解决问题的方式和思路,比如我们用的三方源码库实现方式的过程从 APO -> APT -> Gradle,不断迁移,也更强大,也是赋能量、更自由的过程。
jar包中的依赖jar版本冲突
背景,项目中之前引入了一个 图片上传的jar
<groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version>
后来由于需要,新引入了
<dependency> <groupId>net.sourceforge.htmlunit</groupId> <artifactId>htmlunit</artifactId> <version>2.35.0</version> </dependency>
结果使用的时候就报错了,报的是common-io jar某个方法的错
后来百度后,晓得是因为上面的两个jar文件中都依赖 common-io jar 两个版本不一样,后面的需要的是2.6版本的,前面引入的是2.2版本,并且覆盖了2.6,导致凉凉
解决方法:将io从低版本移除
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> <exclusions> <exclusion> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> </exclusion> </exclusions> </dependency>
以上是关于如何扫描Android APK依赖的Jar包中哪些文件包含指定字符的主要内容,如果未能解决你的问题,请参考以下文章