ndk开发,JNI

NDk的用处:1,核心代码保护,写入由于apk的Java层代码很容易被反编译,而C/C++库反汇难度较大。

NDK开发常用于-驱动开发、无线热点共享、数学运算、实时渲染的游戏、音视频处理、文件压缩、人脸识别、图片处理等。 

JNI  java native interface


1、 NDK是一系列工具的集合。

NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者帮助时巨大的。


2、NDK提供了一份稳定、功能有限的API头文件声明。这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、log库(liblog)。



1,首先是so文件的生产

      创建Native方法

public class NdkJniUtils {

    static {
        System.loadLibrary("native-lib");
    }

    //获取C中隐藏的AppKey
    public native String getStringFromNative(); //native方法

}
 2,build->make project生产class文件

3,使用android studio自带的Terminal进入cd app/src/main    然后执行javah -d jni -classpath {sdk位置}\platforms\android-22\android.jar;..\..\build\intermediates\classes\debug {类的package.类名}   示例如下:

javah -d jni -classpath D:\android_studio_new\sdk\platforms\android-22\android.jar;..\..\build\intermediates\classes\debug com.xcm91.relation.ndkapp.NdkJniUtils

在ndk会自动生成一个.h文件

4,创建.c文件引用.h文件

#include "com_xcm91_relation_ndkapp_NdkJniUtils.h"

JNIEXPORT jstring JNICALL Java_com_xcm91_relation_ndkapp_NdkJniUtils_getStringFromNative(JNIEnv *env, jclass obj)

{

    char buf[] = "HEllO JNI";

    return (*env)->NewStringUTF(env,buf);

}
5,build->rebuile project

   在app\build\intermediates\ndk\debug\lib\中生产so文件

6,  System.loadLibrary("hello"),把so库加载进来(可以调用native本地方法了)




细节

local.properties 设置ndk.dir
目录gradle.properties 添加一行 android.useDeprecatedNdk=true
在当前Module下的build.gradle 文件下的defaultConfig节添加
ndk {
    moduleName "hello"
    abiFilter "x86"
    abiFilter "armeabi"
}
检查so文件是否生成







发布了77 篇原创文章 · 获赞 3 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/haiyang497661292/article/details/78395417