Thread overview
Bilmediğimiz Bir Konu Nasıl Araştırılmalı?
Jan 17, 2017
İbrahim
Jan 17, 2017
İbrahim
January 17, 2017

Selamün Aleyküm Arkadaşlar;

Ben yaklaşık 1 aya yakın bir süredir Java Native Interface (JNI) ile uğraşıyorum ve daha önce forumda da paylaştığım şekilde basit bir kod yazarak Java kodlarını C++ tarafından çalıştırmayı başardım. Lakin bu işi sadece masaüstü tarafında yapabildim, Android tarafında kodumu derlemeye çalıştığımda hatalarla karşılaştım.
Bununla ilgili birçok yabancı forumda (Qt forum, Stackoverflow, Android NDK ve SDK google+ sayfaları, Reddit) Android tarafında C++'dan Java kodu nasıl çalıştırılır diye konular açtım fakat bir çoğu yanıtsız kaldı ve yanıtlananlar da tatmin edici olmayan ve işe yaramayan yanıtlardı. Oracle'ın JNI sayfasını okudum ama bu dökümanlar sadece masaüstü tarafında JNI için yazılmış, Android için yok. Qt bunun için QtAndroidExtras adlı bir modül hazırlamış ve arka planda büyük ihtimalle JNI kullanıyor. Bu yüzden nasıl yaptıklarını anlamak için GitHub'dan kaynak kodlarını okumaya çalışıyorum, fakat bu da benim için zor oluyor.

Esas olarak sormak istediğim şey ise, böyle durumlarda bilmediğimiz konuyu ayrıntılı olarak öğrenebilmemiz ve uygulayabilmemiz için nasıl araştırma yapmamız gerekiyor? Mesela bu iş için konuşursak, C++ tarafından Java kodları (Android kodları) çağırabilenler nasıl bu iş için mantık kurabiliyor? JavaVM çalıştırmamız gerektiğini biliyorum ama bu sadece masaüstü için geçerli, Android'de olmuyor. Yani kaynakları nasıl değerlendirmeliyiz? Bir konuyu bilmiyorsak onu nasıl araştırmalıyız? Bu iş için en iyi öğrenme yöntemi ne olmalı? Teşekkürler!

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 18, 2017

Aslında sormak istediğim tam olarak şöyle: Mesela Oracle ve benzeri JNI anlatan dökümanlar sadece masaüstü uygulamalar için anlatıyorlar, hem de çoğunlukla Java'dan C / C++ kodu çağırma konusu anlatılıyor. Halbuki ben tam tersi, yani C++'dan Java kodu çağırmam lazım. Bunun için de belli kaynaklar yok değil ama yine sonuç Java'dan C kodu çağırmaya çıkıyor. Misal vermiş olduğunuz stackoverflow bağlantısında soruyu soran kişi "public class MainActivity extends Activity" diye Java kodu tanımlamış, bu kod Android Java kodu. Ayrıca "static { System.loadLibrary(LIB_NAME); }" diyerek paylaşımlı bağlanmış (shared library) bir kütüphaneyi yüklüyor (bu kütüphane C / C++ koduyla yazılmış, zaten alt bölümünde de soru sahibi kaynak kodunu da yazmış). Sonra da "public native String getJniString();" diyerek bu metot ile C / C++ kodunu kullanacak. Yani sonuç yine Java tarafından çıkıyor.

Belki ben bir yerlerde yanlış yapıyorumdur. Çünkü Android SDK zaten Java ile yazılan bir SDK. Bu yüzden haliyle bir JavaVM (bu Android'de ART / DalvikVM oluyor.) gerekiyor. Ama ben bu JavaVM'yi kendim mi oluşturacağım yoksa Qt vb. ortamlar, mobil sistemlerde otomatik olarak oluşturuyor mu? Qt, QtAndroidExtras ile Java kodu çağırdığına göre evet oluşturuyor gibi ama bu sefer de bu sanal makineye Android'de C++ tarafında nasıl ulaşacağım? Ve bunun için nasıl bir sistem kurmalıyım? İşte bunları araştırıyorum ama sanırım yabancı forumlarda hep yanlış anlaşıldım :) . İşte bu gibi bir konuda nasıl yardım almalıyım ve kaynakları nasıl bulmalıyım? Umarım açıklayıcı anlatabilmişimdir.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 17, 2017

Ben genelde Google'da arıyorum. Belki senin bulduklarından farklıdır diye yararlı görünen rasgele iki bağlantı vereyim:

http://stackoverflow.com/questions/5198105/calling-a-java-method-from-c-in-android
http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/method.html

Öğrenme konusunda eğer o teknolojinin kendi sitesi varsa bütün yararlı kaynaklar orada bulunuyor. Örneğin en son JWT öğrenmem gerektiğinde jwt.io'ya gittim ve hem oradaki bilgileri hem de bahsettikleri RFC'leri okudum. Eğer içine çok dalmak istiyorsam bir de forumlarını izlemek isteyebilirim ama yıllardır D dışında izlediğim forum yok.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 18, 2017

"C++'dan Java kodu çağırmam lazım" diyorsun ve rastladığımız konuların başlıkları da "Calling a java method from c++ in Android" gibi tam yanıtı veriyormuş gibi görünüyor. :) Kusura bakma, bu konuda daha fazla bilgim yok.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]