Android Jni 개발 의 상호작용 처리
문자열 처리
자바 클래스 에서 native 인 터 페 이 스 를 설명 합 니 다.
//
public static native void modifyFile(String path);
jni 에서. cpp 파일 에 해당 하 는 c + + 를 추가 합 니 다.JNIEXPORT void JNICALL Java_com_vince_jnidemo_MainActivity_modifyFile
(JNIEnv *env, jclass jclas, jstring path){
const char* file_path = env->GetStringUTFChars(path,NULL);// ,jstring->char*
if(file_path != NULL){
LOGV("file_path in c %s",file_path);
}
//
FILE* file = fopen(file_path,"a+");
if(file != NULL){
LOGV("open file success in c");
}
//
char data[]="hello jni";
int count = fwrite(data,strlen(data),1,file);
if(count > 0){
LOGV("write file success in c");
}
//
if(file != NULL){
fclose(file);
}
//
env->ReleaseStringUTFChars(path,file_path);
}
배열 의 처리
native 인터페이스 구현 중 배열 에 대해 두 가지 처리 방안 이 있 습 니 다.
1. 첫 번 째 방식 은 native 층 을 생 성 하 는 배열 복사 이다.
2. 두 번 째 방식 은 배열 지침 을 직접 호출 하여 조작 하 는 것 이다.
자바 클래스 에서 native 인 터 페 이 스 를 설명 합 니 다.
//
public static native int[] modifyIntArray(int[] data);
jni 에서. cpp 파일 에 해당 하 는 c + + 를 추가 합 니 다.JNIEXPORT jintArray JNICALL Java_com_vince_jnidemo_MainActivity_modifyIntArray
(JNIEnv *env, jclass jclas, jintArray array){
// native
jint nativeArray[5];
env->GetIntArrayRegion(array, 0 , 5, nativeArray);
int j;
for(j = 0; j < 5; j++){
nativeArray[j] += 5;
LOGV("nativeArray---> %d", nativeArray[j]);
}
env->SetIntArrayRegion(array, 0, 5, nativeArray);
/*
// native
jint* data = env->GetIntArrayElements(array,NULL);//
jsize len = env->GetArrayLength(array);//
int j;
for(j = 0; j< len; j++){
data[j] += 3;
LOGV("data from c %d",data[j]);
}
//
env->ReleaseIntArrayElements(array,data,0);
*/
return array;
}
native 반전 자바 함수
자바 클래스 에서 native 인 터 페 이 스 를 설명 합 니 다.
// native java
public static native void callJavaMethodFromNative();
jni 에서. cpp 파일 에 해당 하 는 c + + 를 추가 합 니 다.JNIEXPORT void JNICALL Java_com_vince_jnidemo_MainActivity_callJavaMethodFromNative
(JNIEnv *env, jclass jclas){
jmethodID java_method = env->GetStaticMethodID(jclas, "printInfo", "()V");
if (java_method == NULL)
{
LOGV("java_method ");
}
env->CallStaticVoidMethod(jclas,java_method);
}
이렇게 많은 함 수 를 어디서 찾 느 냐 고 물 을 수 있 습 니 다. 우 리 는 E: \ java \ \ android - ndk - r9d \ \ platforms \ android - 14 \ \ arch - arm \ \ usr \ include \ jni. h 에서 해당 함 수 를 볼 수 있 습 니 다.
jniDemo 주소:http://download.csdn.net/detail/u012350993/9426813
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
(원본) JNI 포인터 호출 순서를 알 수 없음JNI에서 바늘을 얻는 순서를 잘 모르겠어요. 다음은 전송된 바늘의 순서에 따라 코드가 뛰자마자 붕괴된다.다음과 같습니다. 이후 포인터를 받는 순서를 살짝 수정한 후 달려갈 수 있었다.다음과 같습니다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.