Android Jni 개발 의 상호작용 처리

3087 단어 jniNDK상호 작용
jni 에서 응용 층 과 native 층 은 어떻게 상호작용 을 합 니까?jni 의 용법 에 대하 여 우 리 는 참조 할 수 있다.http://docs.oracle.com/javase/6/docs/technotes/guides/jni/spec/jniTOC.html。다음은 자바 와 c + + 의 상호작용 을 작은 예 로 설명 합 니 다. 주로 세 부분 을 말 합 니 다. 문자열, 배열 의 처리 와 c + 자바 함 수 를 되 돌려 줍 니 다.
문자열 처리
자바 클래스 에서 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

좋은 웹페이지 즐겨찾기