本文目录:
1.说明
2. 构建共享库
3. 构建静态库
4. 使用共享库共享通用模块
5. 在多个NDK项目中共享模块
说明:
Android.mk 是一个向Android NDK构建系统描述NDK项目的GUN Makefile片段.
构建共享库代码:
##################
#以'#'开头的是注释行
##################
#根据Android构建系统的要求,Android.mk文档必须以LOCAL_PATH
#开头.
##################
LOCAL_PATH := $(call my-dir)
##################
#清楚除了LOCAL_PATH以外的LOCAL_<name>变量,例如LOCAL_MODULE
#与LOCAL_SRC_FILES等.
##################
include $(CLEAR_VARS)
##################
#模块 1
#设置模块名称,会生成一个共享库文件且命名为libhello-jni.so
##################
LOCAL_MODULE := hello-jni
##################
#建立组装模块的源文件列表,多个源文件名使用空格分开.
##################
LOCAL_SRC_FILES := hello-jni.c
##################
#构建共享库必须
##################
include $(BUILD_SHARED_LIBRARY)
##################
#可构建多个共享库
#模块 2
##################
include $(CLEAR_VARS)
LOCAL_MODULE := module2
LOCAL_SRC_FILES := module2.c
include $(BUILD_SHARED_LIBRARY)
##################
#如上处理完后,Android NDK构建系统会产生libhello-jni.so和
#libmodule2.so两个共享库
##################
构建静态库代码:
实际Android应用程序不直接使用静态库,并且应用程序包中也不包含静态库.静态库用来构建共享库.
LOCAL_PATH := $(call my-dir)
##################
# 第三方AVI库
##################
include $(CLEAR_VARS)
LOCAL_MODULE := avilib
LOCAL_SRC_FILES := avilib.c platform_posix.c
include $(BUILD_STATIC_LIBRARY)
##################
# 原生模块
##################
include $(CLEAR_VARS)
LOCAL_MODULE := module
LOCAL_SRC_FILES := module.c
LOCAL_STATIC_LIBRARYS := avilib
include $(BUILD_SHARED_LIBRARY)
######################################################
# 共享库通过 LOCAL_STATIC_LIBRARYS := <静态库名>来连接
# 静态库.
######################################################
用共享库共享通用模块:
LOCAL_PATH := $(call my-dir)
##################
# 第三方AVI库
##################
include $(CLEAR_VARS)
LOCAL_MODULE := avilib
LOCAL_SRC_FILES := avilib.c platform_posix.c
include $(BUILD_SHARED_LIBRARY)
##################
# 原生模块 1
##################
include $(CLEAR_VARS)
LOCAL_MODULE := module1
LOCAL_SRC_FILES := module1.c
##################
# 添加第三方共享库
##################
LOCAL_SHARED_LIBRARIES := avilib
include $(BUILD_SHARED_LIBRARY)
##################
# 原生模块 2
##################
include $(CLEAR_VARS)
LOCAL_MODULE := module2
LOCAL_SRC_FILES := module2.c
LOCAL_SHARED_LIBRARIES := avilib
include $(BUILD_SHARED_LIBRARY)
在多个NDK项目间共享模块:
作为共享模块,avilib需要自己的Android.mk文件.
LOCAL_PATH := $(call my-dir) LOCAL_MODULE := avilib LOCAL_SRC_FILES := avilib.c platform_posix.c include $(BUILD_SHARED_LIBRARY)使用共享模块的NKD项目
假设avilib的目录为:C:\android\shared-modules\transcode\avilib.LOCAL_PATH := $(call my-dir) LOCAL_MODULE := module LOCAL_SRC_FILES := module.c LOCAL_SHARED_LIBRARIES := avilib include $(BUILD_SHARED_LIBRARY) $(call import-module, transcode/avilib)注意:
import-module函数宏需要先定位共享模块,然后再将它导入到NDK项目中, 默认情况下, import-module函数只搜索< Android NDK>/sources目录.