sensor.xxxxx.so一致无法装入到system/lib/hw中。找了好久也不知到为什么,
发现只要有Android.mk的目录都会被编译,编译出来的so放到out目录下的obj中,但是并不是所有的都会被复制到system/lib或者system/lib/hw中.
但是只要在module所在目录用mm编译,就发现一切正常,编译出来的so会出现在LOCAL_MODULE_PATH所制定的最终安装位置。但是整体编译就有不会出现在指定位置。
昨晚和王永请教后发现是LOCAL_MODULE_TAGS := optional的问题,他建议将optional换成debug。我今天早上试了以下,果然就好了。
所以我又仔细研究了以下LOCAL_MODULE_TAGS这个东西,发现这个东西是决定最终是否装载模块的标志,这个和TARGET_BUILD_VARIANT相关,如果TARGET_BUILD_VARIANT=userdebug 那么就会装载LOCAL_MODULE_TAGS的值也为user或者debug的那些模块,所以因为我的模块对应的值是optional,故而没有别最终装载。所以我把optional改为debug就好了。
刚才我又想,改为user应该也可以的吧,但是却得到了如下错误,这个错误让我学习了!
yasin@ubuntu:~/mywork/xxxxroid403-td9921-plus$ make -j4
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=4.0.3
TARGET_PRODUCT=xxxx
TARGET_BUILD_VARIANT=userdebug
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=IML74K
============================================
build/core/base_rules.mk:78: *** Module name: sensors.td9921
build/core/base_rules.mk:79: *** Makefile location: device/xxxx/common/libs/libsensors_xxxx
build/core/base_rules.mk:80: *
build/core/base_rules.mk:81: * Each module must use a LOCAL_MODULE_TAGS in its
build/core/base_rules.mk:82: * Android.mk. Possible tags declared by a module:
build/core/base_rules.mk:83: *
build/core/base_rules.mk:84: * optional, debug, eng, tests, samples
build/core/base_rules.mk:85: *
build/core/base_rules.mk:86: * If the module is expected to be in all builds
build/core/base_rules.mk:87: * of a product, then it should use the
build/core/base_rules.mk:88: * "optional" tag:
build/core/base_rules.mk:89: *
build/core/base_rules.mk:90: * Add "LOCAL_MODULE_TAGS := optional" in the
build/core/base_rules.mk:91: * Android.mk for the affected module, and add
build/core/base_rules.mk:92: * the LOCAL_MODULE value for that component
build/core/base_rules.mk:93: * into the PRODUCT_PACKAGES section of product
build/core/base_rules.mk:94: * makefile(s) where it's necessary, if
build/core/base_rules.mk:95: * appropriate.
build/core/base_rules.mk:96: *
build/core/base_rules.mk:97: * If the component should be in EVERY build of ALL
build/core/base_rules.mk:98: * products, then add its LOCAL_MODULE value to the
build/core/base_rules.mk:99: * PRODUCT_PACKAGES section of
build/core/base_rules.mk:100: * build/target/product/core.mk
build/core/base_rules.mk:101: *
build/core/base_rules.mk:102: *** user tag detected on new module - user tags are only supported on legacy modules. Stop.
yasin@ubuntu:~/mywork/xxxxroid403-td9921-plus$
yasin@ubuntu:~/mywork/xxxxroid403-td9921-plus$
所以我的正确的做法应该是module中的LOCAL_MODULE_TAGS依然应该是optional,而安装动作的要求应该放到类似core.mk当中,对于我的板子而言就是应该放到base.mk中。如下
PRODUCT_PACKAGES += \
sensors.$(TARGET_PLATFORM) \
这就可以了,现在唯一的问题就是我没有高明白为什么在对应module目录中的$(TARGET_PLATFORM)和base.mk中的这个$(TARGET_PLATFORM)的值不一样!
发现只要有Android.mk的目录都会被编译,编译出来的so放到out目录下的obj中,但是并不是所有的都会被复制到system/lib或者system/lib/hw中.
但是只要在module所在目录用mm编译,就发现一切正常,编译出来的so会出现在LOCAL_MODULE_PATH所制定的最终安装位置。但是整体编译就有不会出现在指定位置。
昨晚和王永请教后发现是LOCAL_MODULE_TAGS := optional的问题,他建议将optional换成debug。我今天早上试了以下,果然就好了。
所以我又仔细研究了以下LOCAL_MODULE_TAGS这个东西,发现这个东西是决定最终是否装载模块的标志,这个和TARGET_BUILD_VARIANT相关,如果TARGET_BUILD_VARIANT=userdebug 那么就会装载LOCAL_MODULE_TAGS的值也为user或者debug的那些模块,所以因为我的模块对应的值是optional,故而没有别最终装载。所以我把optional改为debug就好了。
刚才我又想,改为user应该也可以的吧,但是却得到了如下错误,这个错误让我学习了!
yasin@ubuntu:~/mywork/xxxxroid403-td9921-plus$ make -j4
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=4.0.3
TARGET_PRODUCT=xxxx
TARGET_BUILD_VARIANT=userdebug
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=IML74K
============================================
build/core/base_rules.mk:78: *** Module name: sensors.td9921
build/core/base_rules.mk:79: *** Makefile location: device/xxxx/common/libs/libsensors_xxxx
build/core/base_rules.mk:80: *
build/core/base_rules.mk:81: * Each module must use a LOCAL_MODULE_TAGS in its
build/core/base_rules.mk:82: * Android.mk. Possible tags declared by a module:
build/core/base_rules.mk:83: *
build/core/base_rules.mk:84: * optional, debug, eng, tests, samples
build/core/base_rules.mk:85: *
build/core/base_rules.mk:86: * If the module is expected to be in all builds
build/core/base_rules.mk:87: * of a product, then it should use the
build/core/base_rules.mk:88: * "optional" tag:
build/core/base_rules.mk:89: *
build/core/base_rules.mk:90: * Add "LOCAL_MODULE_TAGS := optional" in the
build/core/base_rules.mk:91: * Android.mk for the affected module, and add
build/core/base_rules.mk:92: * the LOCAL_MODULE value for that component
build/core/base_rules.mk:93: * into the PRODUCT_PACKAGES section of product
build/core/base_rules.mk:94: * makefile(s) where it's necessary, if
build/core/base_rules.mk:95: * appropriate.
build/core/base_rules.mk:96: *
build/core/base_rules.mk:97: * If the component should be in EVERY build of ALL
build/core/base_rules.mk:98: * products, then add its LOCAL_MODULE value to the
build/core/base_rules.mk:99: * PRODUCT_PACKAGES section of
build/core/base_rules.mk:100: * build/target/product/core.mk
build/core/base_rules.mk:101: *
build/core/base_rules.mk:102: *** user tag detected on new module - user tags are only supported on legacy modules. Stop.
yasin@ubuntu:~/mywork/xxxxroid403-td9921-plus$
yasin@ubuntu:~/mywork/xxxxroid403-td9921-plus$
所以我的正确的做法应该是module中的LOCAL_MODULE_TAGS依然应该是optional,而安装动作的要求应该放到类似core.mk当中,对于我的板子而言就是应该放到base.mk中。如下
PRODUCT_PACKAGES += \
sensors.$(TARGET_PLATFORM) \
这就可以了,现在唯一的问题就是我没有高明白为什么在对应module目录中的$(TARGET_PLATFORM)和base.mk中的这个$(TARGET_PLATFORM)的值不一样!