当一个JNI中包括多个模块时,比如播放器中常用的解码器就是常见的情况。可能播放器中包括ape解码器,wav解码器和flac解码器等。
那Android.mk该如何编写呢?
请看目录结构图:
其中Android.mk为主文件,其内容为:
include $(call all-subdir-makefiles)
#CODECS := wav wv mpc alac ape flac
#codec-makefiles = $(patsubst %,$(call my-dir)/%/Android.mk,$(CODECS))
#include $(call codec-makefiles)
ifneq ($(NDK_ROOT),)
LOCAL_PATH:=$(NDK_ROOT)/apps/musicdecode/project/jni
else
LOCAL_PATH:=apps/musicdecode/project/jni
endif
#LOCAL_PATH := $(call my-dir)
# common codecs & startup library
include $(CLEAR_VARS)
LOCAL_MODULE := musicdecode
LOCAL_STATIC_LIBRARIES := wav wv mpc alac ape flac
LOCAL_CFLAGS += -O2 -Wall -DBUILD_STANDALONE -DCPU_ARM -DAVSREMOTE -finline-functions -fPIC -D__ARM_EABI__=1 -DOLD_LOGDH
LOCAL_SRC_FILES := main.c
LOCAL_ARM_MODE := arm
LOCAL_LDLIBS := -llog -ldl
include $(BUILD_SHARED_LIBRARY)
这样编译的就是一个可以在libs中生成libmusiccode.so的动态库文件,其中它又需要调用各个子模块中生成的静态库文件
LOCAL_STATIC_LIBRARIES := wav wv mpc alac ape flac
,例如wav库的内容结构图如下:
其中这个子目录的Android.mk如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := wav
LOCAL_SRC_FILES += main.c
LOCAL_CFLAGS += -O2 -Wall -DBUILD_STANDALONE -DCPU_ARM -finline-functions -fPIC
#-DDBG_TIME
LOCAL_ARM_MODE := arm
include $(BUILD_STATIC_LIBRARY)
可以很清楚简单的看出,它生成的是一个静态库文件wav.a供主Android.mk文件编译时调用,主Android.mk文件还有句
include $(call all-subdir-makefiles)
这个例子就结束了,其他模块类似!