android android studio Jni java调用C
步骤
- 新建项目
SampleJni, 创建AppSecret类 - 创建
jni目录,命令行生成AppSecretjni头文件,并拷贝到jni目录 - 新建
AppSecret头文件的,实现文件 - 配置项目
build.gradle, 添加ndk配置
具体步骤
第一步:
新建项目 SampleJni
创建 AppSecret
代码如下:
/**
* 获取秘钥
*
* Created by wangj on 15/5/16.
*/
public class AppSecret {
public static AppSecret instance = new AppSecret();
public static synchronized AppSecret getInstance() {
return instance;
}
public native String getAppKey();
static {
System.loadLibrary("appSecretKey");
}
}第二步:
创建 jni 目录, 选择主项目 右键,依次选中 JNI Folderr
点击 JNI Folder打开下面的
默认即可,不需要勾选Change Folder Location,如果勾选,后面需做一些gradle配置。这里我们就先不选,默认即可。
点击 Finish, 将会在main下生成 jni 目录
下面我们要通过命令行生成 AppSecret 头文件,在此先build一下项目,在主项目 build 文件夹下
在控制台 Terminal中通过 cd 命令找到 intermediates->classes ->debug 目录下执行:
javah -jni com.wangj.samplejni.AppSecret
将生成的头文件 剪切拷贝到 jni 目录下
步骤三:
创建 hello_jni 实现头文件方法
com_wangj_samplejni_AppSecret.h 代码
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_wangj_samplejni_AppSecret */
#ifndef _Included_com_wangj_samplejni_AppSecret
#define _Included_com_wangj_samplejni_AppSecret
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_wangj_samplejni_AppSecret
* Method: getAppKey
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_wangj_samplejni_AppSecret_getAppKey
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endifhello_jni.c 代码, hello_jni.c 名字是任意取的,重要的是里面的方法实现
#include "com_wangj_samplejni_AppSecret.h"
JNIEXPORT jstring JNICALL Java_com_wangj_samplejni_AppSecret_getAppKey
(JNIEnv *env, jobject obj) {
return (*env) ->NewStringUTF(env, "哈哈 我是从Jni中获取的秘钥");
}第四步:
配置项目,加入ndk配置
打开主项目 build.gradle
代码
...
defaultConfig {
applicationId "com.wangj.samplejni"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
ndk{
moduleName 'appSecretKey'
... // 可选
}
}
...
注意: moduleName要与AppSecret类中
System.loadLibrary("moduleName");
对应上
End: 运行效果