Başka bir yürütülebilir dosyadan arama yedeklerini alan bir cpp dosyasından Java sınıfı yöntemlerini aramak istiyorum. Android NDK içinde iş parçacıkları arasında bir JavaVM * paylaşma
Bu amaca ulaşmak için
, doğrudan JNI'yı yöntem çağrıları alır .Cpp dosyasında robot :: AndroidRuntime :: getJavaVM() yöntemini kullanarak bir JavaVM işaretçiyi geri var. Ben şöyle Java yöntemleri gerekli çağrı nihai .cpp dosyasına yapıcı üzerinden bu JavaVM işaretçisi paylaşıyorum:/* All the required objects(JNIEnv*,jclass,jmethodID,etc) are appropriately declared. */
**JNIEnv* env;
jvm->AttachCurrentThread(&env, NULL);
clazz = env->FindClass("com/skype/ref/NativeCodeCaller");
readFromAudioRecord = env->GetStaticMethodID(clazz, "readFromAudioRecord", "([B)I");
writeToAudioTrack = env->GetStaticMethodID(clazz, "writeToAudioTrack", "([B)I");**
Ancak, ben bu kodu çalıştırarak bir SIGSEGV arızayı olsun. Bu konuda herhangi bir yardım takdir edilecektir http://java.sun.com/docs/books/jni/html/other.html#26206
:
JNI'yı belgelerine göre bu keyfi bağlamlarda JNIEnv almaya yönelik bir yol olarak görünmektedir.
Selamlar, Neeraj
Nedir android :: AndroidRuntime :: getJavaVM)? Bu NDK public API işlevi değil. Belgesiz bir şey kullanıyorsunuz. NDV'de JavaVM * almak için, paylaşılan kitaplığınız yüklendiğinde otomatik olarak çağrılan JNI_OnLoad global işlevini uygulamanız gerekir. –
Yanıtınız için teşekkürler .. http://android.wooyd.org/JNIExample/#NWD1sCYeT-J - bu belge, android :: AndroidRuntime :: registerNativeMethods() yönteminin kullanıldığı JNI_OnLoad için çok iyi bir giriş sağlar. Android :: AndroidRuntime'in belgelenmediğinden emin misiniz? – Neeraj
Evet, normal kullanıcı NDK kodunda belgesiz özellik. JNI belgelerini (Sun) okuyun ve diğer yasal ve belgelendirilmiş API için NDK klasörünüzdeki docs/STABLE-APIS.html dosyasını kontrol edin. –