从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类型的也是类似的查找方法
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类型的也是类似的查找方法
相关文章推荐
- 在android源码下编译生成.so
- android源码中编译打包so文件进apk
- 解决:Android编译源码根目录下/system/vold后,通过push命令将编译生成的vold文件push至system/bin下无法正常开机
- android项目中配置NDK自动编译生成so文件
- 解决:Android编译源码根目录下/system/vold后,通过push命令将编译生成的vold文件push至system/bin下无法正常开机
- android系统源码根据不同的配置文件编译生成不同的系统
- Windows环境下编译Assimp库生成Android可用的.so文件
- 编译Speex生成so库文件(android-speex)
- Android studio如何利用Android.mk编译生成多个so文件
- 编译Speex生成so库文件(android-speex)
- Android编译源码 其中含有jar和so库文件的
- Android--ndk编译生成.so文件
- Android源码快速查找文件、搜索字符串和编译
- android(NDK+JNI)---NDK编译生成so文件
- 重温android studio jni编译生成so文件
- 在Android源码中编译带.so库文件的APK,使其具体系统签名和系统权限
- Android 使用 FFmpeg (一)——编译生成.so文件
- android studio ndk-build 编译C生成.so文件(ndk基础篇)