您的位置:首页 > 编程语言 > C语言/C++

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

2016-05-31 12:47 218 查看
上次学到了约束布局,现在继续学习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的镜像,如果你觉得模拟器太慢了,也可以试一试。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息