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過程當中發現的一個問題,若是您也遇到了,而且認爲個人解釋存在問題,請指出,以避免給你們帶來誤解。

相關文章
相關標籤/搜索