Qt Android Opencv qmake configuration file
Android geliştirme için gerçek zamanlı hele tamamen native geliştirmek isteyenler için fazla seçeneğimiz yok. C/C++ için NDK(AndroidNativeActivity(uğraşılmaz)), UnrealEngine, Marmalade QT ve Rad studio var ve Basic için B4x(B4a,B4j,B4i,B4r) Rad araçlarını kullanıyor.
Rad studio borland derleyicinin idesi. Tüm platformlara native uygulama geliştirme. Objectif Pascal ve Delphinin sanırım kalan tek destekçisi. Rad studio qt gibi açık kaynak ve ücretsiz değil. Ayrıca araçları genel geçer gcc ile tam uyumlu değil yani komutları öğrenmek zaman alacak yani deneme süresinde bitiremezsiniz. Yeteri kadar kaynak görmedim. yeni derleyici ekleme seçeneği yok.
Ndk ya java için jni arayüzü yazacaksınız yada Android Native Activity kullanacaksınız ama hemen öğrenilecek gibi değil.
UnrealEngine gayet güzel ama ücretsiz değil. Ayrıca çizimle işi olmayanlar için gereksiz işler çıkartıyor. Editörü çok güzel ama çoğu bilgisayar için ağır. Derleme süresi çok uzun. Zaten yapım amacı oyun yani bu sırada hlsl ve glsl gibi basit bir uygulamada gerekmeyen verileri de derliyor.
B4x(basic) ilk olarak rad studio araçlarını kullanıyor. Hiç kullanmadım ama denemek isteyene lafım yok. Yeteri kadar kaynak görmedim.
QT c++ var olduğundan beri var. nokia ile geldi. Tüm platformlara native uygulama geliştirme. çok insan pyqt olarak tanıyor artık(maalesef). Hemen hemen tüm derleyicilerle çalışıyor. c++ standardı derleyiciye bağlı kalıyor böylece. Android için apkbuilder ile dex kodunu derliyor yani gizli jni var yani java kodu derlemiyor. Uygulamalar cmake ve qmake ile derlenebiliyor. qmake cmake bilenlere göre yabancı gelebilir ama öğrenmesi çok kolay. QNX, embedded linux desteği olması çok iyi. Write once compile everywhere(WOCE) ile javaya benziyor ama her platforma native kod üretiyor. 5.10 ile Vulkan desteği geliyor. Şimdiden beta versiyonu yayınlandı. 5.9 versiyonu için uzun dönem desteği verdi.
En büyük sorunu her platform için kendi ui görünümünü vermeyebiliyor. Tabi bu size bağlı.
Qt ile Android programını opencv3 ile yapmak isterseniz. Projem için bir setup dosyası yazdım.
Not: android{...} yüzünden windows modunda windows için derlemez. çünkü include ve lib sadece android için yazılmıştır. Opencv içinde olan tüm lib dosyaları eklenmiştir. O yüzden bu kadar uzundur.
Tavsiye: Ndk paketini güncel tutun. Sdk, ant, ndk yüklemeyi unutmayın.
not: Qt ile kameradan resim çektiğimde başarılı olamamıştım. Resim düzgün çıkmıyordu. Sanırım sorunu buldum. Image Codec kullanmadığım için resimler ve videolar çözülemiyordu. Benim hatam. Linkte çözümü var.
https://www.youtube.com/watch?v=9oQZPqi47Y8
Rad studio borland derleyicinin idesi. Tüm platformlara native uygulama geliştirme. Objectif Pascal ve Delphinin sanırım kalan tek destekçisi. Rad studio qt gibi açık kaynak ve ücretsiz değil. Ayrıca araçları genel geçer gcc ile tam uyumlu değil yani komutları öğrenmek zaman alacak yani deneme süresinde bitiremezsiniz. Yeteri kadar kaynak görmedim. yeni derleyici ekleme seçeneği yok.
Ndk ya java için jni arayüzü yazacaksınız yada Android Native Activity kullanacaksınız ama hemen öğrenilecek gibi değil.
UnrealEngine gayet güzel ama ücretsiz değil. Ayrıca çizimle işi olmayanlar için gereksiz işler çıkartıyor. Editörü çok güzel ama çoğu bilgisayar için ağır. Derleme süresi çok uzun. Zaten yapım amacı oyun yani bu sırada hlsl ve glsl gibi basit bir uygulamada gerekmeyen verileri de derliyor.
B4x(basic) ilk olarak rad studio araçlarını kullanıyor. Hiç kullanmadım ama denemek isteyene lafım yok. Yeteri kadar kaynak görmedim.
QT c++ var olduğundan beri var. nokia ile geldi. Tüm platformlara native uygulama geliştirme. çok insan pyqt olarak tanıyor artık(maalesef). Hemen hemen tüm derleyicilerle çalışıyor. c++ standardı derleyiciye bağlı kalıyor böylece. Android için apkbuilder ile dex kodunu derliyor yani gizli jni var yani java kodu derlemiyor. Uygulamalar cmake ve qmake ile derlenebiliyor. qmake cmake bilenlere göre yabancı gelebilir ama öğrenmesi çok kolay. QNX, embedded linux desteği olması çok iyi. Write once compile everywhere(WOCE) ile javaya benziyor ama her platforma native kod üretiyor. 5.10 ile Vulkan desteği geliyor. Şimdiden beta versiyonu yayınlandı. 5.9 versiyonu için uzun dönem desteği verdi.
En büyük sorunu her platform için kendi ui görünümünü vermeyebiliyor. Tabi bu size bağlı.
Qt ile Android programını opencv3 ile yapmak isterseniz. Projem için bir setup dosyası yazdım.
Not: android{...} yüzünden windows modunda windows için derlemez. çünkü include ve lib sadece android için yazılmıştır. Opencv içinde olan tüm lib dosyaları eklenmiştir. O yüzden bu kadar uzundur.
Tavsiye: Ndk paketini güncel tutun. Sdk, ant, ndk yüklemeyi unutmayın.
not: Qt ile kameradan resim çektiğimde başarılı olamamıştım. Resim düzgün çıkmıyordu. Sanırım sorunu buldum. Image Codec kullanmadığım için resimler ve videolar çözülemiyordu. Benim hatam. Linkte çözümü var.
https://www.youtube.com/watch?v=9oQZPqi47Y8
Qmake dosyası:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = android_deploy
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
CONFIG += mobility
MOBILITY =
# android için android{...} win32 için win32{...} unix için unix{...}
android{ANDROID_EXTRA_LIBS =
ANDROID_OPENCV = D:/opencv/OpenCV33-android-sdk/sdk/nativeLIBS +=ANDROID_OPENCV_LIBS = $$ANDROID_OPENCV/libsANDROID_OPENCV_LIBS_x86 = $$ANDROID_OPENCV_LIBS/x86ANDROID_OPENCV_LIBS_armeabi_v7a = $$ANDROID_OPENCV_LIBS/armeabi-v7aANDROID_OPENCV_LIBS_x86_64 = $$ANDROID_OPENCV_LIBS/x86_64ANDROID_OPENCV_LIBS_armeabi_v7a_arm64-v8a = $$ANDROID_OPENCV_LIBS/arm64-v8aANDROID_OPENCV_LIBS_armeabi = $$ANDROID_OPENCV_LIBS/armeabiANDROID_OPENCV_LIBS_mips = $$ANDROID_OPENCV_LIBS/mipsANDROID_OPENCV_LIBS_mips64 = $$ANDROID_OPENCV_LIBS/mips64ANDROID_OPENCV_3RDPARTY_LIBS = $$ANDROID_OPENCV/3rdparty/libsANDROID_OPENCV_3RDPARTY_LIBS_x86 = $$ANDROID_OPENCV_3RDPARTY_LIBS/x86ANDROID_OPENCV_3RDPARTY_LIBS_armeabi_v7a = $$ANDROID_OPENCV_3RDPARTY_LIBS/armeabi-v7aANDROID_OPENCV_3RDPARTY_LIBS_x86_64 = $$ANDROID_OPENCV_3RDPARTY_LIBS/x86_64ANDROID_OPENCV_3RDPARTY_LIBS_arm64-v8a = $$ANDROID_OPENCV_3RDPARTY_LIBS/arm64-v8aANDROID_OPENCV_3RDPARTY_LIBS_armeabi = $$ANDROID_OPENCV_3RDPARTY_LIBS/armeabiANDROID_OPENCV_3RDPARTY_LIBS_mips = $$ANDROID_OPENCV_3RDPARTY_LIBS/mipsANDROID_OPENCV_3RDPARTY_LIBS_mips64 = $$ANDROID_OPENCV_3RDPARTY_LIBS/mips64equals(ANDROID_TARGET_ARCH, x86) {LIBS+= \-L$$ANDROID_OPENCV_LIBS_x86
-llibopencv_calib3d.a
-llibopencv_flann.a
-llibopencv_objdetect.a
-llibopencv_contrib.a
-llibopencv_video.a
-llibopencv_ml.a
-llibopencv_legacy.a
-llibopencv_highgui.a
-llibopencv_ts.a
-llibopencv_imgproc.a
-llibopencv_core.a
-llibopencv_androidcamera.a
-llibopencv_features2d.a
-L$$ANDROID_OPENCV_3RDPARTY_LIBS_x86
-lliblibjpeg.a
-lliblibpng.a
-lliblibtiff.a
-lliblibjasper.a
-llibtbb.a
}
equals(ANDROID_TARGET_ARCH, armeabi-v7a) {LIBS+= \-L$$ANDROID_OPENCV_LIBS_armeabi_v7a
-llibopencv_calib3d.a
-llibopencv_flann.a
-llibopencv_objdetect.a
-llibopencv_contrib.a
-llibopencv_video.a
-llibopencv_ml.a
-llibopencv_legacy.a
-llibopencv_highgui.a
-llibopencv_ts.a
-llibopencv_imgproc.a
-llibopencv_core.a
-llibopencv_androidcamera.a
-llibopencv_features2d.a
-L$$ANDROID_OPENCV_3RDPARTY_LIBS_armeabi_v7a
-lliblibjpeg.a
-lliblibpng.a
-lliblibtiff.a
-lliblibjasper.a
-llibtbb.a
}
equals(ANDROID_TARGET_ARCH, mips) {LIBS+= \$$ANDROID_OPENCV_LIBS_mips
-llibopencv_calib3d.a
-llibopencv_flann.a
-llibopencv_objdetect.a
-llibopencv_contrib.a
-llibopencv_video.a
-llibopencv_ml.a
-llibopencv_legacy.a
-llibopencv_highgui.a
-llibopencv_ts.a
-llibopencv_imgproc.a
-llibopencv_core.a
-llibopencv_androidcamera.a
-llibopencv_features2d.a
-L$$ANDROID_OPENCV_3RDPARTY_LIBS_mips
-lliblibjpeg.a
-lliblibpng.a
-lliblibtiff.a
-lliblibjasper.a
-llibtbb.a
}equals(ANDROID_TARGET_ARCH, mips64) {LIBS+= \-L$$ANDROID_OPENCV_LIBS_mips64
-llibopencv_calib3d.a
-llibopencv_flann.a
-llibopencv_objdetect.a
-llibopencv_contrib.a
-llibopencv_video.a
-llibopencv_ml.a
-llibopencv_legacy.a
-llibopencv_highgui.a
-llibopencv_ts.a
-llibopencv_imgproc.a
-llibopencv_core.a
-llibopencv_androidcamera.a
-llibopencv_features2d.a
-L$$ANDROID_OPENCV_3RDPARTY_LIBS_mips64
-lliblibjpeg.a
-lliblibpng.a
-lliblibtiff.a
-lliblibjasper.a
-llibtbb.a
}
equals(ANDROID_TARGET_ARCH, arm64-v8a) {LIBS+= \-L$$ANDROID_OPENCV_LIBS_arm64-v8a
-llibopencv_calib3d.a
-llibopencv_flann.a
-llibopencv_objdetect.a
-llibopencv_contrib.a
-llibopencv_video.a
-llibopencv_ml.a
-llibopencv_legacy.a
-llibopencv_highgui.a
-llibopencv_ts.a
-llibopencv_imgproc.a
-llibopencv_core.a
-llibopencv_androidcamera.a
-llibopencv_features2d.a
-L$$ANDROID_OPENCV_3RDPARTY_LIBS_arm64-v8a
-lliblibjpeg.a
-lliblibpng.a
-lliblibtiff.a
-lliblibjasper.a
-llibtbb.a
}
equals(ANDROID_TARGET_ARCH, armeabi) {LIBS+= \-L$$ANDROID_OPENCV_LIBS_armeabi
-llibopencv_calib3d.a
-llibopencv_flann.a
-llibopencv_objdetect.a
-llibopencv_contrib.a
-llibopencv_video.a
-llibopencv_ml.a
-llibopencv_legacy.a
-llibopencv_highgui.a
-llibopencv_ts.a
-llibopencv_imgproc.a
-llibopencv_core.a
-llibopencv_androidcamera.a
-llibopencv_features2d.a
-L$$ANDROID_OPENCV_3RDPARTY_LIBS_armeabi
-lliblibjpeg.a
-lliblibpng.a
-lliblibtiff.a
-lliblibjasper.a
-llibtbb.a
}
equals(ANDROID_TARGET_ARCH, x86_64) {LIBS+= \-L$$ANDROID_OPENCV_LIBS_x86_64
-llibopencv_calib3d.a
-llibopencv_flann.a
-llibopencv_objdetect.a
-llibopencv_contrib.a
-llibopencv_video.a
-llibopencv_ml.a
-llibopencv_legacy.a
-llibopencv_highgui.a
-llibopencv_ts.a
-llibopencv_imgproc.a
-llibopencv_core.a
-llibopencv_androidcamera.a
-llibopencv_features2d.a
-L$$ANDROID_OPENCV_3RDPARTY_LIBS_x86_64
-lliblibjpeg.a
-lliblibpng.a
-lliblibtiff.a
-lliblibjasper.a
-llibtbb.a
}
INCLUDEPATH += \$ANDROID_OPENCV/jni/include/opencv/
INCLUDEPATH += \$ANDROID_OPENCV/jni/include/opencv2/
INCLUDEPATH += \$$ANDROID_OPENCV/jni/include/
}
Yorumlar
Yorum Gönder