美文网首页
android studio Cmake编译jni

android studio Cmake编译jni

作者: 老崔_aed3 | 来源:发表于2018-08-09 14:08 被阅读0次

            在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中调用

    相关文章

      网友评论

          本文标题:android studio Cmake编译jni

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