Android 下 JNI 开发
3.C语言完整代码
#include "com_atguigu_checkpassword_MainActivity.h"
#include <stdio.h>
#include <stdlib.h>
/**
* 把一个jstring转换成一个c语言的char* 类型.
*/
char* _JString2CStr(JNIEnv* env, jstring jstr) {
char* rtn = NULL;
jclass clsstring = (*env)->FindClass(env, "java/lang/String");
jstring strencode = (*env)->NewStringUTF(env,"GB2312");
jmethodID mid = (*env)->GetMethodID(env, clsstring, "getBytes", "(Ljava/lang/String;)[B");
jbyteArray barr = (jbyteArray)(*env)->CallObjectMethod(env, jstr, mid, strencode); // String .getByte("GB2312");
jsize alen = (*env)->GetArrayLength(env, barr);
jbyte* ba = (*env)->GetByteArrayElements(env, barr, JNI_FALSE);
if(alen > 0) {
rtn = (char*)malloc(alen+1); //"\0"
memcpy(rtn, ba, alen);
rtn[alen]=0;
}
(*env)->ReleaseByteArrayElements(env, barr, ba,0);
return rtn;
}
/**
* 校验密码是否正确,正确返回200,错误返回400
*/
int login(char* password){
//校验密码
//原始密码,服务器的密码
char* originPassword = "123";
//比较密码
int isSame = strcmp(password,originPassword);
if(isSame ==0)
{
return 200;
}
return 400;
}
JNIEXPORT jint JNICALL Java_com_atguigu_checkpassword_MainActivity_login
(JNIEnv *env, jobject obj, jstring jPassword){
//jstring转换成char*
char* cStr = _JString2CStr(env,jPassword);
//登录
return login(cStr);
}
12_C语言回调java方法-50
C调用java空方法
public void helloFromJava(){
}
C调用java中的带两个int参数的方法
public int add(int x,int y) {
}
C调用java中参数为string的方法
public void printString(String s){
}
1.创建工程:CallbackJavaMethod
2.创建Java代码JNI.java
package com.atguigu.callbackjavamethod;
public class JNI {
{
System.loadLibrary("CallbackJavaMethod");
}
// C调用java中的带两个int参数的方法
public int add(int x, int y) {
return x + y;
}
// C调用java中参数为string的方法
public void printString(String s) {
System.out.println("java中输入的:" + s);
}
// C调用java空方法
public void helloFromJava() {
System.out.println("helloFromJava()");
}
/**
* 调用C语言代码,C代码回调helloFromJava方法
*/
public native void callbackHelloFromJava();
/**
* 调用C语言代码,C代码回调add方法
*/
public native void callbackAdd();
/**
* 调用C语言代码,C代码回调printString方法
*/
public native void callbackPrintString();
}
本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源,欢迎大家关注尚硅谷公众号(atguigu)了解更多。