本文目录

  一Androidstudio中需要的插件

  二项目配置

    ①build.gardle配置

    ②CMakeLists.txt

    ③Android和Cpp的代码

    ④so文件生成

    ⑤so文件的位置

一、Android studio中需要的插件:

  CMake

  LLDB

  NDK

二、项目配置

  

  ①build.gardle的配置

  多了两个externalNativeBuild :defaultConfig下的、和defaultConfig 并行下的externalNativeBuild

  a、defaultConfig下的externalNativeBuild

 defaultConfig {
...
externalNativeBuild {
cmake {
cppFlags ""
//cppFlags "-fexceptions -frtti" ,在AndroidStudio新建项目->选择C++版本时,勾选•Exceptions Support和•Runtime Type Information Support时会有,
}
}

    注:

    Exceptions Support:支持C++异常处理

    Runtime Type Information Support:支持运行时类型识别, 程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型

  b、和defaultConfig 并行下的externalNativeBuild ,用于指定CMakeLists.txt的路径

externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}

  ②CMake的构建脚本

# 设置Cmake最小版本
cmake_minimum_required(VERSION 3.4.1) # 编译library
add_library( # 设置library名称
native-lib # 设置library模式,SHARED模式会编译so文件,STATIC模式不会编译
SHARED # 设置原生代码路径
src/main/cpp/native-lib.cpp ) # 定位library
find_library( # library名称
log-lib # 将library路径存储为一个变量,可以在其他地方用这个变量引用NDK库
# 在这里设置变量名称
log )
# 关联library
target_link_libraries( # 关联的library
native-lib # 关联native-lib和log-lib
${log-lib} )

  ③Cpp代码和Android代码调用

   Cpp代码:

#include <jni.h>
#include <string> extern "C"
JNIEXPORT jstring JNICALL
Java_com_yl_ndkdemo_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}

  Android代码:

public class MainActivity extends AppCompatActivity {

     // 加载native-lib,不加lib前缀
static {
System.loadLibrary("native-lib");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); // 将获取的字符串显示在TextView上
TextView tv = (TextView) findViewById(R.id.sample_text);
tv.setText(stringFromJNI());
}
/**
* native-lib中的原生方法
*/
public native String stringFromJNI();
}

  ④so文件的生成

  在CMakeLists.txt中将library的编译模式设置为SHARED模式,点击AS的编译按钮,在app > build > intermediates > cmake > debug > obj目录下会生成不同CPU架构对应的so文件

  不同架构的指定:

defaultConfig {
...
ndk {
abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86", "x86_64", "mips", "mips64"
}
}

  ⑤so文件的位置

   在项目的app > src > main目录下创建jniLibs文件夹,将生成的so文件(带着CPU架构目录)拷贝到jniLibs文件夹中

参考:https://blog.csdn.net/kong_gu_you_lan/article/details/79091789

Android NDK(二) CMake构建工具进行NDK开发的更多相关文章

  1. Android NDK(一) ndk-build构建工具进行NDK开发

    本文目录 一.androidstudio环境 二.快捷键配置 三.新建项目 四.NDK开发 五.so文件编译 一. androidstudio的环境 在SDK Tools中安装NDK开发环境(File ...

  2. Android NDK开发 Android Studio使用新的Gradle构建工具配置NDK环境(一)

    本文主要讲述了如何如何在Android Studio使用新的Gradle构建工具配置NDK环境,现在把相关的步骤整理出来分享给Android程序员兄弟们,希望给他们在配置NDK环境时带来帮助. 从An ...

  3. JS模块化开发(二)——构建工具grunt

    gruntJs——构建工具:代码压缩.文件合并 安装流程: 1.到nodeJs官网下载安装nodeJs(附带了npm包管理工具) 2.cmd命令行:npm install -g grunt-cli / ...

  4. Erlang:[笔记二,构建工具rebar之发布应用]

    概述 通过rebar可以发布rebar构建的erlang项目,生成可执行的二进制脚本文件,大大降低了执行应用的复杂度.该笔记Erlang环境为Erlang/OTP 19 ,以下适用于Eralng/OT ...

  5. Android hybrid App项目构建和部分基本开发问题

    1.首先是选型:Cordova+Ionic Framework,调试测试环境是Ripple Emulator.开发环境其实可以随便选,我个人选择了Eclipse,当然Android SDK+ADT也是 ...

  6. Android构建工具--AAPT2源码解析(一)

    一.什么是AAPT2 在Android开发过程中,我们通过Gradle命令,启动一个构建任务,最终会生成构建产物"APK"文件.常规APK的构建流程如下: (引用自Google官方 ...

  7. 构建工具Gradle

    1.Summary   从Android团队开始宣布放弃Eclipse转投Android Studio时,构建工具Gradle进入了Android开发者的视野.而随着热修复.插件化.编译时注解的流行, ...

  8. android studio使用CMake和NDK,实现应用自身被卸载时打开某一网址

    实现应用自身被卸载时打开某一网址的c代码 MyActivity: public class MyActivity extends Activity { /** * Called when the ac ...

  9. Android NDK 简单介绍、工具安装、环境配置

    NDK全称:Native Development Kit. 1.NDK是一系列工具的集合. * NDK提供了一系列的工具,帮助开发人员高速开发C(或C++)的动态库,并能自己主动将so和java应用一 ...

随机推荐

  1. yzoj P2349 取数 题解

    题意 1到n个自然数中选k个自然数要求两两不相邻,问有多少种方法,模m eg(1 3 5 ) 又是一道打表规律题,正常解法dp可以通过前缀和优化到O(N* K).另外我们可以重新定义F[I,J]表示从 ...

  2. Kafka中的ISR、AR又代表什么?ISR的伸缩又指什么?

    相信大家已经对 kafka 的基本概念已经有一定的了解了,下面直接来分析一下 ISR 和 AR 的概念. ISR and AR 简单来说,分区中的所有副本统称为 AR (Assigned Replic ...

  3. Educational Codeforces Round 68 Editorial

    题目链接:http://codeforces.com/contest/1194                                            A.Remove a Progre ...

  4. ASP.NET CORE Docker发布记录

    1.安装Docker yum install curl -y curl -fsSL https://get.docker.com/ | sh 2.编写Dockerfile文件 FROM microso ...

  5. 【UEFI】---BIOS中UserPassword的重复校验总结

    UEFI作为目前较为流行的一套X86架构初始化的标准框架,已受到业界内的广泛认可.而其中很多编程所采用的思想确实值得学习.今天总结下UEFI的框架下修改代码的一点小经验,仅供菜鸟参考. 先列干货,具体 ...

  6. 手写RPC框架指北另送贴心注释代码一套

    Angular8正式发布了,Java13再过几个月也要发布了,技术迭代这么快,框架的复杂度越来越大,但是原理是基本不变的.所以沉下心看清代码本质很重要,这次给大家带来的是手写RPC框架. 完整代码以及 ...

  7. [大数据学习研究] 3. hadoop分布式环境搭建

    1. Java安装与环境配置 Hadoop是基于Java的,所以首先需要安装配置好java环境.从官网下载JDK,我用的是1.8版本. 在Mac下可以在终端下使用scp命令远程拷贝到虚拟机linux中 ...

  8. java架构之路-(源码)mybatis执行流程源码解析

    这次我们来说说Mybatis的源码,这里只说执行的流程,内部细节太多了,这里只能授之以渔了.还是最近的那段代码,我们来回顾一下. package mybatis; import mybatis.bea ...

  9. fremark遍历出的li怎么加事件(cforeach循环遍历也同样适用)

    遇见这个问题烦了好久好久,网上也没找到答案,琢磨了半天终于找到了方法 1.下面是一个分页信息遍历添加事件,页面跳转 <!-- 分页条信息 --> <div class="c ...

  10. 摩托罗拉GP68对讲机官方说明书下载,包含使用说明压音表和电路结构等

    摩托罗拉GP68对讲机官方说明书,包含使用说明和电路结构等 1.使用说明书 链接: https://pan.baidu.com/s/1fhXXaBp-MSuQs9Sv3v_Crg 提取码: mc3e ...