I read that JNI 함수 (네이티브 C 부분)는 매우 복잡하며 java 패키지 이름을 포함해야합니다.Android 웹킷 소스의 JNI 기능
그러나 Android 웹킷 소스를 읽을 때. WebView.cpp
static int nativeMoveGeneration(JNIEnv *env, jobject obj)
{
WebView* view = GET_NATIVE_VIEW(env, obj);
if (!view)
return 0;
return view->moveGeneration();
}
Ihis JNI 함수의 WebView.java
private native int nativeMoveGeneration();
그것은 JNI 함수를 호출의 예를 들어 nativeMoveGeneration
기능은 규칙의 이름을 지정 따르지 않습니다. 왜 그럴까요?
P/S : 위의 기능은 데모 용입니다. 나는 안드로이드 4.0.3 소스를 읽고 있어요, 그래서
UPDATE @ 알렉스 콘 덕분에이 JNI Tips 위의 github에 소스와 다를 수 있습니다, 우리가주는 JNI_OnLoad를 사용하거나 복잡한 이름을 사용할 수 있다는 것을 알고. 하지만 JNI_Onload를 어디에 두어야합니까?
Android NDK 패키지의 모든 샘플을 읽었지만 JNI_OnLoad는 볼 수 없습니다. C 또는 C++ 소스간에 차이점이 있습니까? – onmyway133
맞습니다. 사람들은 ** javah ** tool에서 제공하는 기본 바인딩을 선호합니다. ** JNI_OnLoad **의 사용이 정당화되는 경우는 거의 없습니다. 주로 전역 개체 초기화를 수행하는 데 도움이됩니다. 로드시에 멀티 스레딩 경쟁 조건이나 사용자 조치에 대한 즉각적인 응답에 대해 걱정할 필요가 없습니다. ** JNI_OnLoad **의 네이티브 메소드 테이블을 채우는 것에 관해서는, 매우 긴 테이블의 경우 약간의 성능 향상이있을 수 있습니다. WebKit에는 매핑 할 원시 메소드가 많이 있습니다. –
JNI 검색을 사용하지 않는 또 다른 이유는 이제 메서드가 "정적"으로 선언 될 수 있으므로 이름이 장치의 기호 테이블에서 공백을 차지하지 않기 때문입니다. –