2017-07-11 28 views
5

I zostały próbuje uzyskać Gstreamer pracy w Android studio, po ich tutoriale, patrz na przykład tutaj:GStreamer przykłady w Android Studio

https://gstreamer.freedesktop.org/documentation/tutorials/android/link-against-gstreamer.html

Ale w najnowszym Androidem studio nie ma JNI/Android .mk. Gdzie umieścić kod na końcu tej strony?

Czy powinien się znaleźć w CMakeLists.txt? A może powinno tam być coś innego?

Czy mogę po prostu zrobić plik Android.mk, a jeśli tak, to gdzie (ponieważ nie ma folderu jni, tylko folder cpp)? A jak mam powiedzieć studio Android gdzie znaleźć mój plik Android.mk?

Dzięki!

+0

Jeśli moja odpowiedź pomogła, proszę zaakceptuj to. Dziękujemy –

Odpowiedz

7

Wykonałem wszystkie tutoriale z witryny Gstreamer, ale było to bardzo trudne. Aby pomóc innym ludziom, udokumentowałem to. Oto samouczek dla linux (ubuntu), ale może również działać na windows, jeśli masz jakiekolwiek pytania dotyczące tego, po prostu zapytaj:) ... Łączę również projekt z gitlab gotowy do uruchomienia w Android Studio:
(samouczek 5) https://gitlab.com/eduardoprado/gstreamer-tutorial5.git
(samouczek 2) https://gitlab.com/eduardoprado/gstreamer-tutorial2.git

Korzystanie z biblioteki na Androida Studio

najlepszym sposobem, aby zrozumieć i zintegrować GStreamer do projektu robi tutoriale w tym miejscu: Niestety, masz aby znaleźć link sam, nie mam reputacji, aby opublikować bezpośredni link
Jednak te ćwiczenia są stare i zostały wykonane do pracy w Eclipse, aby pracować z systemem Android Studio jest niezbędne do:

1. Zaimportuj ćwiczeń wykorzystujących opcję Importuj Android przez studio;
2. Ustaw Android Studio na używanie NDK;
3. Ustaw zmienną w pliku "Android.mk";
4. Ustaw Gradle kompilacji tylko niektóre architektury;
5. Skopiuj klasę Gstreamer do poprawnej ścieżki.
6. Wyłącz "Instante Run" w Android Studio. (Edit wykonany 10/27/2017)
7. Fix "łącznik złoto argument" (edycja wykonana tylko 11/28/2017 użytkownicy Windows)

Każda z tych instrukcji zostanie wyjaśnione w następujących sekcjach:

1. Importowanie tutoriale wykorzystujące opcję Importuj Android przez studio

Android Studio posiada opcję importu z innego projektu IDE. Aby zaimportować projekt Gstreamer do Eclipse, wykonaj następujące kroki:
1. Pobierz wszystkie samouczki z git:;
2. W Android Studio przejdź do Plik -> Nowy projekt importu;
3. W nowej przeglądarce ekranu pliku przejdź do "gst-docs", wybierz żądany projekt (w moim przypadku tutorial 5) "android-tutorial-5" i naciśnij "OK".

Selecting Project

2. Ustaw Android Studio używać NDK

teraz, że projekt został przywieziony, konieczne jest poinformowanie Android Studio że projekt wykorzystuje ramy NDK. Dzięki temu Gradle będzie mógł importować i obsługiwać wszystkie zależności. Aby to zrobić, musimy połączyć plik Android.mk (już w folderze samouczka):
1. Kliknij prawym przyciskiem myszy "app" w lewej karcie nawigacji
2. Kliknij na "Link C++ Project with Gradle"
3. W nowym oknie:

  • Change "Budowa systemu" od "" do "CMake NDK-build"
  • Kliknij na "..." i przejdź do lokalizacji Android.mk za " /AndroidStudioProjects/android-studio-5/app/src/jni/Android.mk "
  • Hit OK

Teraz zewnętrzne pliki konstrukcyjne pojawią się w lewej karcie projektu. Pojawią się również niektóre errosy, jest to normalne i zostanie poprawione w następnych rozdziałach.

3. Ustaw zmienną wewnątrz „Android.mk” pliku

Ostatni odcinek błąd zdarza się, ponieważ „Android.mk” nie będzie znaleźć drogę do miejsca, gdzie GStreamer ekstrahowano. Ustawmy zatem zmienną GSTREAMER_ROOT_ANDROID na ścieżkę, w której został wyodrębniony GStreamer. Aby to osiągnąć:
1. Przejrzyj lewą kartę i rozwiń pozycję "Zewnętrzne formularze kompilacji";
2. Kliknij dwukrotnie plik Android.mk, aby otworzyć plik;
3. Na linii 10, pod "obejmują $ (BUILD_SHARED_LIBRARY)" typ:
- "GSTREAMER_ROOT_ANDROID: = ścieżka"
- NO cudzysłów
- ścieżka jest ścieżką (oczywiście) gdzie GStreamer został wyodrębniony.
Po tym, jak Gradle zsynchronizuje się i wystąpi błąd "*** Docelowy łuk ABI nieobsługiwany: mips. Stop" zostanie wyświetlony.

Setting GSTREAMER_ROOT_ANDROID

4. Zestaw Gradle skompilować tylko niektóre architektura

Ostatni odcinek błąd występuje, ponieważ klasa stara się budować dla różnych architektur, ale nie znaleźć plik na budowę w MIPS . Aby rozwiązać ten problem, określimy architekturę do zbudowania, wyłączając MIPS:
1. W lewej zakładce przeglądarki rozwiń Skrypty gradientu;
2. Kliknij dwukrotnie na "build.gradle (Module: app)"
3.W linii pod "moduleName" typu:
(uruchomić poradnik 5)
- abiFilters 'x 86', 'armeabi', 'armeabi-v7a', 'arm64-V8A'
(uruchomić poradnik 2)
- abiFiltery 'x86', 'armeabi-v7a', 'arm64-v8a'
(edycja 11/21: Ostatnio miałem problemy z arm64-v8a ... urządzenia z 64 bitami nie będą wyświetlać transmisji na żywo, rozwiązałem "usuwanie arm64-V8A”zbyt)

enter image description here

5. Kopia klasa Gstreamer do prawidłowego p ath.

Ostatnia wymagana konfiguracja dotyczy importu paczki w klasie głównej.

Class import error

Błąd pokazał powyżej występuje, ponieważ nie ma klasy GStreamer, aby uzyskać funkcję „.init”. Aby rozwiązać ten problem musimy skopiować GStreamer klasy z pliku gdzie ekstrahowano i przeszłości w określonej ścieżce:

  1. Przeglądaj, korzystając z menedżera plików z systemu do pliku, w którym zostały wyodrębnione GStreamer.
  2. Z wyodrębnionego pliku przejdź do lokalizacji klasy GStreamer. Znajduje się pod adresem /arm/share/gst-android/ndk-build/GStreamer.java Skopiuj GStreamer.java
  3. Wróć do Android Studio i utwórz ścieżkę importu, do której stara klasa próbuje uzyskać dostęp, zaczynając od/app/java na lewej karcie przeglądarki. Tak więc, na powyższy obrazek, musimy stworzyć org.freedesktop.gstreamer ścieżkę i wkleić plik GStreamer.java w nim:
  4. Kliknij prawym przyciskiem myszy na folderze java
  5. New-> Pakiet
  6. Rodzaj org.freedesktop .gstreamer
  7. Kliknij prawym przyciskiem myszy na org.freedesktop.gstreamer i Wklej 5. Błąd importu został rozwiązany, ale nowa klasa zawiera błędy. Aby je rozwiązać, wystarczy usunąć z skopiowanej klasy "@" i wszystko, co znajduje się pomiędzy "@".

6. Wyłącz "instante Run" z Android Studio. (edycja 27/10/2017) Ta funkcja z Android Studio może powodować problemy podczas próby uruchomienia projektu, więc dobrze jest go wyłączyć.
Wyłączenie "instante Run":

1. Na Android Studio przejdź do "Plik" -> "Ustawienia ..." (Ctrl + Alt + S)
2. "Budowanie, wykonanie, wdrożenie" -> " Natychmiastowa Run”
3. Usuń zaznaczenie pola wyboru "Włącz Natychmiastowy biec do zmiany kodu/zasobów hot swap na wdrożeniu (domyślnie włączona)"
4. kliknij "Zastosuj"

7.Naprawić "łącznikiem złoto argument" (tylko użytkownicy systemu Windows)

Podczas próby systemu Windows pojawi się błąd:
Error:error: invalid linker name in argument '-fuse-ld=gold'
go naprawić:
1. Przejdź do Android NDK Linker (GStreamer) - invalid linker name -fuse-ld=gold
2. Wykonaj Antoine Zambelli's instrukcje odpowiedzi.

+1

Jest to doskonałe odniesienie do tworzenia samouczków gstreamer w Android Studio! Szkoda, że ​​to nie było częścią oficjalnych dokumentów. W przypadku systemu Android Studio w systemie Windows musiałem zastosować [tę poprawkę] [1] dla * nieprawidłowej nazwy linkera w argumencie "-fuse-ld = gold" *. Musiałem również usunąć cel armeabi z powodu błędu przepełnienia relokacji linkera. [1]: https://stackoverflow.com/questions/44650470/android-ndk-linker-gstreamer-invalid-linker-name-fuse-ld-gold – Glenn

+0

Dziękuję za pozytywne opinie, zawsze dobrze jest wiedzieć, że krok po kroku działa, a inni ludzie odnoszą z nim sukces. Edytowałem samouczek dodając informację, że tutorial jest stworzony dla linuxa (być może błąd, który otrzymałeś, ponieważ zrobiłeś go w oknach) oraz z informacjami do usunięcia armeabi z filtrów w przypadku próbowania samouczków 2 i 3. Jeśli inni ludzie będzie miał ten sam problem, który miałeś w oknach Dodam kolejny krok zawierający link, którego użyłeś do rozwiązania twojego problemu. –

+0

@EduardoFernando - jest to ogólnie problem związany z systemem Windows - patrz "Problemy z połączeniem Windows" w [GStreamer] (https://gstreamer.freedesktop.org/documentation/installing/for-android-development.html), ale rozwiązanie to Podaj na tej stronie nie działa dla mnie (stąd moja odpowiedź na powiązane pytanie). –