Skocz do zawartości

Kurs Qt – #3 – pierwsza aplikacja mobilna na Androida


Komentator

Pomocna odpowiedź

55 minut temu, Matthew11 napisał:

Z informacji, które podałeś strzelam, że chodzi o brak #include <QBluetoothDeviceDiscoveryAgent> w pliku mainwindow.h. Jeśli masz dołączoną klasę, a nadal masz taki błąd to może w pliku .pro brakuje QT += bluetooth.

No właśnie tu jest chyba pies pogrzebany, ale nie wiem jak dołączyć tą nową klasę do QT i skąd wziąć pliki, bo pod linkiem znalazłem tylko opis klasy... Problem zapewne jest trywialny, ale jako laik w temacie przerósł mnie jak narazie...

Link do komentarza
Share on other sites

5 godzin temu, koza_yo napisał:

No właśnie tu jest chyba pies pogrzebany, ale nie wiem jak dołączyć tą nową klasę do QT i skąd wziąć pliki, bo pod linkiem znalazłem tylko opis klasy... Problem zapewne jest trywialny, ale jako laik w temacie przerósł mnie jak narazie...

Ok, spokojnie. Generalnie Qt składa się z wielu różnych modułów, np. QtCore, QtBluetooth, QtNetwork itp. I teraz w ramach każdego modułu masz X różnych klas, np. w ramach modułu QtBluetooth wspomnianą QBluetoothDeviceDiscoveryAgent. I teraz jak wiesz ze chcesz skorzystać w takiej klasy musisz najpierw poinformować system budowania żeby dołączył dany moduł, robisz to właśnie w pliku o nazwie projektu z rozszerzeniem .pro - (nazwaProjektu.pro). Jak otworzysz ten plik to masz np.:

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

I teraz chcąc skorzystać z klasy QBluetoothDeviceDiscoveryAgent to w dokumentacji tej klasy masz taką tabelkę gdzie znajdziesz (chodzi o wiersz z qmake)

Header:	#include <QBluetoothDeviceDiscoveryAgent>
qmake:	QT += bluetooth
Since:	Qt 5.2
Inherits:	QObject

Czyli wiesz, że musisz w pliku .pro dopisać:

QT       += core gui bluetooth

I teraz jeśli chodzi o pliki tej klasy, to nie musisz ich brać znikąd, bo one będą już w postaci skompilowanych bibliotek dostarczone wraz z zainstalowaniem Qt, więc jedyne co robisz, to w pliku gdzie chcesz skorzystać z tej klasy np. w mainwindow.h, dodajesz:

#include <QBluetoothDeviceDiscoveryAgent>

 

Dokładnie tak samo było to pokazane w 4 części. Dla szybkiego testu, pobierz gotowy kod z 4 części i spróbuj go zbudować. Jeśli nadal będziesz miał problemy, to podaj jak najwięcej informacji i będziemy szukać.

Edytowano przez Matthew11
  • Lubię! 2
Link do komentarza
Share on other sites

8 minut temu, Matthew11 napisał:

O

Dokładnie tak samo było to pokazane w 4 części. Dla szybkiego testu, pobierz gotowy kod z 4 części i spróbuj go zbudować. Jeśli nadal będziesz miał problemy, to podaj jak najwięcej informacji i będziemy szukać.

No niestety ostatecznie pobrałem ten gotowy kod i z niego wyskoczyły mi te błędy (było ich mniej niż moim kodziem, ale nadal niestety 🙂 ), dlatego myślałem ze trzeba uzupełnić biblioteki ale nie wiedziałem jak...

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

1 godzinę temu, Treker napisał:

Podpowiedz może co ostatecznie pomogło - na pewno przyda się komuś w przyszłości 🙂

Wyręczę @koza_yo, problem był bardzo prosty, ale zdradliwy. Mianowicie @koza_yo stworzył swój projekt powiedzmy o nazwie X, do którego przekopiował zawartość plików z projektu dołączonego do artykułu czyli projektu o nazwie Qt_Forbot_BluetoothCommunication. Przekopiował również zawartość pliku .pro, w którym znajdowała się linijka "TARGET = Qt_Forbot_BluetoothCommunication". Czyli w projekcie X chciał zbudować program dla projektu Qt_Forbot_BluetoothCommunication przez co system budowania rzucał błędami, prawdopodobnie żeby zadziałało, należałoby zmienić linię (tą z TARGET) na "TARGET = X". Aby uniknąć takich błędów, poprawnym podejściem byłoby skopiowanie tylko zawartości plików mainwindow.h/cpp pod warunkiem, że nazywałyby się tak samo w obu projektach, a plik .pro zostawić nietknięty

Natomiast tworząc nowy projekt korzystając z nowszych wersji Qt (nie wiem konkretnie od której, ale w moim przypadku przy wersji 5.12.6) w pliku pro nie znajdziemy już definicji TARGET,  jest ona prawdopodobnie zapożyczana z nazwy pliku .pro.

Edytowano przez Matthew11
  • Lubię! 1
Link do komentarza
Share on other sites

Witam wszystkich. Niestety też mam problem. Nie jestem pewien, czy jest on analogiczny do tych, które były tu poruszane - jeśli tak z góry przepraszam (nie mam zbyt dużego doświadczenia).
Przejdę zatem do sedna. Próbuje wgrać aplikacje testową na swojego smartfona. Podążałem krok po kroku zgodnie z instrukcjami zawartymi w artykule i wykonywałem je na tyle starannie, że np. nie wykrywało u mnie niekompatybilnych urządzeń, podczas próby wgrywania aplikacji. Niestety ciągle napotykam na błędy, które są ukazane na zdjęciu.

Może ktoś ma pomysł co mogę zrobić, by móc przejść dalej? Bardzo proszę o pomoc.

Pozdrawiam!

problem_1.thumb.jpg.3ccc1ae688e0eee335647a738ac69422.jpg

Link do komentarza
Share on other sites

Cześć @KrisU12 u Ciebie problem nie polega na trudności wgrania aplikacji na telefon, tylko znacznie wcześniej - na próbie jej zbudowania na system Android. Błędy, które pokazałeś to błędy (jeśli dobrze to interpretuje) które wyrzuca kompilator. Co jasno wskazuje na to, że brakuje plików nagłówkowych, które powinny znaleźć się w NDK (inna osoba na forum Qt ma taki sam problem - link) - brakuje type_traits i memory. Wygląda na to że masz uszkodzone lub niekompletne pliki NDK. W linku - tamta osoba skopiowała folder z NDK zanim ten został do końca wypakowany z archiwum.

W tym linku z takim samym problemem, polecają sprawdzić czy masz najnowsze NDK i SDK i w opcjach projektu ustawić wyższy poziom API niż 16. Znajdziesz to odpowiednio długo grzebiąc w zakładce "Projects" na lewym pasku, gdzieś w opcjach dotyczących Build (raczej w tej zakładce) i Run - nie mam jak tego sprawdzić teraz.

Kilka rzeczy do sprawdzenia wcześniej:

  • czy na Twój komputer aplikacja buduje się bez problemów? jeśli tak to:
  • zmień urządzenie na telefon i nie wgrywaj od razu aplikacji na telefon (przycisk run), tylko zwykłe budowanie (młotek) - powinieneś mieć ten sam błąd co pokazujesz.

Gdy nie znajdziesz odpowiedzi szukając w google "qt `type_traits' file not found" lub nie pomogą zmiany wersji NDK lub SDK, to dobrym pomysłem, może być przejście na nieco starszą wersję np. 5.12.x (obecnie chyba 5.12.7 jest najnowsza). Bez dostępu do Twojego komputera lub takiego samego problemu u mnie, więcej nie jestem w stanie pomóc. 

Edytowano przez Matthew11
  • Lubię! 1
Link do komentarza
Share on other sites

Dnia 1.04.2020 o 09:56, Matthew11 napisał:

 

@Matthew11  Serdeczne dzięki za wyczerpujący post. Problem został rozwiązany. Próbowałem dobrać różne wersje NDK, nie zmieniając SDK i w ostateczności wszystko zaczęło prawidłowo działać przy konfiguracji takiej jak: SDK Version: 26.1.1, NDK Version: 20.1.5948944.

Tak, czy inaczej dzięki wielkie za zredagowanie tego kursu.

Pozdrawiam!

 

 

Link do komentarza
Share on other sites

Nowa wersja QtCreatora - 4.12 - niesie sporo usprawnień w przypadku Androida:

Cytat

The whole Android setup got a big update in this version of Qt Creator. You have the option to automatically download and install the required Android tools. Multiple NDKs can be registered, and the correct one is chosen for the project's Qt version. We added support for Android 11 with API level 30, and fixed issues with the latest SDK. The issue that the ABI selection in build configurations did not persist is fixed now.

Sporo problemów z konfiguracją, które zostały tutaj opisane może zostało już rozwiązanych wraz z nową aktualizacją.

  • Lubię! 2
Link do komentarza
Share on other sites

(edytowany)

Od wersji Qt 5.14 lub wyższej mamy nieco inaczej zorganizowaną obsługę różnych ABI dla naszych urządzeń. Wcześniej mieliśmy kilka kitów dla każdego ABI, teraz zostało to zunifikowane i dzięki temu można budować program jednocześnie na kilka architektur.

Jednak pracując z konkretnym urządzeniem musimy jakoś wybrać docelowe ABI. Wcześniej wybieraliśmy docelową architekturę za pomocą przycisku:

302431367_Screenshotfrom2020-05-0114-39-23.png.01fc68b34d4eb923aaac600be9b21a4b.png

Teraz musimy wejść w ustawienia projektu:

2105718125_Screenshotfrom2020-05-0114-40-43.thumb.png.a144a7ee33ac879ef4d0e9563d874333.png

Następnie pod nagłówkiem Build Steps, wybrać interesujące nas ABI:

1082011692_Screenshotfrom2020-05-0114-41-48.thumb.png.3b0d82f35b511afb5cc58e30dfaaae96.png

Mogę posłużyć się pomocą QtCreator'a, który po kliknięciu przycisku Deploy pokaże mi jakie ABI obsługuje moje urządzenie:

2064985866_Screenshotfrom2020-05-0114-41-21.thumb.png.44ebe184c329744fa0ba515b59c4010b.png

W moim przypadku:

  • x86,
  • armeabi-v7a
  • armeabi

I takie wybrałem w ustawieniach projektu.

 

Jeśli nie ustawisz odpowiedniego ABI, Twoja aplikacja nie uruchomi się na Twoim urządzeniu.

Więcej informacji

Edytowano przez Matthew11
  • Lubię! 1
Link do komentarza
Share on other sites

Po zainstalowaniu dużej ilości GB i odinstalowaniu udało się zainstalować

Q5.14.2 z android-ndk-r20b oraz jdk1.8.0_191 oraz Android for armeabi-v7a,arm64-v8a,x86,x86_64 (Clang Qt 5.14.2 for Android) udało się uruchomić aplikację.

  • Lubię! 2
Link do komentarza
Share on other sites

Witam, mam problem w Qt Creator 4.13.2. Mam wersje: SDK Version: 3.0, NDK Version: 21.1.6352462 i podczas budowania występuje u mnie problem:

"You need to set the ANDROID_NDK_ROOT environment variable to point to your Android NDK."

Rozumiem że chodzi o coś ze zmiennymi środowiskowymi w systemie ale nie rozumiem. Jestem zielony w temacie więc proszę o wyrozumiałość 🙂 

Link do komentarza
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!

Anonim
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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.