Android 优化之 查找so 文件的来源

1,380 阅读1分钟

序言

有时候我们需要优化apk的包体积大小。比如下面这样的。一个so文件大小有10M。但是我们并不知道so文件是那个库引入的。所以需要研究一下。

方法

在参考网上现有方法,加上自己测试以后。有了下面的成功。而且在gradle 8.4.2都可以成功。相信大家都可以成功。

  classpath 'com.android.tools.build:gradle:8.4.2'

代码

需要配置到根目录的build.gradle文件中,需要配置到allprojects中

allprojects {
   
    //列出所有包含有so文件的库信息
    tasks.configureEach { task ->

        if (task.name.contains('NativeLibs')) { //如果是有多个flavor,则用 mergeFlavorDebugNativeLibs的形式


            task.inputs.files.each {
                file->   printDir(new File(file.absolutePath))
            }
            task.doFirst {

                println("------------------- find so files start -------------------")
                println("------------------- find so files start -------------------")
                println("------------------- find so files start -------------------")

                it.inputs.files.each { file ->
                    printDir(new File(file.absolutePath))
                }

                println("------------------- find so files end -------------------")
                println("------------------- find so files end -------------------")
                println("------------------- find so files end -------------------")
            }
        }
    }

}

def printDir(File file) {
    if (file != null) {
        if (file.isDirectory()) {
            file.listFiles().each {
                printDir(it)
            }
        } else if (file.absolutePath.endsWith(".so")) {
            println "find so file: $file.absolutePath"
        }
    }
}

执行

点击gralde菜单,找到任务mergeXXXZZZNativeLibs 双击执行就行了。XXX是你的风味名称,ZZZ是你的编译类型。 在这里插入图片描述

结果

所有的so文件都打印出来了,搜索一下就行了 在这里插入图片描述

注意

如果不输出内容可以先清理一下工程

在这里插入图片描述