1.编译所生成的目标文件格式android.mk如下。
- 分析一个最简单的Android.mk
LOCAL_PATH := $(call my-dir) //
定义了当前模块的相对路径
include $(CLEAR_VARS) //
清空当前环境变量
LOCAL_MODULE:= test //
编译生成的目标名称
LOCAL_SRC_FILES := test.c //
编译该模块需要的源文件
include $(BUILD_EXECUTABLE) //
编译所生成的目标文件格式
2.多源码文件编译动态库和静态库。
编译动态库:
编译类型修改为 BUILD_SHARED_LIBRARY
编译静态库:
编译类型修改为 BUILD_STATIC_LIBRARY
3.引用加载库方法。
项目中引用系统的库:
LOCAL_SHARED_LIBRARIES += libxxxx:
将系统库文件名添加到Android.mk中
引入第三方库文件:
LOCAL_LDFLAGS := -L/Path -lxxx
引入第三方头文件:
LOCAL_C_INCLUDES:= path
android.mk文件中指定头文件路径
4.jar包的加载和编译,编译apk。
(1)编译生成apk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := LocalPackage
include $(BUILD_PACKAGE)
BUILD_PACKAGE:编译生成apk
LOCAL_PACKAGE_NAME:编译生成apk名字
(2)编译生成jar包:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_MODULE := com.test.myjar
include $(BUILD_STATIC_JAVA_LIBRARY)
include $(BUILD_JAVA_LIBRARY)
include $(BUILD_STATIC_JAVA_LIBRARY):编译成静态jar包
include $(BUILD_JAVA_LIBRARY):编译生成共享jar包
jar包分类:
静态jar包:include $(BUILD_STATIC_JAVA_LIBRARY)
使用.class文件打包而成的JAR文件,可以在任何java虚拟机运行
动态jar包:include $(BUILD_JAVA_LIBRARY)
在静态jar包基础之上使用.dex打包而成的jar文件,.dex是android系统使用的文件格式。
(3)APK依赖于jar包:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_STATIC_JAVA_LIBRARIES := static-library
LOCAL_JAVA_LIBRARIES := share-library
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := LocalPackage
include $(BUILD_PACKAGE)
LOCAL_STATIC_JAVA_LIBRARIES:静态jar包
LOCAL_JAVA_LIBRARIES:动态jar包
(4)预编译jar包:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE := com.test.share
LOCAL_SRC_FILES := com.test.static
include $(BUILD_PREBUILT)
BUILD_PREBUILT:预编译
LOCAL_MODULE_CLASS:指定编译生成文件类型
预编译生成文件类型:
LOCAL_MODULE_CLASS:编译文件类型
JAVA_LIBRARIES:dex归档文件
APPS:APK文件
SHARED_LIBRARIES:动态库文件
EXECUTABLES:二进制文件
ETC:其他文件格式
(5)Android.mk添加判断语句:
ifeq($(VALUE), x)#ifneq
do_yes
else
do_no
endif
ifeq/ifneq:根据判断条件执行相关编译
5. Android.mk示例
- 编译静态库
- LOCAL_PATH := $(call my-dir)
- include $(CLEAR_VARS)
- LOCAL_MODULE = libhellos
- LOCAL_CFLAGS = $(L_CFLAGS)
- LOCAL_SRC_FILES = hellos.c
- LOCAL_C_INCLUDES = $(INCLUDES)
- LOCAL_SHARED_LIBRARIES := libcutils
- LOCAL_COPY_HEADERS_TO := libhellos
- LOCAL_COPY_HEADERS := hellos.h
- include $(BUILD_STATIC_LIBRARY)
- #编译动态库
- LOCAL_PATH := $(call my-dir)
- include $(CLEAR_VARS)
- LOCAL_MODULE = libhellod
- LOCAL_CFLAGS = $(L_CFLAGS)
- LOCAL_SRC_FILES = hellod.c
- LOCAL_C_INCLUDES = $(INCLUDES)
- LOCAL_SHARED_LIBRARIES := libcutils
- LOCAL_COPY_HEADERS_TO := libhellod
- LOCAL_COPY_HEADERS := hellod.h
- include $(BUILD_SHARED_LIBRARY)
- #使用静态库
- LOCAL_PATH := $(call my-dir)
- include $(CLEAR_VARS)
- LOCAL_MODULE := hellos
- LOCAL_STATIC_LIBRARIES := libhellos
- LOCAL_SHARED_LIBRARIES :=
- LOCAL_LDLIBS += -ldl
- LOCAL_CFLAGS := $(L_CFLAGS)
- LOCAL_SRC_FILES := mains.c
- LOCAL_C_INCLUDES := $(INCLUDES)
- include $(BUILD_EXECUTABLE)
- #使用动态库
- LOCAL_PATH := $(call my-dir)
- include $(CLEAR_VARS)
- LOCAL_MODULE := hellod
- LOCAL_MODULE_TAGS := debug
- LOCAL_SHARED_LIBRARIES := libc libcutils libhellod
- LOCAL_LDLIBS += -ldl
- LOCAL_CFLAGS := $(L_CFLAGS)
- LOCAL_SRC_FILES := maind.c
- LOCAL_C_INCLUDES := $(INCLUDES)
- include $(BUILD_EXECUTABLE)
- 加裁静态jar
-
- LOCAL_PATH:= $(call my-dir)
- include $(CLEAR_VARS)
- LOCAL_MODULE_TAGS := optional
- LOCAL_SRC_FILES := $(call all-java-files-under, src)
- LOCAL_STATIC_JAVA_LIBRARIES := libarity
- LOCAL_PACKAGE_NAME := NotificationLog
- LOCAL_CERTIFICATE := platform
- include $(BUILD_PACKAGE)
- include $(CLEAR_VARS)
- LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := libarity:jack
- include $(BUILD_MULTI_PREBUILT)
- include $(call all-makefiles-under,$(LOCAL_PATH))