现在的位置: 首页 > 综合 > 正文

将OMX相关的文件提取出来

2013年07月01日 ⁄ 综合 ⁄ 共 1969字 ⁄ 字号 评论关闭

问题概述

Android中使用OMX的部分集成在了media-->stagefight代码中,但是整个libstagefright的代码比较大,同时还要涉及include的其他一些代码,文件数超多,分析起来非常辛苦。
因此,我就想只把和OMX相关的文件提取出来,单独分析。同时为了保持和原有的代码位置一致,因此,提取出来的时候需要保持目录结构一致。

基本步骤

1. 备份当前目录【非常重要】
2. 查找所有名字中不包含OMX的文件,OMX不区分大小写
3. 删除所有查找出来的文件
4. 删除所有空目录

备份当前目录

我是在Android 4.0.4版本上分析代码的,所以此时播放相关的文件还在frameworks/base目录中。因此我们的工作目录就在frameworks/base目录下。
整个目录大小在800M以上,使用tar压缩后,大小还在500M以上。看来,要进行的工作量还不小。

查找所有名字不包含OMX的文件

命令版本一:find . -name *omx*                          缺点:此命令只能查找omx为小写的文件,对于大写的OMX等文件查找不出来
命令版本二:find . -iregex ".*omx.*"                     该命令可以查找出所有和omx相关的文件/文件夹,文件名不区分大小写。缺点是,需求是不包含omx的文件,此处与需求不符。
命令版本三:find . -not -iregex ".*omx.*"              该命令可以查找出所有名字不包含omx的文件。缺点是,此命令查找出来的既有文件也有文件夹,如:media文件夹,要是后续把这个文件夹删除了,那就白干活了。
目录版本四:find . -type f -not -iregex ".*omx.*"    该命令正确、完整的完成了我么的需求:文件名中和omx相关、不包含、文件

删除所有查找出来的文件

通过find . -type f -not -iregex ".*omx.*"命令,我们发现有太多的文件了,而且在命令版本一find . -iregex ".*omx.*"时已经发现,查找出来的文件全部在media和include目录。
因此,我们先手动将当前目录下的其他文件夹直接删除。此处先给出命令:
find . -maxdepth 1 -not -regex "./\(media\|include\)" -exec rm -rf {} \;
其中几个新增的语法为:
1. -maxdepth参数表示find命令查找的深度,此处我们只针对一级子目录,即深度为1。
2. "./\(media\|include\)"是一个正则表达式,表示的意思是:./media或./include。其中"\(","\|"和"\)"都是转义字符,分别表示对应的"(","|"和")"。
3. -exec COMMAND {} \; 是find命令的action操作,即对找到的文件执行COMMAND操作,此处执行的是rm -rf操作
在第三步的基础上,在加上 -exec rm -v {} \;操作,即可以删除所有查找出来的文件
find . -type f -not -iregex ".*omx.*" -exec rm -v {} \;

删除所有空目录

在查找时,我们只针对文件,没有针对文件夹,为的就是可能删除文件夹中不包含OMX,但是子文件包含OMX的情况。
因此,经过上一步,会有大量的空目录。我们先使用如下的命令将他们找出来:
find -type d -empty 
新增的语法为:
1. -type d表示是directory,即目录
2. -empty表示文件或者文件夹是否为空
同样,在查找到文件夹后,使用删除操作,不过此处应该是删除文件夹,rm的时候需要添加rf参数。
find -type d -empty -exec rm -rf {} \;
需要注意的是,如果一个目录A不为空,但是其子目录均为空,那么,经过上一步操作后,目录A就变成了空目录。
因此,此时我们需要多次调用find -type d -empty -exec rm -rf {} \;操作,知道返回值为0,即$? == 0

总结

经过上述操作,base目录下的文件大小变为4.3M:
base$ du -sh
4.3M    .
文件数量减少为360个:
base$ find -type f | wc  -l
360
当然,在提取的文件中有几个目录也可以删掉,即
./media/tests                                                                 测试代码,先不分析
./media/libstagefright/omx/tests                                      测试代码,先不分析
./media/libstagefright/codecs/on2/h264dec/omxdl             DL层代码,先不分析
那么在此精简后的代码,文件大小已经减少为844K,文件个数减少为32个。

抱歉!评论已关闭.