android makefile批处理文件夹的资源

来源:互联网 发布:mac apktool使用教程 编辑:程序博客网 时间:2024/06/01 08:59



   在android开发中,我们需要将某个文件夹的资源预置到system中或设备中的某个文件夹中,如果资源文件比较少,我们可以使用android的PRODUCT_COPY_FILES来处理。如果资源文件比较多,怎么办?

    这时候可以使用foreach 函数来处理。  foreach的介绍原文出处http://blog.csdn.net/cjsycyl/article/details/8064871

   

foreach 函数和别的函数非常的不一样。因为这个函数是用来做循环用的,Makefile中的foreach函数几乎是仿照于Unix标准Shell (/bin/sh)中的for语句,或是C-Shell(/bin/csh)中的foreach语句而构建的。它的语法是:


    $(foreach <var>,<list>,<text>)


这个函数的意思是,把参数<list>;中的单词逐一取出放到参数<var>;所指定的变量中,然后再执行< text>;所包含的表达式。每一次<text>;会返回一个字符串,循环过程中,<text>;的所返回的每个字符串会 以空格分隔,最后当整个循环结束时,<text>;所返回的每个字符串所组成的整个字符串(以空格分隔)将会是foreach函数的返回值。

所以,<var>;最好是一个变量名,<list>;可以是一个表达式,而<text>;中一般会使用<var>;这个参数来依次枚举<list>;中的单词。举个例子:

    names := a b c d

    files := (foreachn,(names),(n).o)(name)中的单词会被挨个取出,并存到变量“n”中,“(n).o(n)”计算出一个值,这些值以空格分隔,最后作为foreach函数的返回,所以,$(files)的值是“a.o b.o c.o d.o”。

注意,foreach中的<var>;参数是一个临时的局部变量,foreach函数执行完后,参数<var>;的变量将不在作用,其作用域只在foreach函数当中。


因此我们可以编写脚本如下来批处理theme目录下的文件到system/etc/theme目录下。

src_files := (shellls(LOCAL_PATH)/theme )
PRODUCT_COPY_FILES += (foreachfile,(src_files), \
        (LOCALPATH)/source/app/(file):system/etc/theme/$(file))

    注:1 LOCAL_PATH路径需要完善好,避免找不到路径,而导致没有拷贝完;2 以上脚本只能对单个文件夹内的文件,而不能处理文件夹中的文件夹内,因此如果多个文件夹嵌套,可以对每个文件夹路径分别定义,重置src_files,或者用函数来封装foreach。


     

原创粉丝点击