文章目录
I . 源码编译配置
II . 构建脚本配置
III . NDK 函数库打包配置
IV . Java 与 C 代码示例
V . CMake 配置 ( CMakeLists.txt )
VI . ndkBuild 配置 ( Android.mk )
VII . 博客相关资源下载
I . 源码编译配置
1 . 源码编译配置 :
① 配置位置 : Module 级别的 build.gradle 中进行配置 ;
② 主要作用 : 主要作用是配置本工程中的 C/C++ 源码如何编译成动态库的 ;
③ 常用配置 : 一般配置将源码编译成哪几个 CPU 的指令集 ;
目前只支持 armeabi-v7a , arm64-v8a , x86 , x86-64 四种 CPU 指令集架构 ;
2 . 配置层级 : 在 android 下 defaultConfig 中配置的 externalNativeBuild 是配置 AS 中的 C/C++ 源码编译内容的 ;
注意区分配置 : externalNativeBuild 有两种类型的配置 , 一种在 defaultConfig 内部 , 一种在 defaultConfig 外部 ;
① defaultConfig 内部的 externalNativeBuild : 配置的是配置 AS 工程的 C/C++ 源文件编译参数
② defaultConfig 外部的 externalNativeBuild : 配置的是 CMakeList.txt 或 Android.mk 构建脚本的路径
2 . 配置脚本示例 ( 省略无关内容 ) :
apply plugin: 'com.android.application' android { ... defaultConfig { ... /* 关于 CPU 指令集 NDK 17 以上只支持 armeabi-v7a, arm64-v8a, x86, x86-64 四种 CPU 架构 */ // 配置 AS 工程中的 C/C++ 源文件的编译 // defaultConfig 内部的 externalNativeBuild 配置的是配置 AS 工程的 C/C++ 源文件编译参数 // defaultConfig 外部的 externalNativeBuild 配置的是 CMakeList.txt 或 Android.mk 构建脚本的路径 externalNativeBuild { cmake { cppFlags "" //配置编译 C/C++ 源文件为哪几个 CPU 指令集的函数库 (arm , x86 等) abiFilters "armeabi-v7a" , "arm64-v8a", "x86", "x86_64" } } ... } ... }
II . 构建脚本配置
1 . 构建脚本配置 :
① 配置位置 : Module 级别的 build.gradle 中进行配置 ;
② 主要作用 : 主要作用是配置本工程中的 C/C++ 源码的构建脚本 ;
③ 常用配置 : 配置 cmake 或 ndkBuild 两种编译脚本中的一种 ( 只能二选一 ) ;
2 . cmake 配置 : 配置使用 CMake 编译 C/C++ 时的构建脚本 CMakeList.txt 路径 ;
① cmake 简介 : 使用 CMake 进行构建 , 构建脚本是 CMakeList.txt , 是 Android Studio 中新引入的 NDK 本地代码构建方式 ;
② 路径设置 : 路径的起点就是 build.gradle 文件所在的目录 , 即 app 目录 ;
② 配置示例 :
externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" version "3.10.2" }
3 . ndkBuild 配置 : 配置使用 ndkBuild 编译 C/C++ 时的构建脚本 Android.mk 路径 ;
① ndkBuild 简介 : 使用 ndkBuild 进行构建 , 构建脚本是 Android.mk , 是从 Eclipse + ADT 环境遗留下来的配置 NDK 编译方案 , 逐步被 CMake 替代 ;
② 路径设置 : 路径的起点就是 build.gradle 文件所在的目录 , 即 app 目录 ;
② 配置示例 :
externalNativeBuild { ndkBuild{ path "src/main/cpp/Android.mk" }
3 . 配置层级 : 在 android 与 defaultConfig 平级的 externalNativeBuild 是配置 AS 中的 C/C++ 源码编译构建脚本的 ;
注意区分配置 : externalNativeBuild 有两种类型的配置 , 一种在 defaultConfig 内部 , 一种在 defaultConfig 外部与之平级的配置 ;
① defaultConfig 内部的 externalNativeBuild : 配置的是配置 AS 工程的 C/C++ 源文件编译参数
② defaultConfig 外部的 externalNativeBuild : 配置的是 CMakeList.txt 或 Android.mk 构建脚本的路径
4 . 配置脚本示例 ( 省略无关内容 ) :
apply plugin: 'com.android.application' android { ... defaultConfig { ... } // 配置 NDK 的编译脚本路径 // 编译脚本有两种 ① CMakeList.txt ② Android.mk // defaultConfig 内部的 externalNativeBuild 配置的是配置 AS 工程的 C/C++ 源文件编译参数 // defaultConfig 外部的 externalNativeBuild 配置的是 CMakeList.txt 或 Android.mk 构建脚本的路径 externalNativeBuild { // 配置 CMake 构建脚本 CMakeLists.txt 脚本路径 // 使用该配置时 , 将 ndkBuild 配置注释掉 cmake { path "src/main/cpp/CMakeLists.txt" version "3.10.2" } // 配置 Android.mk 构建脚本路径 // 使用该配置时 , 将 cmake 配置注释掉 /*ndkBuild{ path "src/main/cpp/Android.mk" }*/ } ... } ...
III . NDK 函数库打包配置
1 . 构建脚本配置 :
① 配置位置 : Module 级别的 build.gradle 中进行配置 ;
② 主要作用 : 主要作用是配置 APK 打包动态库的相关参数 ; 如在工程中编译的函数库 , 其提供了 arm, x86, mips 等指令集的动态库 , 那么为了控制打包后的应用大小, 可以选择性打包一些库 , 此处就是进行该配置 ;
③ 常用配置 : 配置 cmake 或 ndkBuild 两种编译脚本中的一种 ( 只能二选一 ) ;
2 . 配置脚本示例 ( 省略无关内容 ) :
apply plugin: 'com.android.application' android { ... defaultConfig { ... /* 关于 CPU 指令集 NDK 17 以上只支持 armeabi-v7a, arm64-v8a, x86, x86-64 四种 CPU 架构 */ //配置 APK 打包 哪些动态库 // 示例 : 如在工程中编译的函数库 , 其提供了 arm, x86, mips 等指令集的动态库 // 那么为了控制打包后的应用大小, 可以选择性打包一些库 , 此处就是进行该配置 ndk{ // 打包生成的 APK 文件指挥包含 ARM 指令集的动态库 abiFilters "armeabi-v7a" , "arm64-v8a", "x86", "x86_64" } ... } ... }