Şimdi Ara

Android NDK ile c++ uygulama geliştirme yardım (QT İÇERİR)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
3 Misafir (1 Mobil) - 2 Masaüstü1 Mobil
5 sn
16
Cevap
0
Favori
1.562
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • ios haricinde androide native uygulama yapmak isityorum. java ile hiç uğraşmadığım için bunu c++ bilgimle yapmak amacım. Bu durumda tek çare android NDK gibi duruyor. ( başka çarelerde var evet ama native anlamada söylüyorum. qt olayı da var tabi)

    Bu platformu hiç kullanmadım. dediğim gibi ios dışında android için de uygulama yapmak istiyorum.

    c++ ile Android ndk yı kullanan var mı? Performans anlamında, native uygulama anlamında ve genel anlamda bildiğiniz kadar yorumlarınıza ihtiyacım var.



    < Bu mesaj bu kişi tarafından değiştirildi m.t.y. -- 20 Nisan 2016; 14:19:33 >



  • Merhaba; Android NDK zaten tek başına kullanılmıyor, Java ile beraber kullanılıyor. O yüzden tek NDK ile yazmak isterseniz Java da gerekiyor :). Dediğiniz gibi Qt var ve mobilde Android, iOS, Windows Mobile, Blackberry, Sailfish ve Ubuntu Touch sistemlerine yerel (native) olarak uygulama yazabilirsiniz. Qt hiçbir zaman mobil platformların native araçlarından (mesela Android SDK ve NDK) bağımsız çalışmaz, bu yüzden de performanstan taviz vereceğinizi düşünmüyorum. Ayrıca AndroidExtras ile Java, .mm, .h dosya uzantıları sebebiyle de Objective-C kodlarını Qt'da çağırabilirsiniz. Bu da size yarı yolda kalmama garantisi veriyor. Mobilde tasarımı QML ile (bkz:http://doc.qt.io/qt-5/qtlabscontrols-gallery-example.html ) yapıyorsunuz (Bu dil Javascript ve JSON tarzında bir dil).

    Bunun dışında Embarcadero C++ Builder var. Lakin bu platform bir kere ücretli bir platform (bkz: Fiyat). Ayrıca bu platform ile de Android, iOS ve Windows Mobile için yerel uygulama geliştirebiliyorsunuz.

    Aksi halde tek NDK ile uygulama geliştirme yapılmıyor. C/C++ için de bu iki araç dışında başka araç yok.



    < Bu mesaj bu kişi tarafından değiştirildi Programmer_Kanguru -- 14 Nisan 2016; 23:35:18 >




  • Programmer_Kanguru P kullanıcısına yanıt
    Anladım. qt de ücretli, 30 gün deneme süresi veriyor. c++ ın sınırlarını bu programla dene süresince test etmek istiyorum. c++ cılar için ücretsiz çözüm olmayacak mı? Ubuntu üzerinde qt nin durumu nedir acaba? ücretli mi yine? ücretsiz ise mac in bir köşesine ubuntu kurar geçerim :)



    < Bu mesaj bu kişi tarafından değiştirildi m.t.y. -- 18 Nisan 2016; 12:46:09 >
  • Qt nin açık kaynak sürümü ücretsiz, firma desteği yok sadece.

    https://www.qt.io/download-open-source/
  • quote:

    Orijinalden alıntı: elektro_gadget

    Qt nin açık kaynak sürümü ücretsiz, firma desteği yok sadece.

    https://www.qt.io/download-open-source/

    sadece firma desteği yoksa çok iyi.
  • m.t.y. kullanıcısına yanıt
    @elektro_gadget'in de dediği gibi Qt Açık Kaynak sürümü ücretsiz ve LGPL lisanslı kullandırtıyor. Aradığı şartlar (Qt Open Source sürüm için):
    *) Kodun kapalı olabilir LGPL olduğu için. (Tabi bazı kütüphaneler sadece ticari ya da gpl lisanslı, bunlar hariç (mesela QtCharts ve QtVirtualKeyboard). ).
    *) LGPL lisanslı sürümde geliştirdiğin yazılımın Qt kütüphanelerini statik bağlayamazsın, dinamik olmak zorunda. Zaten varsayılan dinamik oluyor.
    *) Qt kütüphanelerinde değişiklik yaptıysan bunu yayınlamak zorundasın.
    *) Cihaz dağıtamazsın (Eğer sadece masaüstü ve mobil geliştici isen bu seninle ilgili olmuyor çünkü cihaz dağıtmıyorsun).

    Gördüğün gibi Qt C++ ve QML için her alanda kullanışlı bir araç. Dahası Qt 5.6 sürümüyle birlikte Qt Purchasing modülü geldi ve bu modül ile Android ve iOS'te uygulama içi satış yapabiliyorsun.




  • Programmer_Kanguru P kullanıcısına yanıt
    NDK üzerinden derleme alınabiliyor ? Cocos2d-x gibi oyun motorları NDK üzerinde derleme alıp, Java'dan bağımsız build alınabiliniyor.

    Temelde zaten Java aracıyla yazılmış ve SDK buildi alınmış APK dosyası byte-codelarını temelde C++ kodları çalıştırıyor.

    NDK üzerinde yazılım geliştirmeyi Google kasten zorlaştırıyor. Java kullanmam dersen birden fazla yöntem var ama Google istemiyor

    İlla ben NDK üzerinde kodlarımı yazacağım dersen .so(shared object, dinamik kütüphane) şeklinde derleyip, Java üzerinden ilintisini yazmak daha mantıklı.(Çoğu kişi bu yöntemi kullanıyor.)

    Java'nın kendi içinde native programlamaya desteği var. Böyle yaparsan temelde C++ kodları yazar, Java ilede rahat rahat arayüzü çıkartırsın.

    Edit: Qt bulaşmayın, geleceği belli olmayan bir çalışma çatısı. CopperSpice filan yerini alacak. Gerçeği Qt bilen adam CopperSpice hayli hayli bilirde, şirket olarak bulaşmayın



    < Bu mesaj bu kişi tarafından değiştirildi Alper# -- 19 Nisan 2016; 7:11:07 >




  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
  • Alper# kullanıcısına yanıt
    Selamün Aleyküm;
    Tabii ki oyun motorları, oyun kütüphaneleri ve hybrid yapılar için iş değişiyor, ben sadece native uygulama geliştirdiğini söyleyen mobil geliştirme araçları için bunu söyledim (Qt, Embarcadero Delphi XE ve C++ Builder XE, Xamarin, React Native vs.). Eğer kişi ben yalnızca Android için veya yalnızca iOS için uygulama geliştireceğim derse bence de o platformların yerel araçları (Java ve Objective-C ya da Swift) ile yazması en iyi tercih lakin kişi birden fazla mobil platformu hedef almışsa o zaman native olarak geliştirmeyi sağlayan bu gibi araçları tercih etmesi çok daha iyi olur. Tabi bu seçim kişiden kişiye göre değişebilir. Biraz da kişinin tercihlerine kalmış.
    quote:

    Edit: Qt bulaşmayın, geleceği belli olmayan bir çalışma çatısı. CopperSpice filan yerini alacak. Gerçeği Qt bilen adam CopperSpice hayli hayli bilirde, şirket olarak bulaşmayın

    Aslında bakılırsa hiçbir aracın geleceği belli değil sadece uzun vadede kullanabileceğimiz araçlar olması elbette iyi olur. Qt bakılınca C++ için en iyi cross platform geliştirme aracı diyebilirim çünkü C++ için hem masaüstü hem de mobil için uygulama geliştirme yapabileceğimiz bir başka platform bilmiyorum. Ayrıca bana göre Qml ile yapılan mobil tasarım Android için yapılan xml tasarımdan çok daha okunaklı ve esnek. CopperSpice Qt'un MOC çıkarılmış hali ve bu aslında derleme zamanında hız kazandırır (signal-slot çalıştırmak için başka bir yapı kullanıyormuş) ama şu anda Qt her platforma geliştirmek için CopperSpice'dan daha fazla ön planda.




  • quote:

    Orijinalden alıntı: Alper#

    NDK üzerinden derleme alınabiliyor ? Cocos2d-x gibi oyun motorları NDK üzerinde derleme alıp, Java'dan bağımsız build alınabiliniyor.

    Temelde zaten Java aracıyla yazılmış ve SDK buildi alınmış APK dosyası byte-codelarını temelde C++ kodları çalıştırıyor.

    NDK üzerinde yazılım geliştirmeyi Google kasten zorlaştırıyor. Java kullanmam dersen birden fazla yöntem var ama Google istemiyor

    İlla ben NDK üzerinde kodlarımı yazacağım dersen .so(shared object, dinamik kütüphane) şeklinde derleyip, Java üzerinden ilintisini yazmak daha mantıklı.(Çoğu kişi bu yöntemi kullanıyor.)

    Java'nın kendi içinde native programlamaya desteği var. Böyle yaparsan temelde C++ kodları yazar, Java ilede rahat rahat arayüzü çıkartırsın.

    Edit: Qt bulaşmayın, geleceği belli olmayan bir çalışma çatısı. CopperSpice filan yerini alacak. Gerçeği Qt bilen adam CopperSpice hayli hayli bilirde, şirket olarak bulaşmayın

    c++da gui için maalesef çok fazla bir alternatifimiz yok. Siz de haklısınız bu tür hibrit yapılar her ne kadar native olduklarını iddia etseler de sürüm farklılıkları, başka ortamlarda kütüphane gereksinimi, paketleme gibi sorunlar baş ağrıtıyor. Lgpl lisansı işi de yine işin çakallığı gibi (http://ddili.org/forum/thread/1583;?unb666sess=04f9185d0941db7a189f3e03fe1c6610 ). Özgür yazılımcı bir yerde çakallık gördü mü oradan hızla uzaklaşır :)

    programcı için dil işi önemli olmamalı zaten. Benim için de değil. oturur 1 ayda java ya adapte olurum. Hepsi c türevi. :) sonra iş frameworkler dünyasının kullanımına kalıyor. O da yine projenin tipine göre karar verilmesi gereken durum. mac ortamında çalışınca seçenekler biraz daha darlıyor. benim sorunum o sadece.

    Qt çok iddalı diye bir sorayım istedim. herşeyi sunan isviçre çakısı mübarek ama işte qt yi kullananlar çok daha iyi bilir. Onların görüşlerini ( qt nin artıları eksileri adına) merak ediyorum doğrusu.

    Bir de copperspice ile ilgili dedikodu :) http://ddili.org/forum/thread/1431;?unb666sess=04f9185d0941db7a189f3e03fe1c6610

    Qt ile ilgili bilgisi olanlar bildiklerini ve tecrübelerini paylaşırsa sevinirim.



    < Bu mesaj bu kişi tarafından değiştirildi m.t.y. -- 20 Nisan 2016; 12:32:45 >




  • m.t.y. kullanıcısına yanıt
    Merhaba;
    quote:

    c++da gui için maalesef çok fazla bir alternatifimiz yok.

    Eğer amacınız GUI kısmı ise birçok alternatif mevcut: GTK+, Qt, WxWidgets, FLTK, VCL vs. Mobil sadece GUI üstüne kurulu olmadığı için Qt ve VCL(C++ Builder) dışında mobil diğerleriyle mobil geliştirme ya yapamıyorsunuz ya da çok gelişmemiş şekilde yapıyorsunuz. (Bu da C++ GUI araçlarının listesi: LINK). Ayrıca bildiğiniz gibi Qt yalnızca GUI değil kocaman bir yazılım geliştirme kütüphanesidir (Qt C++ Sınıfları).
    quote:

    bu tür hibrit yapılar her ne kadar native olduklarını iddia etseler de sürüm farklılıkları, başka ortamlarda kütüphane gereksinimi, paketleme gibi sorunlar baş ağrıtıyor.

    Söylediğim gibi Qt hibrit değil native geliştirme aracıdır. Hibrit webview üzerinde çalışır. (bkz: LINK). Kütüphane gereksinimi konusunda her Android, iOS ve Windows Mobile kütüphanelerini Qt içinde bulamazsınız ama diğer mesajımda da dediğim gibi Android Extras ile Java, iOS için de Objective-C kodlarını C++'da kullanabilirsiniz: (QtAndroidExtras ile Java kodu çağırma ve Objective-C kodu çağırma). Yani öyle Android'de veya iOS'ta şu kütüphaneyi Qt için bulamadım dediğiniz zaman direk kodları bu şekilde çekin. Paketleme sorunundan kastınız nedir? Eğer apk gibi paketlemek ise bu işler çok basit (Android Studio'da olduğu kadar basit aslında (bkz: Qt Android APK Oluşturma)).
    quote:

    Lgpl lisansı işi de yine işin çakallığı gibi

    LGPL sizi kısıtlar ama kurallarına uyduğunuz taktirde hem kodlarınızı kapatır hem de ticari olarak ürününüzden kazanç elde edebilirsiniz. Özgür yazılım derken siz demek ki mobil uygulamanızın kodlarını açık tutacaksınız o zaman kodunuzu açın ve Qt'un tüm imkanlarını kullanın. Ama mobil uygulamada kodunuzu kapatacağınızı tahmin ediyorum. O halde bu iş zaten özgür yazılım olmuyor ki :). O halde uygulamanızdan para da kazanamayabilirsiniz.
    quote:

    mac ortamında çalışınca seçenekler biraz daha darlıyor.

    Merak etmeyin Qt'un her lisansını MAC üzerinde de kullanabilirsiniz. Yani MAC üzerinde de Qt geliştirme yapabilirsiniz.

    Son olarak Qt ile yapılmış 2 uygulama apk olarak:
    Mapviewer Örneği: MapViewer
    Qt Basit Tasarım Örneği: Qt Android Basit Tasarım Örneği
    Basit tasarımın Java ile yapılanı: Java ile olan basit tasarım örneği

    Ayrıca tekrar söylüyorum: Eğer sadece tek bir platforma yönelmek istiyorsanız o platformun resmi araçlarını tercih edin. Bu araçları sadece çoklu platform geliştireceğiniz zaman tercih etmeniz daha iyi. Nedeni ise resmi araçlar o platform için daha kolay olarak geliştirmeye imkan veriyor ama uygulama çoklu platform olacağı vakit iş iyice zorlaşıyor, işte tam bu noktada Qt, React Native vs. gibi native uygulama geliştirme araçları çok daha fazla kolaylık sağlıyor. Örnek olarak Android Studio'da XML olarak yaptığınız tasarım yalnızca Android içindir ve iOS'te bambaşka bir yapı bulunuyor (storyboard). Qt'da labs.controls modülünü kullanarak tek tasarım yapın ve her platformda kullanın. Mesela yukarıdaki basit tasarım örneği Qt.labs.controls kullanılarak geliştirildi.

    Qt eksi yanı 1.si LGPL lisansı belli kurallar koyuyor ve bu kurallara dikkat etmek lazım. İkinci olarak her mobil özellik hazır olarak yok ve bunları Java ve Objective-C kodu olarak uygulamamıza çağırmamız lazım. (Aslında bu eksiklik değil ama haliyle biraz uğraş istiyor). Başka da bir eksikliğini gören yazarsa biz de bilgileniriz. Dediğiniz gibi amaç araç yarıştırmak değil, ben sadece bir Qt, Android Studio ve Windows Mobile geliştiricisi olarak iki araçta da gördüğüm artı ve eksileri yazdım.




  • Programmer_Kanguru P kullanıcısına yanıt
    ilginiz ve cevaplar için teşekkürler.

    Paketleme den kastım başka ortama statik olarak yükleyebilme. Bu durumda qt nin zorlukları veya engelleri var mı? google ve apple ın bu konudaki yaklaşımı nasıl?
  • m.t.y. kullanıcısına yanıt
    Google kısmında sorun yok, Qt kütüphanelerini dinamik olarak bağla, apk dosyasını oluştur ve Google Play hesabına yolla. Qt lisansını LGPL olarak kullanıyorsan ve kodun kapalıysa statik bağlama yapamazsın. Ama eğer LGPL lisansı kullanıp açık kaynak bir uygulama yaptıysan o zaman statik bağlayabilirsin. AppleStore tarafında dinamik bağlama kabul edilmiyor diye biliyorum ama bu olabilir mi bilmiyorum: https://wiki.qt.io/Licensing-talk-about-mobile-platforms#Qt_for_iOS Bu soruya iOS geliştiricileri cevap verirse daha iyi olur. AppleStore kütüphanelerin dinamik olarak bağlanmasını kabul ediyor mu?
    Ama eğer Qt ticari lisans satın alırsan bu durum değişiyor, o zaman istediğin gibi geliştirip dağıt. Yani statik bağlama için ya lisans satın almalısın ya da uygulamanın kodlarını açmalısın.




  • Bu konu benim de ilgimi çekti. Şu an QT'ya adapte olmaya çalışıyorum, ama tam olamadım. Pardus Kurumsal 5 işletim sistemini kullanıyorum. C++ derlemeleri için güzel oluyor. QT editör içinde necessitas diye birşey buldum, kurdum güzel gözüküyor. Necessitas'da QT derlemesi yapabiliyorum.

    Neyse, asıl meseleyi anlatayım. Şu andaki görevim OpenMP ile yazılmış bir paralel programı, .Android cihazlar için kullanılabilir bir uygulama haline getirip çalıştırmak. Kısacası, basit kodlarla yazılmış bir "Merhaba Dünya" programını, OpenMP ile C++ dilinde yazdım ve bu programı Android cihazlar için uygun hale getirmem lazım. 2 gündür uğraşıyorum, çözemedim maalesef. Yazıklar olsun bana. =)
  • takip benimde merak etti?im bir konuydu
  • josephshenturk kullanıcısına yanıt
    Özel mesaj attım.
  • qt kullananlar tecrübelerini paylaşabilir mi acaba?
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.