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

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

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

Groovy 复制代码
// 获取所有的.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选项卡中的输出信息,会看到类似如下的打印:

Groovy 复制代码
> 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。

相关推荐
太空漫步112 小时前
android社畜模拟器
android
海绵宝宝_5 小时前
【HarmonyOS NEXT】获取正式应用签名证书的签名信息
android·前端·华为·harmonyos·鸿蒙·鸿蒙应用开发
凯文的内存6 小时前
android 定制mtp连接外设的设备名称
android·media·mtp·mtpserver
天若子7 小时前
Android今日头条的屏幕适配方案
android
林的快手8 小时前
伪类选择器
android·前端·css·chrome·ajax·html·json
望佑8 小时前
Tmp detached view should be removed from RecyclerView before it can be recycled
android
xvch11 小时前
Kotlin 2.1.0 入门教程(二十四)泛型、泛型约束、绝对非空类型、下划线运算符
android·kotlin
人民的石头14 小时前
Android系统开发 给system/app传包报错
android
yujunlong391915 小时前
android,flutter 混合开发,通信,传参
android·flutter·混合开发·enginegroup
rkmhr_sef15 小时前
万字详解 MySQL MGR 高可用集群搭建
android·mysql·adb