DongTaiZhuCe.java
package top.ichenhao.dongtaizhucedemo;
public class DongTaiZhuCe {
static {
System.loadLibrary("native-lib");
}
public native String dongtai_zhuce_java(String p1);
public native String jingtai_zhuce_java(String p1);
}native-lib.cpp
#include <jni.h>
#include <string>
#include <stdlib.h>
#include <android/log.h>
#define LOG_TAG "Native"
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
#define JNI_REG_CLASS "top/ichenhao/dongtaizhucedemo/DongTaiZhuCe" // path of Java file
// 静态注册 top.ichenhao.dongtaizhucedemo.DongTaiZhuCe.jingtai_zhuce_java
extern "C" JNIEXPORT jstring JNICALL Java_top_ichenhao_dongtaizhucedemo_DongTaiZhuCe_jingtai_1zhuce_1java(JNIEnv *env, jobject thiz, jstring jstr) {
const char *hello = "静态注册";
const char *chello = env->GetStringUTFChars(jstr, NULL);
char * str3 = (char *) malloc(1 + strlen(hello)+ strlen(chello) );
strcpy(str3, hello);
strcat(str3, chello);
return env->NewStringUTF(str3);
}
// 动态注册 top.ichenhao.dongtaizhucedemo.DongTaiZhuCe.dongtai_zhuce_java
static jstring dongtai_zhuce(JNIEnv *env, jobject thiz, jstring jstr) {
const char *hello = "动态注册";
const char *chello = env->GetStringUTFChars(jstr, NULL);
char * str3 = (char *) malloc(1 + strlen(hello)+ strlen(chello) );
strcpy(str3, hello);
strcat(str3, chello);
return env->NewStringUTF(str3);
}
static JNINativeMethod g_methods[] = {
{ "dongtai_zhuce_java", "(Ljava/lang/String;)Ljava/lang/String;", (void*)dongtai_zhuce},
};
// must define this function
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm,void *reserved) {
JNIEnv *env;
LOGE("JNI_OnLoad=======================");
if (vm->GetEnv((void **) &env,JNI_VERSION_1_6) != JNI_OK) {
return JNI_ERR;
}
jclass javaClass = env->FindClass(JNI_REG_CLASS);
if (javaClass == NULL){
return JNI_ERR;
}
int method_count = sizeof(g_methods) / sizeof(g_methods[0]);
if (env->RegisterNatives(javaClass, g_methods, method_count) < 0) {
return JNI_ERR;
}
return JNI_VERSION_1_6;
}