android studio Cmake编译jni

2018-08-09  本文已影响0人  老崔_aed3

        在androidstudio2.2以前,对jni的编译只有一种就是ndkbuild. 这是一个很痛苦的过程,写native方法,jnih生成c文件等等。而起编写c/C++代码是没有代码提示的!!!!,在2.2之后官方出现了一种新的编译方式cmake,而且是官方推荐的,最重要的是有代码提示,而且方便易懂!

阅读前最好先阅读下官方的文档

https://developer.android.google.cn/studio/projects/add-native-code#link-gradle

准备工作环境配置

下载这两个选项和ndk(ndk在底下没显示出来)并安装

Cmake是编译用的

LLdb是调试用的

一:新建一个支持c/c++的工程


2.2后在这个界面多了这么一个选项

在2.2后这个界面多了这么一个选项,勾选上他。点击完成,新建完项目就可以运行了

CmakeLists.txt内容解析,如果想生成多个库,可以多写几个add_library()

这个cmake是规定源文件位置和库名称库配置的一些信息可是,androidstudio怎么找到这个CmakeLists.txt文件的呢?是在gradle中配置的

它的位置是在app目录下你通过它指定了CmakeLists.txt的位置再通过这个文件找到源代码的位置和配置

你可能说没看见so文件啊,其实它已经打进包里了,你将apk包解压下就可以看见lib文件夹下有.so文件,在这个文件夹下也可以看见

二:导入之前的jni项目

1.先测试一个只含有一个类的简单例子

在main下新建cpp文件夹,然后新建demo.cpp文件

在app文件夹下新建CmakeLists.txt文件内容如下

cmake_minimum_required(VERSION 3.4.1)

add_library(

demo-lib

SHARED

src/main/jni/demo.cpp

)

现在是已经把原文件的位置和配置搞定了,然后需要项目关联CmakeLists.txt文件有两种方式

一种ui方式一种终极方式

ui方式:选择android视图在app右键选择LinkC++projectwithgrade

在project path选择CmakeLists.txt的路径

新建测试类

新写个native方法,此时会报红!,

使用快捷方式可以自动生成方法代码厉害不厉害

有时候会自动生成demo-lib.c文件,可以把里面的方法复制到demo.cpp中,楼主也不知道为啥会出现这种情况,然后把jni文件夹删掉

主意!!:需要加入extern"C"在代码之下,否则回报找不到native方法的错误

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

然后就可以测试了

public class MainActivityextends AppCompatActivity {

@Override

    protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Cmake cmake=new Cmake();

Toast.makeText(MainActivity.this,cmake.stringFromJNI(),Toast.LENGTH_LONG).show();

}

}

2.含有多个文件的例子

新建文件夹a a a,并加入新源码test.h和test.cpp

这两个文件封装了一个加法方法;

CmakeList 更改为

源码native-lib.cpp改为

在mainactivity中调用

上一篇下一篇

猜你喜欢

热点阅读