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。

相关推荐
有位神秘人20 小时前
Android中Notification的使用详解
android·java·javascript
·云扬·20 小时前
MySQL Binlog落盘机制深度解析:性能与安全性的平衡艺术
android·mysql·adb
独自破碎E21 小时前
【BISHI9】田忌赛马
android·java·开发语言
代码s贝多芬的音符1 天前
android 两个人脸对比 mlkit
android
darkb1rd1 天前
五、PHP类型转换与类型安全
android·安全·php
gjxDaniel1 天前
Kotlin编程语言入门与常见问题
android·开发语言·kotlin
csj501 天前
安卓基础之《(22)—高级控件(4)碎片Fragment》
android
峥嵘life1 天前
Android16 【CTS】CtsMediaCodecTestCases等一些列Media测试存在Failed项
android·linux·学习
stevenzqzq1 天前
Compose 中的状态可变性体系
android·compose
似霰1 天前
Linux timerfd 的基本使用
android·linux·c++