难觅libaudiopolicy.so之踪迹

本文详细阐述了在修改AudioPolicyManagerBase.cpp后,libaudioflinger.so未能生效的原因,涉及Android.mk的正确使用、静态库libaudiopolicybase.a的构建及其对构建流程的影响。通过分析make过程后的系统lib目录更新情况,最终揭示了libaudiopolicy.so的生成,并指出了忽视ifelseblock导致的误解。
AI助手已提取文章相关产品:

由来:修改AudioPolicyManagerBase.cpp 源代码后仅仅将libaudioflinger.so push 进系统,但修改内容却未生效,相关日志不打印。


犯了两个错误:
1.编译libaudioflinger.so前未仔细阅读相关的Android.mk。
想当然认为,修改某个文件后,若这个文件所在目录包含Android.mk,只要mmm此目录,然后将相应的so push进/system/lib/即可,大错特错!
2.阅读Android.mk,但却一知半解,不如不解。
后来发现AudioPolicyManagerBase.cpp所处目录下的Android.mk并非只生成一个.so,尚有静态库libaudiopolicybase.a生成。再看build libaudioflinger.so时也确实引用了此静态库,更坚定了之前的错误判断。

走投无路之际,只好croot;make;折腾半小时后,终于发现这样能使之生效。兴奋之余,赶紧找原因。


静下心来仔细看了下make过后out/..../system/lib目录下被更新的文件,发现远不止libaudioflinger.so一个。

一眼就看到了libaudiopolicy.so,竟然也是最新的。因为之前mmm时从未发现过这个家伙生成,眼前一亮。

回到audioflinger目录下再看其Android.mk。汗颜之前的错误,那么明显的一个if else block 却被我忽视了,= =//。

在我的配置环境下,build libaudioflinger.so时并不会引用libaudiopolicybase.a,而是引用了ibaudio libaudiopolicy。好吧,既然从未看到过与build libaudiopolicy相关的语句,果断Ctrl+H,感谢!

libaudiopolicy 在hardware/alsa_sound/Android.mk中被build,build时引用了静态库libaudiopolicybase。

终于。。。二完了。


ifeq ($(strip $(BOARD_USES_GENERIC_AUDIO)),true)
LOCAL_STATIC_LIBRARIES += libaudiointerface libaudiopolicybase
LOCAL_CFLAGS += -DGENERIC_AUDIO
else
LOCAL_SHARED_LIBRARIES += libaudio libaudiopolicy
endif

您可能感兴趣的与本文相关内容

[2025-10-05T02:28:03.374Z] [system]: FAILED: out/soong/.intermediates/vendor/sprd/platform/frameworks/av/service/audio/audiopolicy/engineconfigurable/libunisocaudiopolicyengineconfigurable/android_arm64_armv8-2a_cortex-a55_shared/unstripped/libunisocaudiopolicyengineconfigurable.so [2025-10-05T02:28:03.374Z] [system]: prebuilts/clang/host/linux-x86/clang-r547379/bin/clang++ out/soong/.intermediates/bionic/libc/crtbegin_so/android_arm64_armv8-2a_cortex-a55/crtbegin_so.o @out/soong/.intermediates/vendor/sprd/platform/frameworks/av/service/audio/audiopolicy/engineconfigurable/libunisocaudiopolicyengineconfigurable/android_arm64_armv8-2a_cortex-a55_shared/unstripped/libunisocaudiopolicyengineconfigurable.so.rsp out/soong/.intermediates/bionic/libc/crtend_so/android_arm64_armv8-2a_cortex-a55/crtend_so.o out/soong/.intermediates/bionic/libc/crt_pad_segment/android_arm64_armv8-2a_cortex-a55/crt_pad_segment.o -o out/soong/.intermediates/vendor/sprd/platform/frameworks/av/service/audio/audiopolicy/engineconfigurable/libunisocaudiopolicyengineconfigurable/android_arm64_armv8-2a_cortex-a55_shared/unstripped/libunisocaudiopolicyengineconfigurable.so -target aarch64-linux-android10000 -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--build-id=md5 -Wl,--fatal-warnings -Wl,--no-undefined-version -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libgcc_stripped.a -Wl,--exclude-libs,libunwind_llvm.a -Wl,--exclude-libs,libunwind.a -fuse-ld=lld -Wl,--icf=safe -Wl,--no-demangle -Wl,--compress-debug-sections=zstd -Wl,--no-undefined -Wl,-z,separate-code -Wl,-z,separate-loadable-segments -Wl,-z,max-page-size=16384 -Wl,--pack-dyn-relocs=android+relr -nostdlib -Wl,--gc-sections -shared -Wl,-soname,libunisocaudiopolicyengineconfigurable.so -flto=thin -fsplit-lto-unit -Wl,-plugin-opt,-import-instr-limit=5 -Wl,-mllvm,-regalloc-enable-advisor=release -Wl,--exclude-libs=libclang_rt.builtins-aarch64-android.a -Wl,--exclude-libs=libclang_rt.ubsan_minimal-aarch64-android.a [2025-10-05T02:28:03.374Z] [system]: ld.lld: error: undefined symbol: _ZN7android22AudioPolicyManagerStub33loadAudioPolicyEngineConfigCustomEv [2025-10-05T02:28:03.374Z] [system]: >>> referenced by EngineBase.cpp:232 (frameworks/av/services/audiopolicy/engine/common/src/EngineBase.cpp:232) [2025-10-05T02:28:03.374Z] [system]: >>> out/soong/.intermediates/frameworks/av/services/audiopolicy/engine/common/libaudiopolicyengine_common/android_arm64_armv8-2a_cortex-a55_static/libunisocaudiopolicyengineconfigurable.so.lto.libaudiopolicyengine_common.a(EngineBase.o at 544442).o:(_ZN7android12audio_policy10EngineBase27loadAudioPolicyEngineConfigERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEb) [2025-10-05T02:28:03.374Z] [system]: clang++: error: linker command failed with exit code 1 (use -v to see invocation)
最新发布
10-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值