初尝AndroidStudio2.2+cmake+ndk开发(1

作者: clam314 | 来源:发表于2017-03-15 14:09 被阅读308次

前期准备:
1、AndroidStudio版本 升级到2.2或者以上
2、下载ndk和cmake
可以在AS打开SDK manager里勾选NDK和CMake。另外建议也勾了LLDB,这是用于C++代码debug用的
另外ndk下载慢的话,也可以到这里 下载离线包,在新建完项目后手动配置过去

一、前期东西好后,可以开始新建项目(注意勾选Include C++ Support。这样AS会自动添加对C++的支持,否则在后面要手动改gradle脚本才能支持)。后面正常配置到finish就行。


要是前期准备下载ndk离线包的,可以在这里指定好ndk的路径


构建好的项目后,目录如下:



cpp目录跟以前的jni目录对应,用于存放C++的代码
CMakeLists.txt文件和以前的Android.mk和Application.mk对应,都是用于指定编译配置的

再看app级别的build.gradle:


新建好项目后,AS会自动生成了个JNI调用的例子


点击Make project或者直接运行app:



然后就会
1.Gradle调用外部的编译脚本CMakeLists.txt
2.CMake执行编译脚本CMakeLists.txt中的命令,将C++源文件(native-lib.cpp)编译成共享对象库(libnative-lib.so),Gradle再将这个so库打包到APK中。
生成的so库在如下目录里面



点击AS的菜单Build->Analyze apk,选择之前生成的akp,可以看见so包含在apk里面了

二、配置的大概就如上,开始编写自己的java调用native的方法



因为AS发现java方法没有C++实现,就报红,此时可以如下:



AS会自动在native-lib.cpp里面生成好方法的模板,自己在里面实现具体逻辑就行。然后在MainActivity里面调用就行。

插曲:修改后代码如下,这时候直接运行会报java.lang.UnsatisfiedLinkError: Native method not found错误。



注意系统自动生成方法的时候没有extern"C",需要自己加上,这里去掉注释就好。这是因为C和C++的符号表不相同造成的。jni是按照C的生成规则去找函数的, 所以在函数声明的时候要加上extern C使编译器把函数按照C的规则编译 这样才能被Java调用。

相关文章

  • 初尝AndroidStudio2.2+cmake+ndk开发(1

    前期准备:1、AndroidStudio版本 升级到2.2或者以上2、下载ndk和cmake可以在AS打开SDK ...

  • 初尝AndroidStudio2.2+cmake+ndk开发(3

    本例子简单的输出FFmpeg其配置信息等 怎么编译FFmpeg的so库,可以参考我之前的编译过程http://ww...

  • 初尝AndroidStudio2.2+cmake+ndk开发(2

    一、什么是CMake或许听过好几种 Make 工具,如 GNU Make ,qmake,MS nmake等。这些 ...

  • 初尝情滋味(1)

    “少女情怀总是诗 要说起我情窦初开的时候,还是高一,那个记忆里充满蝉噪和橘子味汽水的夏天。 因为住校,晚上总喜欢在...

  • 初尝

    高枕虽不虞,惊起皆空虚; 耳添丝竹乐,确乱三千丝。

  • 初尝

    继上次中午和二哥聊了很久之后,心里一直想的就是『不忘初心』,便重新尝试找回留学时的冲劲,更多的去接受新的东西。成也...

  • 初尝

    社会真的有那么残酷吗? 谈恋爱就是看脸和身材,前几天学姐说:“又有谁看你的舞姿不过就是看脸和身材”学姐很漂亮,说得...

  • 初尝

    每每看到别人记录的点点滴滴都有动笔写下自己的生活的念头,本身自己就是一个爱忘记生活过往的人,一年前的事情被家人朋友...

  • Flutter 初尝:搭建 Flutter 开发环境

    Flutter 初尝:搭建 Flutter 开发环境 《Flutter实战》Flutter中文网 获取 Flutt...

  • 毕业这年

    初尝爱情,初尝不易,初感兼迎

网友评论

    本文标题:初尝AndroidStudio2.2+cmake+ndk开发(1

    本文链接:https://www.haomeiwen.com/subject/uxrlnttx.html