Android中CMake的使用之一初步总结

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++代码和上层的代码有一些脱节,下面这个是重新生成了一个控制类来实现的,但不影响说明效果)


 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值