项目开发中,为安全起见,约定前后端都需要对数据进行加解密处理。客户端的网络请求加解密逻辑使用C语言实现,也就是c语言编译成so文件供android端调用。所以涉及到了jni开发,这里记录一下实现过程。
1、定义本地native方法(也就是需要c语言实现的方法)
import com.fleet2345.encrypt;
public class SecJob {
private static final String TAG = "SecJob";
static {
System.loadLibrary("sec-fleet");//加载so
}
/**
* 加密函数
*/
public native static byte[] encrypt2345(Context context, byte[] input);
/**
* 解密函数
*/
public native static byte[] decrypt2345(Context context, byte[] input);
}
2、在main下新建jni folder,如下图
3、使用javah命令生成对应的头文件
4、将生成的头文件剪切到jni目录下
头文件中是本地方法在c语言中的声明
JNIEXPORT jbyteArray JNICALL Java_com_fleet2345_encrypt_SecJob_encrypt2345
(JNIEnv *, jclass, jobject, jbyteArray);
JNIEXPORT jbyteArray JNICALL Java_com_fleet2345_encrypt_SecJob_decrypt2345
(JNIEnv *, jclass, jobject, jbyteArray);
5、再编写一个.c文件,用于实现头文件声明的方法
com_fleet2345_encrypt_SecJob.c
完成自己的实现逻辑即可。
6、编写Android.mk
7、编写Application.mk
8、使用ndk-build编译,生成so
9、在项目中使用so
static {
System.loadLibrary("sec-fleet");//加载so
}
接下来,就可以在android中调用定义的本地方法了。