您的位置:首页 > 移动开发 > Android开发

自己添加的android模块不编译的问题

2016-03-14 16:46 507 查看
1、android 5.0

including ./hardware/invensense/Android.mk ...

TARGET_2ND_ARCH--yes

build/core/shared_library.mk:12: sensors.mt: LOCAL_MODULE_PATH for shared libraries is unsupported in multiarch builds, use LOCAL_MODULE_RELATIVE_PATH instead

build/core/base_rules.mk:550: 警告:覆盖关于目标“out/target/product//system/lib/hw/sensors.mt.so”的命令

build/core/base_rules.mk:550: 警告:忽略关于目标“out/target/product//system/lib/hw/sensors.mt.so”的旧命令

build/core/dynamic_binary.mk:84: 警告:覆盖关于目标“out/target/product//symbols/system/lib/hw/sensors.mt.so”的命令

build/core/dynamic_binary.mk:84: 警告:忽略关于目标“out/target/product//symbols/system/lib/hw/sensors.mt.so”的旧命令

2、自定义模块需要添加编译指定PRODUCT_PACKAG环境变量

我们在开发中,经常会碰到需要自己添加独立模块的时候,笔者以前也没太关心这个问题,以为写好Android.mk就可以了,其实还不是这么回事。

把自定义的模块放在android顶层目录development下面,比如模块名字是libcsiJni,模块的Android.mk如下:

[plain] view
plaincopy

ifeq ($(TARGET_PRODUCT),crane_EW1021H_C)

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional eng

#LOCAL_MODULE_TAGS := eng

LOCAL_SRC_FILES := csilib.cpp

LOCAL_C_INCLUDES:= \

$(TOP)/device/softwinner/common/hardware/include \

$(TOP)/frameworks/base/include \

device/softwinner/crane-common/hardware/libcsidecoder

LOCAL_SHARED_LIBRARIES:= libutils libbinder libui liblog libcutils libcsidecoder

ifeq ($(DLOPEN_LIBSECCAMERA),1)

LOCAL_SHARED_LIBRARIES+= libdl

endif

LOCAL_PRELINK_MODULE := false

LOCAL_MODULE:= libcsiJni

include $(BUILD_SHARED_LIBRARY)

endif

在使用eng模式下编译,能够正常编译出来。但是在user模式下不编译,手动进入该目录,执行mm可以正常编译。Eng跟user版本的差异我们一般也知道,但是使用的optional,按道理说是所有模式下都可以编译的。什么原因呢?

从现象上看,应该是编译路径没有添加进去。搜索了一下资料,自定义的模块需要添加编译指定,PRODUCT_PACKAG环境变量。可以在device下面具体产品目录下的crane_productXXX.mk中或者build/target/product/core.mk中添加,示例如下:

[plain] view
plaincopy

PRODUCT_PACKAGES += \

libcsiecoder \

libcsiJni \

CSIIN

本身这种问题就是很初级的问题,没什么技术含量,就当做个笔记吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: