android
android studio
Jni
java调用C
步骤
- 新建项目
SampleJni
, 创建AppSecret
类 - 创建
jni
目录,命令行生成AppSecret
jni头文件,并拷贝到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
#endif
hello_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: 运行效果