NDK编译脚本

一、如何通过NDK进行编译。

1、新建jni文件夹,并将Android.mk、Applicatio n.mk、源文件都放入其中。

NDK编译脚本_第1张图片

 2、编写Android.mk文件。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= test
LOCAL_C_ALL_FILES := test.c
LOCAL_SRC_FILES := $(LOCAL_C_ALL_FILES)
LOCAL_MODULE_PATH := $(LOCAL_PATH)/bin
LOCAL_CFLAGS += -pie -fPIE
LOCAL_LDFLAGS += -pie -fPIE
include $(BUILD_EXECUTABLE)

3、编写Application.mk文件。

APP_ABI := armeabi-v7a

 4、执行ndk-build命令生成bin文件。

二、Android.mk基本语法

1、Android.mk基本语法格式示例:

配置环境变量:定义当前模块的相对路径。这个变量被用来寻找C/C++源文件。在该例中,my-dir 是一个由编译系统提供的宏函数,用于返回Android.mk所在目录的路径。

LOCAL_PATH := $(call my-dir)

CLEAR_VARS是编译系统预定义的一个变量,它指向一个特殊的Makefile,这个Makefile负责清除 LOCAL_xxx 的变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES 等)但不会清除 LOCAL_PATH。之所以需要清理这些变量是因为所有的编译控制文件是在一趟make执行过程中完成的,而所有的变量都是全局的,会对其他Android.mk文件产生影响。

include $(CLEAR_VARS)

LOCAL_MODULE 用来给每个模块定义一个名字,不同模块的名字不能相同,不能有空格。这里的名字会传给NDK编译系统,然后加上lib前缀和.so后缀 (例如,变成libhello-jni.so)。注意,如果你在LOCAL_MODULE定义中自己加上了lib前缀,则ndk在处理的时候就不会再加上lib前缀了(为了兼容Android系统的一些源码)。

LOCAL_MODULE := test

编译该模块所需的源文件:使用连接符“\”连接多个源文件

LOCAL_SRC_FILES := test.c

编译所生成的目标文件的格式(类型):

include $(BUILD_EXECUTABLE)

2、编译生成的目标文件类型:

BUILD_EXECUTABLE 二进制可执行文件
BUILD_SHARED_LIBRARY 动态库.so文件
BUILD_STATIC_LIBRARY 静态库.a文件,静态库不会被拷贝到你的安装包中去,它往往用来编译其他动态库。
BUILD_STATIC_JAVA_LIBRARY 静态Jar包,使用.class文件打包而成的JAR文件,可以在任何java虚拟机运行
BUILD_JAVA_LIBRARY 动态Jar包,在静态jar包基础上使用.dex打包而成的Jar文件,.dex是Android系统使用的文件格式
BUILD_PACKAGE apk文件

3、Android.mk中引用资源:

LOCAL_STATIC_LIBRARIES+=libxxx 引用系统静态库
LOCAL_SHARED_LIBRARIES += libxxx 引用系统动态库
 LOCAL_LDFLAGS := -L/PATH -lxxx

引用第三方库文件

引入第三方动态库:

LOCAL_LDFLAGS := -L ./lib/ -ltest3 或

LOCAL_LDFLAGS := -L$(LOCAL_PATH)/lib/ -ltest3

引入第三方静态库:

LOCAL_LDFLAGS := $(LOCAL_PATH)/lib/libtest2.a

 LOCAL_C_INCLUDES := path 引入第三方头文件
LOCAL_STATIC_JAVA_LIBRARIES := libarity android-support-v4 guava 引入共享Jar包

 

你可能感兴趣的:(android,android,studio,ide)