1.在Android.mk中指定路径的头文件,不在当前目录的话已经是系统文件,需要使用尖括号。
2.JNI函数名称有一定规则,但是可以使用RegisterNatives自定义JNI方法。
3.想要利用源码编译hal层的代码,需要把文件夹放在alps/hardware目录下,并且编写Android.mk文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_PRELINK_MODULE := false
LOCAL_MODULE_RELATIVE_PATH := $(TARGET_OUT_SHERED_LIBRARIES)/hw
LOCAL_SHARED_LIBRARIES := liblog
LOCAL_SRC_FILES := leds_hal.c
LOCAL_MODULE := led_hal.defaule
LOCAL_MODULE_TAGS := eng
include $(BUILD_SHARED_LIBRARY)
然后在这个文件夹中使用mm命令,可以看到最终生成的文件会存放在out。。。system/lib/hw/目录下
4.想要利用源码编译service层的代码,需要把文件夹放在alps/framework/base/services目录下,并且编写Android.mk文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_PRELINK_MODULE := false
LOCAL_MODULE_RELATIVE_PATH := $(TARGET_OUT_SHERED_LIBRARIES)/hw
LOCAL_SRC_FILES := LedHalService.cpp
LOCAL_MODULE := led_hal_jni
LOCAL_MODULE_TAGS := eng
LOCAL_SHARED_LIBRARIES := \
libandroid_runtime \
libcutils \
libhardware \
libhardware_legacy \
libsystem_server \
libutils \
libui \
libsurfaceflinger_client \
LOCAL_C_INCLUDES += \
$(JNI_H_INCLUDE) \
hardware/leds_hal
include $(BUILD_SHARED_LIBRARY)
5.定义宏的时候尤其是有多行代码时,最好使用do{ } while(0)包裹,避免替换时出错