You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android.mk构建中.so文件缺失求助:ffmpeg-kit集成失败

问题分析与解决方案

问题背景

原本在Android Studio中集成ffmpeg-kit可正常运行的Java代码库,改用Android.mk编译时出现找不到.so文件的错误,且最终生成的APK中不存在对应ABI的lib目录,尝试将ffmpeg-kit作为独立模块构建也未解决该问题。

提供的配置文件

Android.mk

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := libabidect
LOCAL_SRC_FILES := src/jni/libffmpegkit_abidetect.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := ffmpegkit
LOCAL_SRC_FILES := ffmpegkit.c
LOCAL_LDLIBS := -llog
LOCAL_SHARED_LIBRARIES := libabidect
LOCAL_C_INCLUDES := ffmpegkit
include $(BUILD_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_SYSTEM_EXT_MODULE := true
LOCAL_MODULE_OWNER := mtk
LOCAL_MODULE_TAGS := optional
LOCAL_CERTIFICATE := platform

LOCAL_STATIC_ANDROID_LIBRARIES := \
    android-support-constraint-layout \
    android-support-v17-leanback \
    android-support-design \
    android-support-v4 \

LOCAL_STATIC_JAVA_AAR_LIBRARIES := \
    lottie \
    ffmpeg \

LOCAL_STATIC_JAVA_LIBRARIES := \
    android-support-constraint-layout-solver \
    com.mediatek.support.factory \
    aaa \
    AudioAnalyzer \
    javaee-api \
 
LOCAL_RESOURCE_DIR := \
    $(LOCAL_PATH)/res
LOCAL_USE_AAPT2 := true
LOCAL_SRC_FILES := \
    $(call all-java-files-under, src)

LOCAL_PACKAGE_NAME := PACKAGE_NAME
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
LOCAL_PRIVATE_PLATFORM_APIS := true
LOCAL_DEX_PREOPT := false
include $(BUILD_PACKAGE)

include $(CLEAR_VARS)
 LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \
    lottie:libs/lottie-2.7.0.aar \
    AudioAnalyzer:libs/AudioAnalyzer.jar \
    ffmpeg:libs/ ffmpeg-kit-full-gpl-6.0.aar \
    javaee-api:libs/javaee-api-8.0.1.jar \

LOCAL_SHARED_LIBRARIES := libabidect 
include $(BUILD_MULTI_PREBUILT)

构建脚本

# Prepare some environment variables before build
export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8

# Apply patch before build
# bash vendor/mediatek/tv/build/android/android_r_base_build_fusion.sh
source build/envsetup.sh

m -j4 WEEKLY_BUILD_TYPE=PRETEST EMMC_SIZE=16G PACKAGE

问题根源

  1. AAR库中的SO未被正确提取打包:ffmpeg-kit的AAR包中包含对应ABI的SO文件,但当前配置仅将其作为静态Java库引用,未处理其中的原生库资源。
  2. 预构建SO的路径与ABI匹配问题:手动添加的libffmpegkit_abidetect.so未按ABI目录结构放置,构建系统无法识别并打包到对应ABI目录。
  3. 模块依赖关联缺失:打包APK的模块未明确依赖原生SO模块,导致构建系统不会将SO文件打包进APK。

修复步骤

步骤1:正确处理ffmpeg-kit的AAR包

ffmpeg-kit的AAR包含原生SO,需明确提取其中的SO文件,修改Android.mk中预构建部分:

include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \
    lottie:libs/lottie-2.7.0.aar \
    AudioAnalyzer:libs/AudioAnalyzer.jar \
    javaee-api:libs/javaee-api-8.0.1.jar \
# 单独提取ffmpeg-kit AAR中的SO,按需添加目标ABI
LOCAL_PREBUILT_JNI_LIBS := \
    libs/ffmpeg-kit-full-gpl-6.0.aar!/lib/armeabi-v7a/libffmpegkit.so \
    libs/ffmpeg-kit-full-gpl-6.0.aar!/lib/armeabi-v7a/libffmpegkit_abidetect.so \
    libs/ffmpeg-kit-full-gpl-6.0.aar!/lib/arm64-v8a/libffmpegkit.so \
    libs/ffmpeg-kit-full-gpl-6.0.aar!/lib/arm64-v8a/libffmpegkit_abidetect.so
include $(BUILD_MULTI_PREBUILT)

步骤2:确保APK模块依赖原生库

在打包APK的模块中添加对原生库的依赖,让构建系统自动打包SO:

include $(CLEAR_VARS)
# ... 保留原有配置 ...
# 添加原生库依赖
LOCAL_SHARED_LIBRARIES := libffmpegkit libabidect
# 强制要求构建系统包含这些模块
LOCAL_REQUIRED_MODULES := libffmpegkit libabidect
# 开启AAR原生库自动提取
LOCAL_AAPT_FLAGS += --auto-add-overlay --extract-native-libs

步骤3:规范手动引入SO的目录结构

如果保留手动引入的SO文件,需按Android构建要求的目录结构存放:

src/jni/
├── armeabi-v7a/
│   └── libffmpegkit_abidetect.so
├── arm64-v8a/
│   └── libffmpegkit_abidetect.so
└── ... 其他需要支持的ABI目录 ...

然后修改预构建SO的配置:

include $(CLEAR_VARS)
LOCAL_MODULE := libabidect
LOCAL_SRC_FILES := src/jni/$(TARGET_ARCH_ABI)/libffmpegkit_abidetect.so
LOCAL_MODULE_SUFFIX := .so
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
include $(PREBUILT_SHARED_LIBRARY)

步骤4:指定构建ABI(可选)

在构建脚本中添加目标ABI,确保构建对应架构的SO:

export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8
export TARGET_ARCH_ABI=arm64-v8a
source build/envsetup.sh
m -j4 WEEKLY_BUILD_TYPE=PRETEST EMMC_SIZE=16G PACKAGE

验证方法

构建完成后,解压生成的APK文件,检查lib/目录下是否存在对应ABI的子目录,且包含libffmpegkit.so和libffmpegkit_abidetect.so文件。

内容的提问来源于stack exchange,提问作者Kenan Bandaliyev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 03:35:54