Android 编译重要参数 LOCAL_MODULE_TAGS

近移植tslib库到android系统,发现编译好的库和测试工具居然没有输入到out/target/product/Ok6410/system/lib 和 out/target/product/Ok6410/system/bin下面,感受很奇怪,因而下定决心看一下,到底输入到了哪里。 html

过程以下: android

   tslib的源代码放到了android2.3 源代码下 vendor 目录 (android2.3中本身添加,如何设置本身的vendor 个人博客中有说明)forlinx/OK6410/的下面. tslib目录下面的 Android.mk写好之后,从新make clean 整个android源码,再次make 编译经过,奇怪的是输出目录 out/target/product/Ok6410/system/bin 下面居然没有tslib相关的工具,而是放在了out/target/product/OK6410/symbols/system/bin 下面,在作打包文件时,因为没有把symbols文件夹放到文件系统里面,因此校准功能不能实现。(事实上提取文件系统过程当中也不该该把symbols文件夹考虑在内)。 git

 

 最后查找缘由 ,是由于tslib文件下的Android.mk文件里面,LOCAL_MODULE_TAGS变量设置的有问题。 工具

LOCAL_MODULE_TAGS :=optional 测试

把这项改成 ui

LOCAL_MODULE_TAGS :=eng便可 this

 

缘由是LOCAL_MODULE_TAGS 变量跟TARGET_BUILD_VARIANT 变量息息相关。 android系统编译时若是不指定 google

TARGET_BUILD_VARIANT 变量的值,默认 TARGET_BUILD_VARIANT=eng ,这一项指定 编译android时造成的版本风格,通常发布时使用这个值,固然还有user,debuguser等风格值,具体看一下这个连接http://android.git.kernel.org/?p=platform/build.git;a=blob_plain;f=core/build-system.html;h=43bae03b6b7b9cba678b86d2faf424fa565497bf;hb=HEAD,若是打不开,翻个墙就能够。 spa

这样设置好之后,从新编译,输出目录out/target/product/Ok6410/system/bin ,out/target/product/Ok6410/system/lib里面就有tslib 相关的库和测试程序了。 debug

  因此,若是本身须要加额外的模块,或者应用程序,必定要注意Android.mk里面的这个变量,固然了,若是你指定了LOCAL_MODULE_TAGS :=optional,也能编译出来,可是存放的输入路径就不是通常的

out/target/product/Ok6410/system/目录了,而是out/target/product/OK6410/symbols/system/目录。

后来本身在android源代码的 external目录下面放了一个模块,指定该模块的编译风格为LOCAL_MODULE_TAGS :=optional,从新编译,经过之后,居然直接输出到了out/target/product/Ok6410/system/ 目录,非常惊讶,我的认为还跟模块存放的目录有关.因此不管模块在哪一个文件夹下面,最好指定的值跟TARGET_BUILD_VARIANT 相关,若是没指定TARGET_BUILD_VARIANT ,系统会默认设置TARGET_BUILD_VARIANT =eng,你也就指定LOCAL_MODULE_TAGS :=eng 

目前本身遇到的 vendor目录,hardware目录下面的模块输出路径跟LOCAL_MODULE_TAGS 有很大的关系

LOCAL_MODULE_TAGS :=optional >> out/target/product/OK6410/symbols/system/

LOCAL_MODULE_TAGS :=eng    >> out/target/product/Ok6410/system/

 

固然前提是TARGET_BUILD_VARIANT=eng .

 

下面是网友遇到的相似问题:

"Set LOCAL_MODULE_TAGS to any number of whitespace-separated tags.

This variable controls what build flavors the package gets included
in. For example:

    * user: include this in user/userdebug builds
    * eng: include this in eng builds
    * tests: the target is a testing target and makes it available for tests
    * optional: don't include this"

Are these the same as "variants" and if so, which name would affect
the build and how? I've noticed that everything mentioned in a
product's makefile will always get built. But what gets in the final
system.img not always the same as what gets built.
http://groups.google.com.tw/group/android-platform/browse_thread/thread/a4f70254a2ceb622 
http://android.git.kernel.org/?p=platform/build.git;a=blob_plain;f=core/build-system.html;h=43bae03b6b7b9cba678b86d2faf424fa565497bf;hb=HEAD

 

 以上是本身在移植android2.3过程当中发现的一个问题,若是您也遇到了,而且认为个人解释存在问题,请指出,以避免给你们带来误解。

相关文章
相关标签/搜索