Forum: Diğer Konular RSS
Bilmediğimiz Bir Konu Nasıl Araştırılmalı?
İbrahim #1
Üye Eki 2015 tarihinden beri · 154 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Bilmediğimiz Bir Konu Nasıl Araştırılmalı?
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!
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4511 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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-…
  http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/im…

Öğ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
İbrahim #3
Üye Eki 2015 tarihinden beri · 154 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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.
acehreli (Moderatör) #4
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4511 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
"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
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-10-20, 23:55:53 (UTC -07:00)