Skocz do zawartości
Komentator

Kurs Qt – #3 – pierwsza aplikacja mobilna na Androida

Pomocna odpowiedź

(edytowany)

Zachęcam każdego któremu udało się mimo wszystko na Windows do podzielenia się doświadczeniami.

Edytowano przez sp3uqw
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

@sp3uqw 

Cześć.

Ja również miałem ten problem. 

NDK r20 nie potrafiłem go rozwiązać. Będę próbował jeszcze raz. 

Sprawdzałem w Android Studio działa NDK w wersji r20 skompilowałem aplikację z natywnym kodem C++

 

Udostępnij ten post


Link to post
Share on other sites

@sebaskow  Jeśli możesz, to podczas testów zapisuj co się dzieje na jakich wersjach narzędzi, może to pomoże rozwiązać problem u innych. Przy okazji, czy pamietasz fakt instalowania Gradle przez Qt?  

Udostępnij ten post


Link to post
Share on other sites

Tak gradle sie instalowalo. Widac to tez w logach

Udostępnij ten post


Link to post
Share on other sites

Testowałem tą część artykułu na Win10 i nie miałem problemów. Autor zwraca uwagę na tą odpowiednią wersję, ale tak to przeszło bez problemów. Nawet mogę powiedzieć, że zaskoczyło mnie, że jak zmienia się przy uruchamianiu Debug > Desktop QT na Android to zadziałało bez żadnych błędów.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

VICTORIA!!!

Udało sie skompilować i uruchomić aplikacje na Androida z Qt na Win10. Problemem okazała sie wersja android sdk

Ja miałem zainstalowana wersję 29. Musiałem ją wyinstalować i zainstalować wersję 28 (niższe też nie chciały działać). Wersję tę można też wybrać w opcjach projektu: trzeba wybrać Build Android APK. Wygląda jakby Qt Creator wybierał defaultowo najwyższą zainstalowana wersję.

Na trop naprowadziła mnie dyskusja: https://amin-ahmadi.com/2015/11/29/how-to-install-qt-for-android/

Qt dla Androida jest niestety bardzo czułe na wersje bibliotek. Podejrzewam, że nie jest to kwestia Windowsa czy Linuxa, na Linuxie miałem tylko wersje androida w wersji 28 od początku i stąd zapewne szybszy sukces.

W załącznikach screeny z moich ustawień i działający przykład na symulatorze (na tablecie też ruszyło).

PS. Czas na konkretną aplikację 🙂

BuildSettings.thumb.JPG.8f49b8ba66eb2bf3ac4535d3d0d0a2cf.JPGOptions.thumb.JPG.ed124310d6d83dbda1ca1defb230953a.JPGapp.thumb.JPG.96bc20adbb77c47e3b5097d72e5488d8.JPG

settingsAndroid.JPG

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

@sp3uqw super! Dzięki, że podzieliłeś się rozwiązaniem problemu - zobaczymy czy u innych też pójdzie już z górki 😉

Udostępnij ten post


Link to post
Share on other sites

Witam wszystkich. 

Ja również rozwiązałem problem w następujący sposób:

ustawiłem w gradle.properties:  (plik ten generuje się podczas budowy)

  •  androidBuildToolsVersion=28.0.3

Moje SDK to:

  • 26.1.1

Moje NDK to:

  • 20.0.5594570

W konfiguracji qmake.conf (ścieżka: C:\Qt\Qt5.13.0\5.13.0\android_x86\mkspecs\android-clang\qmake.conf) w wierszu 

  • QMAKE_LINK    = $$QMAKE_CXX $$QMAKE_CFLAGS -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a 

dopisałem

  • QMAKE_LINK    = $$QMAKE_CXX $$QMAKE_CFLAGS -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a -nostdlib++

Następnie skorzystałem z porady:

Niestety to co chcę zrobić przy pomocy aplikacji wciąż jest problematyczne. A mianowicie skorzystać z klasy QNetworkManager i tu pojawia się problem bo Qt dla Androida potrzebuje osobne biblioteki do obsługi SSL.

Ponieważ nie mam problemu z Andorid Studio i Javą dałem sobie spokój.

Pozdrawiam

gradle.properties.PNG

Qt Android.png

@Matthew11 Gradle sam się generuje podczas budowania.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Cześć,

Mam podobne odczucia co do wykorzystania Qt dla Androida. Qt może byc fajnym rozwiazaniem jeżeli tworzymy wieloplatformowe aplikacje, jednakże jeżeli chcemy sie skupić na Androidzie, to Android Studio jest najlepszym rozwiązaniem.

Udostępnij ten post


Link to post
Share on other sites

Witam,

Mam te same problemy co wyżej opisane (cannot find -lc++).

Android Studio działa poprawnie i aplikacja łączy się z telefonem w Win i Lin.

Qt 5.12 w Win działa poprawnie z mingw.

Zainstalowałem Ubuntu 18.04 od nowa i mam problem Qt nie widzi mkfile .

Dodałem gcc i g++ zamieniłem i to samo.

Może ktoś napisze jak instalować Qt na 18.04 co dodać itd.

To samo jak dodać poprawnie JDK .

Udostępnij ten post


Link to post
Share on other sites

@akuch2  Moja konfiguracja na Ubuntu 18.04:

  • Narzędzia Qt:


910677388_Screenshotfrom2019-07-0716-27-37.thumb.png.edb7f2012a9933578eb69bd84f51ae17.png
 

  • openJDK:

Instalacja: https://openjdk.java.net/install/index.html

Standardowo ścieżka którą należy dodać w Qt powinna wygląda tak: /usr/lib/jvm/java-8-openjdk-amd64 możesz to też sprawdzić urchamiając w terminalu: "update-alternatives --list java". NDK i SDK tak samo jak na Windows u mnie konkretne wersje to SDK Version: 26.1.1, NDK Version: 19.2.5345600

1689661217_Screenshotfrom2019-07-0717-38-14.thumb.png.ca6d79256764c8f3043aeb5af1a3297d.png

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Witam ponownie,

Panowie wielkie dzięki za podpowiedzi.

Uruchomiłem zarówno na Win7 jak i wirtualce Ubuntu 18.04.

Na Win7 dodałem zmienne środowiskowe i poprawiłem plik qmqke.config i to załatwiło temat.

W ubuntu (po zainstalowaniu) dodałem:

  • sudo apt-get install openjdk-8-jdk - to poprawnie instaluje jave
  • sudo apt install build-essential - to kompilatory

Qt pobrałem z adresu   http://download.qt.io/official_releases/qt/5.12/ (na stronie Qt Download pomimo zaznaczenia opensource pobrałem triala). Pobrałem 5.12.3 i  Ndk 19c. Po zainstalowaniu i ustawieniu napis „Forbot” ukazał się na moim telefonie.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

@akuch2 super, dobra wiadomość!

Udostępnij ten post


Link to post
Share on other sites

Pierwsze podejście do Bluetooth w QT. Wcześniej pisałem "aplikacje" mobilne w Apache Cordova, w QT tylko na desktopy. Korzystałem m.in. z blogu

oraz repozytorium z przykładami z książki Qt-5-Projects.

ESP32Controller.thumb.png.271c9714e37dbd2bb44004976d1ca5d2.png
O dziwo 

QByteArray readingsLine = bt.socket->readLine();
receivedData = QString(readingsLine) + receivedData;

zniekształca otrzymywany tekst z mikrokontrolera (brakuje np pierwszej litery).

Swoją drogą jaki jest właściwy sposób przechowywania wskaźników

    QBluetoothDeviceDiscoveryAgent *agent = new QBluetoothDeviceDiscoveryAgent;
    QBluetoothSocket *socket;

tak by były dostępne z różnych klas (różnych okien aplikacji)? Static pointer w oddzielnej klasie?

Źródło mojej radosnej twórczości: ESP32Controller.zip

Udostępnij ten post


Link to post
Share on other sites

Cześć @rziomber. Metoda, którą użyłeś readLine() według dokumentacji nie ma możliwości zwracania błędów więc nie dowiesz się czy dzieje się coś złego. Spróbuj printować wszystko co przychodzi w konsoli qDebug() << socket.readAll() - jak zobaczysz że nadal brakuje danych to problem leży raczej po stronie BT. Może zdarza się tak, że część danych (pierwsze znaki) "przychodzą" wraz z jednym sygnałem readyRead() a reszta z kolejnym. Zamiast czytania pojedynczych linii, spróbuj wykorzystać readAll() i gromdzić dane w jakimś buforze np. QByteArray jako member MainWindow i dopiero w tym buforze szukaj linii. Jeśli tracisz zawsze początek danych to strzelam, że wina leży w metodzie odczytu z socketu. 

Odnośnie wskaźników to nie sądze, żeby dobrym pomysłem było eksponowanie ich poza klasę. Raczej stworzyłbym kilka metod w tej klasie, w ktorej korzystam z socketu i agenta i tylko te udostępnił poza klasą i to za ich pomocą korzystał z QBluetoothDeviceDiscoveryAgent i QBluetoothSocket jeśli byłaby taka potrzeba. Więc przechowywałbym je jedynie w klasie, która obsługuje socket i agenta i z tej klasy korzystał. Przy okazji, podczas tworzenia nowych obiektów klas Qt -> new QBluetoothDeviceDiscoveryAgent używaj new QBluetoothDeviceDiscoveryAgent(this) albo sam zadbaj o zwolnienie pamięci po tych obiektach. Więcej info tutaj: https://doc.qt.io/qt-5/objecttrees.html#overview

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...