2011年4月21日 星期四

Android 編譯時遇到 LOCAL_MODULE_TAGS 的錯誤

編譯時載入模組有時會出現錯誤.....

如果在編譯時出現下列訊息:

build/core/base_rules.mk:74: *** Module name: 01-test
build/core/base_rules.mk:75: *** Makefile location: external/dhcpcd

build/core/base_rules.mk:76: *
build/core/base_rules.mk:77: * Each module must use a LOCAL_MODULE_TAGS in its
build/core/base_rules.mk:78: * Android.mk. Possible tags declared by a module:
build/core/base_rules.mk:79: *
build/core/base_rules.mk:80: * optional, debug, eng, tests, samples
build/core/base_rules.mk:81: *
build/core/base_rules.mk:82: * If the module is expected to be in all builds
build/core/base_rules.mk:83: * of a product, then it should use the
build/core/base_rules.mk:84: * "optional" tag:
build/core/base_rules.mk:85: *
build/core/base_rules.mk:86: * Add "LOCAL_MODULE_TAGS := optional" in the
build/core/base_rules.mk:87: * Android.mk for the affected module, and add
build/core/base_rules.mk:88: * the LOCAL_MODULE value for that component
build/core/base_rules.mk:89: * into the PRODUCT_PACKAGES section of product
build/core/base_rules.mk:90: * makefile(s) where it's necessary, if
build/core/base_rules.mk:91: * appropriate.
build/core/base_rules.mk:92: *
build/core/base_rules.mk:93: * If the component should be in EVERY build of ALL
build/core/base_rules.mk:94: * products, then add its LOCAL_MODULE value to the
build/core/base_rules.mk:95: * PRODUCT_PACKAGES section of
build/core/base_rules.mk:96: * build/target/product/core.mk
build/core/base_rules.mk:97: *
build/core/base_rules.mk:98: *** user tag detected on new module - user tags are only supported on legacy modules. Stop.

只需要看第二行 『Makefile location: external/dhcpcd』 的 external/dhcpcd 路徑下,
修改 Android.mk ,
找到第一行的 『Module name: 01-test』的 LOCAL_MODULE := 01-test,
在下面加入 LOCAL_MODULE_TAGS := optional 即可

或是
有找到 LOCAL_MODULE_TAGS := user 的話
改成 LOCAL_MODULE_TAGS := optional

3 意見:

匿名 提到...

站主您好~
最近我在看Android.mk相關的語法,想請教
LOCAL_MODULE_TAGS := user LOCAL_MODULE_TAGS := optional
這兩行各代表什麼意思呢?
找了網路上的資料,還是不懂LOCAL_MODULE_TAGS到底是什麼意思。是否能請您幫忙解釋呢?感謝您~~

Yow 提到...

LOCAL_MODULE_TAGS 指的是該模組在編譯什麼版本時會被載入
例如文內提到的 01-test 模組
原本是只有在編譯user版本時載入
(LOCAL_MODULE_TAGS := user)
改成編譯任何版本時都載入
(LOCAL_MODULE_TAGS := optional)

預設的編譯版本是
TARGET_BUILD_VARIANT=eng

miso 提到...

噢噢!!有點通了~~ 那麼這個值是一定要去定義的嗎? 因為我在其他網站上看到別人說,如果Android.mk裡不去定義這個值的話,這個module是預設"LOCAL_MODULE_TAGS := optional",請問這個說法是對的嗎? 這樣一來,不是會遇到像您這篇文章裡提到的錯誤嗎? 感謝您的回答~~

##EasyReadMore##