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通过jni调用C++代码

[安卓开发笔记二]android Studio通过jni调用C++代码 自己需要用到android studio开发安卓项目,为了效率需要用jni来调用C++底层代码,网上关于这方面的资源十分匮乏...

Android NDK学习笔记6-JNI对引用数据类型的操作

字符串操作    JNI把Java字符串当成引用类型来处理,JNI提供了java字符串与C字符串之间相互转换的必要函数。因为java字符串对象是不可变的,因此JNI不提供任何修改现有的java字符串内...

Application.mk & Android.mk

Android NDK开发指南---Application.mk文件 http://www.iteye.com/topic/1113483 Application.mk文件 简介...

Application.mk语法解释

Application.mk是用来描述你的应用程序需要哪些模块,以及这些模块所要具有的一些特性。而相对的Android.mk是用来描述要编译某个具体的模块,所需要的一些资源,包括要编译的源码、要链接的...

Android NDK学习笔记5-JNI数据类型总结

Java中有两种数据类型,分别是基本数据类型和引用类型。JNI基本数据类型java的基本数据类型可以直接与C/C++的响应基本数据类型映射:这些基本数据类型可以在Native层直接使用。JNI引用类型...

Android NDK学习笔记9-JNI调用Java方法

与域一样,java中有两类方法:实例方法和静态方法。JNI提供访问两类方法的函数,例如:public class JavaClass { // 实例方法 private String instance...

Android NDK学习笔记8-JNI的访问域

java有两类域:实例域和静态域。类的每个实例都有自己的实例域副本,而一个类的所有实例共享同一个静态域。 JNI提供了访问两类域的函数,例如:public class JavaClass { // ...

Android NDK学习笔记4-Android.mk篇

前段时间读了《Pro Android C++ with the NDK》这本书,书中对于Android.mk的讲解非常细致,这里我把该章节的读书笔记记录下来,方便大家学习。        Andro...

如何使用Android系统自带的VPN服务框架

Android从4.0开始(API LEVEL 15),自己带了一个帮助在设备上建立VPN连接的解决方案,且不需要root权限,本文将对其做一个简单的介绍。 一、基本原理 在介绍如何使用这些新增的AP...

Android NDK学习笔记7-JNI的NIO操作

JNI提供了在原生代码中使用NIO(I/O)的函数,与数组操作相比更适合原生代码和java应用程序之间传送大量数据。 ● 创建直接字节缓冲区 原生代码可以创建java应用程序使用的直接字节缓冲...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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