Android中获取so文件来源于哪个库

发布于:2025-02-15 ⋅ 阅读:(30) ⋅ 点赞:(0)

Android app中可能有很多的.so文件,有时我们不确定这些.so文件都是来源于哪些库的,可以通过在build.gradle中添加代码来统计。具体方法如下:

1.在com.android.application模块的build.gradle文件最后添加如下代码:

// 获取所有的.so文件的打包路径
tasks.whenTaskAdded {
    task ->
        if (task.name == 'mergeDebugNativeLibs') {
            task.doFirst {
                println("list so files begin")
                it.inputs.files.each { file ->
                    printSoPath(new File(file.absolutePath))
                }
                println("list so files end")
            }
        }
}

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

注意:
在task.name的if判断时的取值是按照当前启用的productFlavors和Build Variants来确定的,例如:
※当前未设置productFlavors、Build Variants为debug时,取值为:mergeDebugNativeLibs。
※当前未设置productFlavors、Build Variants为release时,取值为:mergeReleaseNativeLibs。
※当前启用的productFlavors为my、Build Variants为debug时,取值为:mergeMyDebugNativeLibs。
※当前启用的productFlavors为my、Build Variants为release时,取值为:mergeMyReleaseNativeLibs。
如果你不确定该怎么写,也可以Rebuild工程,然后在Build选项卡中的输出信息中查找关键字:NativeLibs,看到类似:Task :xxx:merge***NativeLibs的打印,其中merge***NativeLibs就是我们想要的取值。

2.添加完上述代码之后,执行Sync同步工程,然后执行如下任一步骤:
首先Clean Project,然后Run app。
Rebuild Project。
然后观察Build选项卡中的输出信息,会看到类似如下的打印:
 

> Task :app:mergeDebugNativeLibs
list so files begin
so file: /Users/pc/.gradle/caches/transforms-3/7437d712b6ccb749db2728234582b16a/transformed/jetified-android-gif-drawable-1.2.29/jni/armeabi-v7a/libpl_droidsonroids_gif.so
so file: /Users/pc/.gradle/caches/transforms-3/7437d712b6ccb749db2728234582b16a/transformed/jetified-android-gif-drawable-1.2.29/jni/x86/libpl_droidsonroids_gif.so
so file: /Users/pc/.gradle/caches/transforms-3/7437d712b6ccb749db2728234582b16a/transformed/jetified-android-gif-drawable-1.2.29/jni/arm64-v8a/libpl_droidsonroids_gif.so
so file: /Users/pc/.gradle/caches/transforms-3/7437d712b6ccb749db2728234582b16a/transformed/jetified-android-gif-drawable-1.2.29/jni/x86_64/libpl_droidsonroids_gif.so
so file: /Users/pc/.gradle/caches/transforms-3/9059e6ba8608795f5a95d5f2d2e27e14/transformed/jetified-mmkv-static-1.2.8/jni/armeabi-v7a/libmmkv.so
so file: /Users/pc/.gradle/caches/transforms-3/9059e6ba8608795f5a95d5f2d2e27e14/transformed/jetified-mmkv-static-1.2.8/jni/x86/libmmkv.so
so file: /Users/pc/.gradle/caches/transforms-3/9059e6ba8608795f5a95d5f2d2e27e14/transformed/jetified-mmkv-static-1.2.8/jni/arm64-v8a/libmmkv.so
so file: /Users/pc/.gradle/caches/transforms-3/9059e6ba8608795f5a95d5f2d2e27e14/transformed/jetified-mmkv-static-1.2.8/jni/armeabi/libmmkv.so
so file: /Users/pc/.gradle/caches/transforms-3/9059e6ba8608795f5a95d5f2d2e27e14/transformed/jetified-mmkv-static-1.2.8/jni/x86_64/libmmkv.so
so file: /Users/pc/.gradle/caches/transforms-3/bbbb3666b8295476ad28a2f638b957b5/transformed/jetified-VideoProcessor-2.4.0/jni/armeabi-v7a/libsoundtouch.so
so file: /Users/pc/.gradle/caches/transforms-3/0db68989bfee6e3e3278199b311efef1/transformed/jetified-xcrash-android-lib-3.1.0/jni/armeabi-v7a/libxcrash_dumper.so
so file: /Users/pc/.gradle/caches/transforms-3/0db68989bfee6e3e3278199b311efef1/transformed/jetified-xcrash-android-lib-3.1.0/jni/armeabi-v7a/libxcrash.so
so file: /Users/pc/.gradle/caches/transforms-3/0db68989bfee6e3e3278199b311efef1/transformed/jetified-xcrash-android-lib-3.1.0/jni/x86/libxcrash_dumper.so
so file: /Users/pc/.gradle/caches/transforms-3/0db68989bfee6e3e3278199b311efef1/transformed/jetified-xcrash-android-lib-3.1.0/jni/x86/libxcrash.so
so file: /Users/pc/.gradle/caches/transforms-3/0db68989bfee6e3e3278199b311efef1/transformed/jetified-xcrash-android-lib-3.1.0/jni/arm64-v8a/libxcrash_dumper.so
so file: /Users/pc/.gradle/caches/transforms-3/0db68989bfee6e3e3278199b311efef1/transformed/jetified-xcrash-android-lib-3.1.0/jni/arm64-v8a/libxcrash.so
so file: /Users/pc/.gradle/caches/transforms-3/0db68989bfee6e3e3278199b311efef1/transformed/jetified-xcrash-android-lib-3.1.0/jni/x86_64/libxcrash_dumper.so
so file: /Users/pc/.gradle/caches/transforms-3/0db68989bfee6e3e3278199b311efef1/transformed/jetified-xcrash-android-lib-3.1.0/jni/x86_64/libxcrash.so
list so files end

如果我们想知道libpl_droidsonroids_gif.so来源于哪个库,通过上述打印,得知其来源于android-gif-drawable库,并且其版本号为1.2.29。我们通过当前工程的依赖树进一步得知,此库的完整名称为:pl.droidsonroids.gif:android-gif-drawable:1.2.29。


网站公告

今日签到

点亮在社区的每一天
去签到