中国企业网站,西安手机网站建设动力无限,国内展厅设计公司排名,wordpress跳转链接404一、Android项目中使用ndk-build工具编译库文件 之前介绍过CMake编译工具的使用#xff0c;今天介绍一种ndk自带的编译工具ndk-build的使用。
ndk-build目前主要有两种配置使用方式#xff1a; 如上图所示#xff0c;第一种方式是Android.mkApplication.mkgradle的方式生成… 一、Android项目中使用ndk-build工具编译库文件 之前介绍过CMake编译工具的使用今天介绍一种ndk自带的编译工具ndk-build的使用。
ndk-build目前主要有两种配置使用方式 如上图所示第一种方式是Android.mkApplication.mkgradle的方式生成库文件第二种方式是Android.mkApplication.mk命令行的方式生成库文件接下来就是介绍这两种方式的使用。
1、ndk-build配置构建1Android.mkApplication.mkgradle
Android.mk用于向ndk-build编译工具描述源文件和库的信息如要生成什么类型的库动态、静态库的名称以及生成库使用了哪些C/C源码文件或者使用了哪些第三方库文件等等。
Application.mk工程级别的作用是指定ndk-build的项目范围设置如C/C标准库的支持Android平台版本设置cpu指令集对应的abi设置等等。
Android.mk是ndk-build编译必配的一个文件Application.mk是可选配的如编译的目标库未使用C/C标准库也不需要指定cpu指令集对应的abi如果未配置Application.mk会走默认的这些配置。Application可选配的另一个原因是里面的配置可以放到gradle中配置。 1. LOCAL_PATH表示源文件所在的位置call my-dir是表示会调用ndk-build提供的宏函数my-dir这个方法会返回Android.mk文件本身所在的目录路径。
2.include $(CLEAR_VARS) 用于清理部分LOCAL开头的变量但不会清理上面的LOCAL_PATH。
3.LOCAL_MODULE表示配置库的名称。
4.LOCAL_SRC_FILES表示配置的源文件生成库需要哪些源文件或者第三方库。
5.include $(BUILD_SHARED_LIBRARY) 表示指定编译目标库类型静态动态 1.APP_STL 表示配置C标准库支持
2.APP_ABI 表示配置abi过滤
3.APP_PLATFORM 表示指定Android平台版本
2、新建项目使用ndk-build编译源代码
不同于CMake的项目我们重新新建了一个项目
haha.cpp native源文件
C源码文件和CMake那边差不多
Android.mk Application.mk: build.gradle 配置好这些文件之后我们make一下项目在build目录下就生成了库文件 Android中使用上面生成的库文件 运行 3、ndk-build配置构建2Android.mkApplication.mk命令终端
这种方式就是比较方便不依赖于AS这种ide工具可以在文件夹下便可以编译出库文件。
这种方式需要将上面放在cpp文件夹下的文件换到jni文件下目前不知道啥原因。 另外我把gradle中的之前的配置都删了 开始使用终端命令进行编译今入到这个jni的目录中输入ndk-build回车就行。 生成的库文件在自动放在了jni同级文件夹下的libs文件夹中另外多了个obj文件夹不用管。
这时候去运行项目会出现崩溃错误是找不到libhaha.so
Android中使用上面生成的库文件android项目中要使用库文件要将库文件放到Android默认的系统jni目录:jniLibs因此我们将上面的libs改成jniLibs重新运行正常 如果就是想使用上面生成的libs文件夹也是可以的就需要在gradle中配置一下
这种方式就是将来编译的时候去找jniLibs就会自动去src/main/libs下面找我们的库文件打包进apk里面。 二、配置库文件的输出路径 上面的ndk-build编译过程我们都没指定我们想要输出的路径都是使用默认的目录要么在build下要么在libs目录下这里我们配置文件的输出目录。
在Android.mk下配置如下 ../jniLibs是香炉路径相对的是Android.mk的位置。../是代表的Android.mk的上一级目录即在mk文件的上一级同级的目录下创建jniLibs目录。 使用ndk-build命令就可以看到生成了jniLibs目录。这样jniLibs就是编译apk的时候默认寻找的目录。
如果是这个目录我们的build.gradle中就不需要指定这个