博客
关于我
Android中CMake的使用之一初步总结
阅读量:308 次
发布时间: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++代码和上层的代码有一些脱节,下面这个是重新生成了一个控制类来实现的,但不影响说明效果)

 
你可能感兴趣的文章
2.2.6 强制类型转换
查看>>
计算机网络教程 谢希仁 第三章 数据链路层
查看>>
Redis缓存数据的处理流程
查看>>
Linux:文件句柄泄漏问题
查看>>
Linux:多线程简介
查看>>
ACM-ICPC寒假算法训练1:搜索 HDOJ P1010 : Tempter of the Bone 奇偶剪枝分析
查看>>
【java】316. 去除重复字母----学会栈的使用
查看>>
【java】227. 基本计算器 II---思路简单,代码清晰!!!
查看>>
【java】115. 不同的子序列----学会动态规划,时间复杂度O(n^2)!!!
查看>>
【java】368. 最大整除子集---使用动态规划,快速解决子问题!!!
查看>>
莫比乌斯函数
查看>>
第十一届十月份蓝桥杯省赛 H - 子串分值和:求字符串所有子串的不同字符个数和(思维/线段树)
查看>>
HDU - 6514 Monitor(二维差分+二维前缀和)
查看>>
LINUX延时函数使用
查看>>
数据结构第七章(图---总结一)
查看>>
2020-12-24
查看>>
JDBC——(6)PreparedStatement的使用
查看>>
JDBC——(6)PreparedStatement的使用——实现查询操作
查看>>
JDBC——小知识:PreparedStatement 和Statement的比较
查看>>
JDBC——(6)PreparedStatement的使用——图解查询操作流程
查看>>