您的位置:首页 > 移动开发 > Android开发

从Android源码编译生成的so文件查找源码

2014-01-15 10:55 751 查看
从android源码路径运行如下命令

find . -iname "*.mk" |xargs grep LOCAL_MODULE > moudule.txt

此命令意思是搜索所有mk文件,然后再对结果搜索关键字LOCAL_MODULE,最后将结果输出到moudule.txt

输出后moudule.txt的位置就是你执行命令的路径。

moudule.txt中会有【LOCAL_MODULE := 】这类结果

如果so文件名为

system/lib/libdrmpassthruplugin.so

可以搜索moudule.txt文件,找到libdrmpassthruplugin

./frameworks/av/drm/libdrmframework/plugins/passthru/Android.mk:LOCAL_MODULE := libdrmpassthruplugin

/frameworks/av/drm/libdrmframework/plugins/passthru/Android.mk中就会包含源码路径了

例如:

LOCAL_SRC_FILES:= \

src/DrmPassthruPlugIn.cpp

如果可以搜索到so的module名称相同结果的,可以继续看看,多个Android.mk文件都是如何写的

以libbt-vendor.so为例

module.txt结果中有3个相同结果

./hardware/qcom/bt/libbt-vendor/Android.mk:LOCAL_MODULE := libbt-vendor

./hardware/imx/libbt-ath3k/Android.mk:LOCAL_MODULE := libbt-vendor

./device/common/libbt/Android.mk:LOCAL_MODULE := libbt-vendor

先看这3个Android.mk中LOCAL_MODULE_CLASS := SHARED_LIBRARIES

说明是编译so,如果不是说明不是编译so,就可以pass掉了

如果仍然都是编译so的话,就看看是否有条件编译

ifneq ($(BOARD_HAVE_BLUETOOTH_QCOM),)

如果make file开头有这种描述就继续搜索一下BOARD_HAVE_BLUETOOTH_QCOM

find . -iname "*.mk" |xargs grep BOARD_HAVE_BLUETOOTH_QCOM > ttt.txt

find . -iname "*.mk" |xargs grep BOARD_USE_AR3K_BLUETOOTH > ttt1.txt

find . -iname "*.mk" |xargs grep BOARD_HAVE_BLUETOOTH_BCM > ttt1.txt

发现只有

BOARD_USE_AR3K_BLUETOOTH是有定义的,具体根据是哪种device判断代码是否编译进了system.img

定义类似

./device/fsl/imx53_smd/BoardConfig.mk:BOARD_USE_AR3K_BLUETOOTH := true

./device/fsl/arm2_6sl/BoardConfig.mk:BOARD_USE_AR3K_BLUETOOTH := false

-------------------------------------------------------------------------------------------------

jar 文件查找源码方法类似

apache-xml.jar为例

find . -iname "*.mk" |xargs grep > jar.txt

查看结果中包含【LOCAL_MODULE := 】这类结果

./external/apache-xml/Android.mk:LOCAL_MODULE := apache-xml

./external/apache-xml/Android.mk:LOCAL_SRC_FILES := $(apache-xml_src_files)

./external/apache-xml/Android.mk: LOCAL_MODULE := apache-xml-hostdex

./external/apache-xml/Android.mk: LOCAL_SRC_FILES := $(apache-xml_src_files)

找到对应Android.mk,查找对应src即可

LOCAL_SRC_FILES := $(apache-xml_src_files)

而前面定义了

apache-xml_src_files := $(call all-java-files-under,src/main/java)

说明是src/main/java目录下的全部java文件

bin类型的也是类似的查找方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: