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。

相关推荐
威哥爱编程1 小时前
谷歌Android闭源与鸿蒙崛起:一场关于技术主权的生态博弈
android·harmonyos
小鱼人爱编程2 小时前
Flutter 打包APK的几种方式
android·前端·后端
sunly_2 小时前
Flutter:切换账号功能记录
android·java·flutter
casual_clover4 小时前
Android 设备实现 adb connect 连接的步骤
android·adb
恋猫de小郭4 小时前
Android 确定废弃「屏幕方向锁定」等 API ,如何让 App 适配大屏和 PC/XR 等场景
android·前端·flutter
神仙别闹5 小时前
基于Java(SSM)+Mysql实现移动大厅业务办理(增删改查)
android·java·mysql
木子庆五7 小时前
Android设计模式之模板方法模式
android·设计模式·模板方法模式
孤舟簔笠翁9 小时前
【Audio开发一】android音频问题排查指南
android·音视频
CYRUS_STUDIO11 小时前
Unidbg Trace 反 OLLVM 控制流平坦化(fla)
android·逆向·汇编语言
木子庆五12 小时前
Android设计模式之工厂方法模式
android·设计模式·工厂方法模式