NDK编译脚本

本文介绍了如何通过NDK在Android中进行编译,包括新建jni文件夹,编写Android.mk和Application.mk文件,以及执行ndk-build命令。Android.mk文件中的关键配置如LOCAL_MODULE用于定义模块名,LOCAL_SRC_FILES指定源文件,而BUILD_EXECUTABLE用于生成可执行文件。
摘要由CSDN通过智能技术生成

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

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

 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_PACKAGEapk文件

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包

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值