Android Studio jni 编写(看完不会你打我)

JNI简述

JNI 全称 Java Native Interface , 它提供了若干的API 实现了Java和其他语言的通信(主要是C/C++])

废话不多说直接上图
本文做一个简单的计算

1.新建一个普通的Android项目

2.新建jni类

Android Studio jni 编写(看完不会你打我)_第1张图片
1487385997(1).jpg

和普通的类没有什么区别,定以native方法。

3.生成h.头文件(这个头文件主要是规范.c文件的编写)

首先build代码,生成Testjni.class
Android Studio 生成的.class 看图

Android Studio jni 编写(看完不会你打我)_第2张图片
Paste_Image.png

利用javah 生成.h的头文件

Android Studio jni 编写(看完不会你打我)_第3张图片
1487386794(1).jpg

利用A S的命令控制器 cd到Debug文件夹
然后根据javah生成头文件
(一定要cd到 有com文件夹 然后在javah 要不会类找不到,EC 要早src下面执行javah)

4.利用头文件编写JNI

Android Studio jni 编写(看完不会你打我)_第4张图片
1487387196(1).jpg

我们需要的只有画红线的部分
然后编写.c文件

拷贝画红线的部分
然后新建文件夹jni(建议将生成的头文件拷贝到jni目录,方便管理)
创建.c文件

Android Studio jni 编写(看完不会你打我)_第5张图片
1487387583(1).jpg

直接将头文件里面的方法拷贝过来 ,注意(生成的头文件只有参数类型,并没有参数名,前两个都是固定的写法)

5.利用.c文件生成本地代码库

1.编写Android.mk(.mk文件都是固定的写法)

LOCAL_PATH := $(call my-dir)         #指定当前路径
include $(CLEAR_VARS)                #清除全局配置

LOCAL_MODULE := calc                 #生成so库  libcalc.so
LOCAL_SRC_FILES := calc.c            #要生成so库的源码

include $(BUILD_SHARED_LIBRARY)      #编译成共享库

LOCAL_SRC_FILES 一定要和.c文件的名字相同

利用ndk-build 生成so库

Android Studio jni 编写(看完不会你打我)_第6张图片
Paste_Image.png

Application.mk 是让这so支持各种架构的cpu的

CD到jni 目录
ndk-build 会生成so库了,生成的so库会在libs下面

6.添加部署

    ndk{  //自动编译 相当于Android.mk 和 Application.mk
            moduleName "calc"         //生成的so名字 
            abiFilters "armeabi", "armeabi-v7a", "x86"  //输出指定三种abi体系结构下的so库。目前可有可无。
        }
        sourceSets {
            main {
                //jni库的调用会到资源文件夹下libs里面找so文件
                jniLibs.srcDirs = ['libs']   //指定so库路径
            }
      }
Android Studio jni 编写(看完不会你打我)_第7张图片
1487388836(1).jpg
Android Studio jni 编写(看完不会你打我)_第8张图片
Paste_Image.png

添加NDK路径,这个应该放在最前面

7.加载so库

Android Studio jni 编写(看完不会你打我)_第9张图片
1487389071(1).jpg
Android Studio jni 编写(看完不会你打我)_第10张图片
Paste_Image.png

在MainActivity里面进行调用

到此一个java调用C计算的加法就完成了。

(本文只是简单的编写,没有给具体分析JNI的编写规范等,自己可以找资料)..

学会了吗?

你可能感兴趣的:(Android Studio jni 编写(看完不会你打我))