难觅libaudiopolicy.so之踪迹

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由来:修改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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值