博客
关于我
Android中CMake的使用之一初步总结
阅读量:307 次
发布时间:2019-03-04

本文共 1519 字,大约阅读时间需要 5 分钟。

Android中CMake的使用之一初步总结 
在Android studio2.2版本以,推出了新的不同于NDK编译链式的对Native本地C++/C开发的支持。这里进行一下初步的总结,后面会不断的进行完善,以更好的利用这个新的开发手段。
在早期的Android studio或者Eclipse开发Native的C++开发中,有两个比较难于实现的方面,一个是C++接口函数API的定义问题,主要包括相关的数据类型的对应和导出名称的修改,一般可以javah来动态生成或者后来使用JNI_OnLoad的方式来实现。第二个就是实际中经常遇到的非常实用的问题,如何在安卓层面上调试相关的C++代码。网上有好多的方法,但是相关的局限性和复杂度让人望而却步。
曾经将这个东西做为专门的讲座来向全公司进行普及学习,相关的开发人员都认为这个很有用,但使用起来还是不方便。以个人对IDE开发工具的发展历史来看,AS集成对本地C++代码的调试应该会很快。然后,在今天的查找相关资料时,突然发现了一些资料,这些资料有新有旧,从中看到了一些端倪,经过一上午的测试,跑通过了一个测试例程。这样就可以顺利的实现在AS上开发C++代码并调试的相关工作。不需要复杂的配置和下载相关的工具,幸福突然就降临了。
闲言少叙,回归正题。

打开AS,创建一个工程,在工程,在新工程创建的界面,有下面对C++的支持,勾选 上:

 
然后下一步下一步,根据你自己的情况定制就可以了,它和普通的Android程序没区别,但是最后会有一个下面的界面:
 
如果你打算支持C++的异常和-frtti就勾选上。如果编译器想支持C++11,就在下拉框中选中C++11就好了。
这样一个自带本地开发的例程就自动全部建立好了。当然,如果你没有指定NDK的路径或者没有自动下载NDK,就会报一个错误,找不到NDK的路径,这时候,打开SDK的设置,在NDK里指定相关的路径即可,或者在下载里增加NDK的下载(这里是指定的)。
AS会自动生成一个native-lib.cpp:
extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_fjf_javacpp11_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject /* this */) {
    std::string value = PrintValue(10);
    std::string hello = "Hello from C++";
    hello += value;
    return env->NewStringUTF(hello.c_str());
}
在相应的Java层上:
    // Example of a call to a native method
    TextView tv = (TextView) findViewById(R.id.sample_text);
    tv.setText(stringFromJNI());
    public native String stringFromJNI();
    // Used to load the 'native-lib' library on application startup.
    static {
        System.loadLibrary("test-lib");
        System.loadLibrary("native-lib");
}

下一个断点,然后调试发现可以音频从android层进入C++和函数里:(这里的C++代码和上层的代码有一些脱节,下面这个是重新生成了一个控制类来实现的,但不影响说明效果)

 
你可能感兴趣的文章
入手评测 联想小新Pro14和Air14Plus哪个好?区别对比
查看>>
macOS Big Sur系统中如何开启设置触控板三指拖拽功能?
查看>>
修复苹果Mac中的快速视频播放错误的方法
查看>>
苹果HomePod智能音箱怎么使用广播功能?
查看>>
Mac系统投屏到电视机的方法
查看>>
【Docker&ARM】ARM架构服务器上docker的安装
查看>>
php--自定义错误处理函数的使用方法
查看>>
php--异常处理主动抛出异常的使用方法
查看>>
php--class static
查看>>
php--匿名函数的使用
查看>>
php--json_decode
查看>>
php--class的工厂模式的示例
查看>>
php教程--案例20(用户登录)
查看>>
jQuery练习t76
查看>>
jQuery练习t78
查看>>
jQuery练习t80
查看>>
jQuery练习t81
查看>>
jQuery中使用animate方法替代其他动画方法
查看>>
jQuery练习t85
查看>>
jQuery练习t86
查看>>