如何扫描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包中哪些文件包含指定字符的主要内容,如果未能解决你的问题,请参考以下文章

Gradle任务依赖

如何保护 Android apk 包中的 rapidapi 密钥

android 能引用aar包中依赖吗

库依赖会增加 APK 的大小吗?

gradle打包Android程序,如何打包时不包含依赖包

如何用maven把依赖的jar包编译到最终生成的jar包中