Android源码中如何根据库名或者可执行文件确定源码所在

    最近在做Android ROM的裁剪工作,被告知要删除xxx模块,需要修改xxx模块的Android.mk,那么问题来了,xxx模块的源码在哪呢?

    首先可以蒙一下,直接在根目录下find一下xxx,可能会找到。有人就说了xxx肯定会出现在Android.mk中,grep一下吧。对此我只能呵呵了,几十个G的源码,在如此高效开发的环境下,真没那个耐心等啊。实际上笔者以前也是这么干的,不过取了个巧掐头去尾去find“*xxx*”,虽然搜到的东西比较多,但是范围缩小了,大概看一下,grep一下,基本就确定了。

    来个曲线救国,通过编译原理知晓,如果想编译出一个库或者可执行文件,就必须经过预处理、编译、汇编、链接四个阶段,肯定会生成*.o等一堆中间文件。那么笔者大胆怀疑,Android在编译的时候肯定会有个中间目录存放那些*.o, *.s等等的文件,甚至目标文件也在其中。

    拿最熟悉的库和可执行文件试了一下,果然在$OUT/obj/目录存放了所有的中间文件和目标文件,而对应的中间文件则在xxx_intermediates下。

     比如libmedia.so,存在一个$OUT/obj/SHARED_LIBRARIES/libmedia_intermediates/目录

     比如dalvik-vm-unit-tests, 存在一个$OUT/obj/EXECUTABLES/dalvik-vm-unit-tests_intermediates/目录

    至此问题简单多了,比如我想定位libmedia.so的源码位置

     $ find -name libmedia_intermediates -type d

    找到目录后,随便从目录下找个*.o文件,比如IOMX.o

     $ find -name IOMX.*

    通过最终的结果基本可以定位源码位置了,还确定不了,查结果对应的Android.mk绝对OK。

   笔者自己发现实践所得,若有更高效的方法,望告知!

猜你喜欢

转载自blog.csdn.net/xy_kok/article/details/81913034