0%

Android排查某个so来源方法

问题

最近遇到个问题,项目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,也可以用类似的方法,查找某些文件的来源路径。