问题
最近遇到个问题,项目apk中包含有libc++.so,这个so会影响二次打包,导致打出来的包的所有so都不会被压缩,因此apk会变得大很多。
我们需要知道这个libc++.so来自哪里,由于项目依赖的第三方sdk很多,而且还有各种传递依赖,直接一个一个找并不现实。
这时我们可以找到gradle处理so的task,名称位transformNativeLibsWithMergeJniLibsForDebug,然后把输入参数打印出来,就可以很清楚地看到每一个so的来源路径。
解决方法
project.afterEvaluate {
project.tasks.forEach {
if (it.name.contains("transformNativeLibsWithMergeJniLibsForDebug")) {
it.inputs.files.forEach{
println it.path
}
}
}
}
总结
除了这个task,gradle还有很多其它task,也可以用类似的方法,查找某些文件的来源路径。