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

android底层开发android.mk语法规范

2017-06-01 09:55 381 查看
      Android.mk是Android提供的一种makefile文件,用来指定诸如编译可执行文件 、各平台的动态库so 、静态库so 、打成jar包、apk等。要掌握jni,就必须熟练掌握Android.mk的语法规范。

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))




   

   
      




   

               
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android.mk