0
点赞
收藏
分享

微信扫一扫

CMake 进行 NDK 开发之初体验,> Error occurred while communicating with CMake server


  Error occurred while communicating with CMake server


CMake 进行 NDK 开发之初体验,> Error occurred while communicating with CMake server_Android


www.jianshu.com/p/716641d15…

2.1 安装组件

在新建项目之前,我们需要通过​​SDK Manager​​安装一些必要的组件:

  • ​NDK​
  • ​CMake​
  • ​LLDB​

CMake 进行 NDK 开发之初体验,> Error occurred while communicating with CMake server_Android_02


2.2 创建工程

在安装完必要的组件之后,我们创建一个全新的工程,这里需要记得勾选​​include C++ Support​​选项:

CMake 进行 NDK 开发之初体验,> Error occurred while communicating with CMake server_c++_03

​编辑

接下来一路​​Next​​,在最后一步我们会看见如下的几个选项,它们的含义为:

  • ​C++ Standard​​​:选择​​C++​​​的标准,​​Toolchain Default​​​表示使用默认的​​CMake​​配置,这里我们选择默认。
  • ​Excptions Support​​​:如果您希望启用对​​C++​​​异常处理的支持,请选中此复选框。如果启用此复选框,​​Android Studio​​​会将​​-fexceptions​​​标志添加到模块级​​build.gradle​​​文件的​​cppFlags​​​中,​​Gradle​​​会将其传递到​​CMake​​。
  • ​Runtime Type information Support​​​:如果您希望支持​​RTTI​​​,请选中此复选框。如果启用此复选框,​​Android Studio​​​会将​​-frtti​​​标志添加到模块级​​build.gradle​​​文件的​​cppFlags​​​中,​​Gradle​​​会将其传递到​​CMake​​。

CMake 进行 NDK 开发之初体验,> Error occurred while communicating with CMake server_Android_04

​编辑

在新建工程完毕之后,我们得到的工程的结构如下图所示:

CMake 进行 NDK 开发之初体验,> Error occurred while communicating with CMake server_android_05

​编辑

与传统的工程相比,它有如下几点区别:

(1) cpp 文件夹

用于存放​​C/C++​​​的源文件,在磁盘上对应于​​app/src/main/cpp​​​文件夹,当新建工程时,它会生成一个​​native-lib.cpp​​的事例文件,其内容如下:

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

extern "C"
JNIEXPORT jstring JNICALL
Java_com_demo_lizejun_cmakenewdemo_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
std::string hello = "Hello from C++";
return


(2) 增加 CMakeList.txt 脚本

构建脚本,在磁盘上对应于​​app/​​​目录下的​​txt​​​文件,其内容为如下图所示,这里面涉及到的​​CMake​​​语法包括下面四种,关于​​CMake​​​的语法,可以查看 官方的 API 说明

  • ​cmake_minimum_required​
  • ​add_library​
  • ​find_library​
  • ​target_link_libraries​

(3) build.gradle 脚本

与传统的项目相比,该模块所对应的​​build.gradle​​​需要在里面指定​​CMakeList.txt​​​所在的路径,也就是下面​​externalNativeBuild​​对应的选项。

apply plugin: 'com.android.application'

android {
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
applicationId "com.demo.lizejun.cmakenewdemo"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags ""
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.3.1'
testCompile 'junit:junit:4.12'
compile 'com.android.support.constraint:constraint-layout:1.0.2'


(4) 打印字符串

在​​MainActivity​​中,我们加载原生库,并调用原生库中的方法获取了一个字符串展示在界面上:

public class MainActivity extends AppCompatActivity{

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Example of a call to a native method
TextView tv = (TextView) findViewById(R.id.sample_text);
tv.setText(stringFromJNI());
}

/**
* A native method that is implemented by the 'native-lib' native library,
* which is packaged with this application.
*/
public native String stringFromJNI();

// Used to load the 'native-lib' library on application startup.
static {
System.loadLibrary("native-lib");
}
}


(5) 运行结果

最后,我们运行一下这个工程,会得到下面的结果:

CMake 进行 NDK 开发之初体验,> Error occurred while communicating with CMake server_复选框_06


通过​​APK Analyzer​​​工具,我们可以看到在​​APK​​​当中,增加了​​libnative-lib.so​​文件:

CMake 进行 NDK 开发之初体验,> Error occurred while communicating with CMake server_android_07



举报

相关推荐

0 条评论