android studio 2.2 C++ 支持(CMAKE方法)

原创 2016年05月31日 12:47:25

上次学到了约束布局,现在继续学习android studio 2.2使用CMAKE编译C++,并支持在C++打断点,写C++代码时也支持打断点。学习的时候是使用了国外的一篇博客的代码:http://bhirawa87.my.id/blog/android-studio-cmake/
首先还是简单介绍一下Cmake.Cmake是一个构建工具,在不同的平台上是不同的构建工具 如:GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp,等等。CMake是为了达到一次编写MAKEFile,则可以在不同的平台上编译的目的编写的一款构建工具。我现在也不是太懂,以后学习一下,并写个CMake自学教程来。这里有个网站http://hahack.com/codes/cmake/,可以参考学习。
切入正题。首先建立一个空工程,然后添加NDK目录(没有添加的话,在下面添加CMakeLists.txt的路径的时候回报错),添加的方法是右键打开模块设置,然后填写NDK的路径,如下图:
这里写图片描述
接下来是连接到C++工程(翻译过来的,不知道是不是这样叫),右键模块的名字,然后点击“Link C++ Project with Gradle”,在这里会要求填写CMakeList.txt的路径,你把文件的路径填写进去就可以了。
好了,该写代码了:
1 首先是在main下面建立cpp文件夹,然后编写编译文件CMakeLists.txt的编写:
cmake_minimum_required(VERSION 2.8.7)
add_library(hello-jni SHARED hello-jni.c)
target_link_libraries(hello-jni log android)
NOTE:android studio 2.2自带的CMake的版本是3.4的
2 编写hello-jni.c的代码:

#include <string.h>
#include <jni.h>

jstring
Java_com_example_jaimeyang_nativecmaketest_MainActivity_stringFromJNI( JNIEnv* env,
                                                  jobject thiz )
{
#if defined(__arm__)
    #if defined(__ARM_ARCH_7A__)
    #if defined(__ARM_NEON__)
      #if defined(__ARM_PCS_VFP)
        #define ABI "armeabi-v7a/NEON (hard-float)"
      #else
        #define ABI "armeabi-v7a/NEON"
      #endif
    #else
      #if defined(__ARM_PCS_VFP)
        #define ABI "armeabi-v7a (hard-float)"
      #else
        #define ABI "armeabi-v7a"
      #endif
    #endif
  #else
   #define ABI "armeabi"
  #endif
#elif defined(__i386__)
    #define ABI "x86"
#elif defined(__x86_64__)
    #define ABI "x86_64"
#elif defined(__mips64)  /* mips64el-* toolchain defines __mips__ too */
    #define ABI "mips64"
#elif defined(__mips__)
    #define ABI "mips"
#elif defined(__aarch64__)
#define ABI "arm64-v8a"
#else
    #define ABI "unknown"
#endif

    return (*env)->NewStringUTF(env, "Hello from JNI !  Compiled with ABI " ABI ".");
}

3 此时在调试的时候你会发现在选择调试目标那里出现了红叉,然后运行的时候,提示”package id lldb not found:2.2”类似的提示,打开SDK管理器更新把lldb更新到2.2的版本,在C++代码中打个断点,此时发现可以进入断点,OK,大功告成。。。。
忘记说一个了,在android studio2.2中模拟器的速度快了很多,估计是因为使用了因特尔HAXM的驱动,并且使用了X86的镜像,如果你觉得模拟器太慢了,也可以试一试。。。

android studio 使用CMAKE

原文地址 前言 之前,每次需要边写C++代码的时候,我的内心都是拒绝的。  1. 它没有代码提示!!!这意味着我们必须自己手动敲出所有的代码,对于一个新手来说,要一个字母都不错且大小...
  • qq_25817651
  • qq_25817651
  • 2016年11月11日 23:50
  • 4760

Android开发学习之路--Android Studio cmake编译ffmpeg

最新的android studio2.2引入了cmake可以很好地实现ndk的编写。这里使用最新的方式,对于以前的android下的ndk编译什么的可以参考之前的文章:Android开发学习之路–ND...
  • eastmoon502136
  • eastmoon502136
  • 2016年10月20日 22:33
  • 12863

android studio 下的cmake使用

一种java调用c++的方式是使用javah生成.class文件,ndk-build生成.so文件(ubuntu操作系统下),会生成一个动态库。另一种方式是用cmake下的CMakeLists.txt...
  • hhh901119
  • hhh901119
  • 2017年01月17日 16:10
  • 1184

Android中CMake的使用之三调用第三方库

Android中CMake的使用之三调用第三方库 在开发过的过程中,难免会调用第三方的库,比如说ffmp啊,opencv等等啊,这就会出现这样一个问题,如何使用这种第三方的SO呢(.a)?这里需要...
  • fpcc
  • fpcc
  • 2017年04月10日 09:45
  • 3466

在 Android Studio 2.2 中愉快地使用 C/C++

转载请注明出处:http://blog.csdn.net/wl9739/article/details/52607010 注:官网上面的技术文章也在不断地汉化中,只是进度有点慢。在我翻译本篇文章的...
  • wl9739
  • wl9739
  • 2016年09月21日 13:47
  • 31560

AndroidStudio2.2开发NDK的正确姿势

AndroidStudio2.2开发NDK,拜拜android.mk,你好CMake!!!
  • dagaozi
  • dagaozi
  • 2016年10月11日 09:32
  • 11882

android studio 2.2 使用cmake编译NDK

android studio 2.2 已经进入beta版本,新功能添加众多,NDK编程也得到了简化。官方博客介绍。本文介绍如何使用新版android studio调用 c++代码,为了超级通俗易懂,例...
  • lmw21848
  • lmw21848
  • 2016年08月11日 17:51
  • 12339

AndroidStudio2.2 Preview3中NDK开发之CMake和传统 JNI在目录结构和配置文件上的区别

AndroidStudio2.2 CMake 和传统 JNI 两种开发NDK的方法相关知识
  • u012527560
  • u012527560
  • 2016年06月24日 13:36
  • 7927

Android Studio 2.3使用CMake方式NDK入门

参考官网:https://developer.android.com/studio/projects/add-native-code.html#new-project 使用CMake需要搭配使用an...
  • aidesudi
  • aidesudi
  • 2017年04月01日 18:34
  • 4221

Android Studio Cmake配置项

Cmake的配置 Android Studio 2.2以上支持了Cmake的配置JNI的相关参数,简化了通过Android.mk配置。并很好的继承了C++的编辑方式。以下是对应的引入第三方so和第三...
  • qq_35100676
  • qq_35100676
  • 2017年04月06日 11:22
  • 2996
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android studio 2.2 C++ 支持(CMAKE方法)
举报原因:
原因补充:

(最多只允许输入30个字)