【Android NDK 开发】Android Studio 的 NDK 配置 ( 源码编译配置 | 构建脚本配置 | 打包配置 | CMake 配置 | ndkBuild 配置 )(一)

简介: 【Android NDK 开发】Android Studio 的 NDK 配置 ( 源码编译配置 | 构建脚本配置 | 打包配置 | CMake 配置 | ndkBuild 配置 )(一)

文章目录

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"
        }
  ...
    }
  ...
}






目录
相关文章
|
2月前
|
编译器 Android开发
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
|
3月前
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
在Android应用开发中,追求卓越性能是不变的主题。本文介绍如何利用Android NDK(Native Development Kit)结合Java与C++进行混合编程,提升应用性能。从环境搭建到JNI接口设计,再到实战示例,全面展示NDK的优势与应用技巧,助你打造高性能应用。通过具体案例,如计算斐波那契数列,详细讲解Java与C++的协作流程,帮助开发者掌握NDK开发精髓,实现高效计算与硬件交互。
159 1
|
4月前
|
开发工具 Android开发
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
185 4
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
|
4月前
|
开发工具 Android开发
解决Android Studio编译提示NDK is missing a “platforms“ directory
解决Android Studio编译提示NDK is missing a “platforms“ directory
229 1
|
5月前
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
【7月更文挑战第28天】在 Android 开发中, NDK 让 Java 与 C++ 混合编程成为可能, 从而提升应用性能。**为何选 NDK?** C++ 在执行效率与内存管理上优于 Java, 特别适合高性能需求场景。**环境搭建** 需 Android Studio 和 NDK, 工具如 CMake。**JNI** 构建 Java-C++ 交互, 通过声明 `native` 方法并在 C++ 中实现。**实战** 示例: 使用 C++ 计算斐波那契数列以提高效率。**总结** 混合编程增强性能, 但增加复杂性, 使用前需谨慎评估。
148 4
|
6月前
|
Android开发
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
318 0
|
6月前
|
XML Java Android开发
Android Studio2.2 中支持NDK开发HelloJNI例子
Android Studio2.2 中支持NDK开发HelloJNI例子
35 0
|
测试技术 Android开发 开发者
Android官方开发文档Training系列课程中文版:Activity测试之测试环境配置
原文地址:http://android.xsoftlab.net/training/activity-testing/index.html 引言 开发者应当将测试作为应用开发周期的一部分。
944 0
|
7天前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
34 19
|
7天前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
31 14