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。

相关推荐
_祝你今天愉快9 小时前
从驱动来分析服务的添加过程
android
Dovis(誓平步青云)11 小时前
折叠屏悬停看视频,上半屏和下半屏应该各做什么
android·java·服务器·开发语言·安全·音视频
alexhilton12 小时前
让架构边界变成可执行的测试
android·kotlin·android jetpack
hai_android14 小时前
SendChannel 与 ReceiveChannel 通信机制
android
数据治理自习室16 小时前
AI 应用评测体系(GraphRAG)
android·大数据·人工智能·kotlin
爱笑鱼16 小时前
Android 系统启动机制(五):system_server 是 init 启动的,还是 Zygote fork 出来的?
android
智购科技无人售货机工厂17 小时前
2026自动售货机防拆机物理安全设计:从安全螺丝到结构互锁的工程实践~YH
android·网络·驱动开发·python·单片机·安全·云原生
开开心心就好17 小时前
电子教鞭工具支持画框写字插图片功能齐全
android·开发语言·前端·javascript·人工智能·pdf·html
Dovis(誓平步青云)17 小时前
拍视频前先把镜头想清楚:做一个分镜取景辅助器
android·java·服务器·javascript·人工智能
峥嵘life18 小时前
Android16 系统 APEX 模块说明
android·大数据·开发语言