关闭

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

标签: androidc语言android studiocmake
14571人阅读 评论(11) 收藏 举报
分类:

上次学到了约束布局,现在继续学习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的镜像,如果你觉得模拟器太慢了,也可以试一试。。。

0
12

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:37055次
    • 积分:765
    • 等级:
    • 排名:千里之外
    • 原创:42篇
    • 转载:0篇
    • 译文:4篇
    • 评论:13条
    最新评论