Skip to content
  • English
  • Polski
Digital Karabela
Digital Karabela
Primary Navigation Menu
Menu
  • Strona główna
  • Produkty
  • DevBlog
  • Castle Engine
  • Kurs bash
  • O firmie

Jak skompilować bibliotekę OpenAL z Oboe dla systemu Android

Podczas testowania mojej gry Bricks Color Pick na nowym urządzeniu z Androidem 13, zauważyłem dziwny problem z dźwiękiem. Zwiększenie rozmiaru bufora danych nie pomogło. Rozwiązaniem okazało się przekompilowanie biblioteki OpenAL z użyciem biblioteki Oboe. OpenAL jest domyślnym backendem obsługi dźwięku w Castle Game Engine.

Pobranie źródeł

Do wykonania kompilacji potrzebujemy dwa repozytoria:

  • openal-soft – https://github.com/kcat/openal-soft
  • oboe – https://github.com/google/oboe

Na początek tworzymy folder na źródła:

mkdir openal

Następnie pobieramy openal-soft:

git clone https://github.com/kcat/openal-soft.git

Po pobraniu źródeł wybieramy ostatni stabilny tag np. 1.23.1

cd openal-soft
git checkout 1.23.1
cd ..

Następnie pobieramy oboe – bez tego frameworka dźwięk na androidzie nie działa za dobrze.

git clone https://github.com/google/oboe.git

Po pobraniu ustawiamy stabilny tag np.: 1.7.0.

cd oboe
git checkout 1.7.0
cd ..

Źródła mamy przygotowane czas ustawić środowisko.

Zmienne środowiskowe

Musimy mieć zainstalowane NDK i ustawiamy sobie pomocniczą zmienną środowiskową NDK_ROOT. Ja będę używał wersji 22.1.7171670. Ścieżka na twoim systemie będzie oczywiście inna:

export NDK_ROOT=/home/and3md/android/sdk/ndk/22.1.7171670

Przygotowanie do kompilacji

Będziemy musieli wykonać kompilacje dla wszystkich obsługiwanych architektur najważniejsze to:

  • armeabi-v7a
  • arm64-v8a
  • x86
  • x86_64

Każda z architektur oraz każda wersja NDK może wymagać/obsługiwać innego minimalnego poziomu API, np. NDK 22 w moim przypadku ma dla:

  • armeabi-v7a – 16
  • arm64-v8a-22

Poziom API będziemy ustawiać za pomocą ANDROID_PLATFORM, a samą architekturę za pomocą ANDROID_ABI np.:

-DANDROID_ABI=armeabi-v7a -DANDROID_PLATFORM=16

Wybór STL

Jeżeli mamy tylko jedną bibliotekę w projekcie możemy użyć c++_static. W przypadku gdy używamy więcej bibliotek zalecane jest c++_shared. Więcej informacji: https://developer.android.com/ndk/guides/cpp-support#static_runtimes

Folder źródeł oboe

Przekazujemy w parametrze OBOE_SOURCE:

-DOBOE_SOURCE=/home/and3md/fpc/openal/oboe

Konfiguracja cmake i kompilacja

Wchodzimy do folderu openal-soft/build.

Dla architektury armeabi-v7a

Uruchamiamy polecenie cmake aby wygenerować makefile:

cmake .. -DANDROID_STL=c++_shared -DCMAKE_TOOLCHAIN_FILE=${NDK_ROOT}/build/cmake/android.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI=armeabi-v7a -DOBOE_SOURCE=../oboe -DANDROID_PLATFORM=16

uruchamiamy kompilację:

make

Kopiujemy wynikowy plik libopenal.so, ponieważ źródła wykorzystamy do kompilacji dla następnej architektury.

Dla architektury arm64-v8a

Czyścimy źródła

make clean

Uruchamiamy polecenie cmake aby wygenerować makefile

cmake .. -DANDROID_STL=c++_shared -DCMAKE_TOOLCHAIN_FILE=${NDK_ROOT}/build/cmake/android.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI=arm64-v8a -DOBOE_SOURCE=../oboe -DANDROID_PLATFORM=22

uruchamiamy kompilację:

make

Kopiujemy wynikowy plik libopenal.so.

Dla architektury x86

Czyścimy źródła:

make clean

Uruchamiamy polecenie cmake aby wygenerować makefile

cmake .. -DANDROID_STL=c++_shared -DCMAKE_TOOLCHAIN_FILE=${NDK_ROOT}/build/cmake/android.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI=x86 -DOBOE_SOURCE=../oboe -DANDROID_PLATFORM=16

uruchamiamy kompilację:

make

Kopiujemy wynikowy plik libopenal.so.

Dla architektury x86_64:

Czyścimy źródła

make clean

Uruchamiamy polecenie cmake aby wygenerować makefile

cmake .. -DANDROID_STL=c++_shared -DCMAKE_TOOLCHAIN_FILE=${NDK_ROOT}/build/cmake/android.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI=x86_64 -DOBOE_SOURCE=../oboe -DANDROID_PLATFORM=16

uruchamiamy kompilację:

make

Kopiujemy wynikowy plik libopenal.so.

Zmniejszenie rozmiaru plików

Wygenerowane pliki mogą być bardzo duże (około 15 MB. Możemy zmniejszyć ich wielkość uruchamiając polecenie strip z odpowiedniej architektury:

${NDK_ROOT}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/arm-linux-androideabi/bin/strip libopenal.so

${NDK_ROOT}/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/aarch64-linux-android/bin/strip libopenal.so

${NDK_ROOT}/toolchains/x86-4.9/prebuilt/linux-x86_64/i686-linux-android/bin/strip libopenal.so

${NDK_ROOT}/toolchains/x86_64-4.9/prebuilt/linux-x86_64/x86_64-linux-android/bin/strip libopenal.so

I to wszystko 🙂

2023-07-01
1 lipca, 2023
W Castle Engine (pl), DevBlog, Programowanie
Tagi: android, castleengine, gamedev, mobiledev
Poprzedni wpis: Lazarus 2.0.12 wydany

Wypróbuj moją nową grę! Zupełnie za darmo!

Logo Bricks Color Pick

Bricks Color Pick to zupełnie nowe podejscie do klasycznego arkanoida! Brak dolnej belki! Zasady gry są bardzo proste: Twoim zadaniem jest zmienianie koloru piłki na kolor cegły, z którą piłka się zderzy. Gdy kolor będzie taki sam cegła zostanie zniszczona, w przeciwnym wypadku stracisz życie.

Pobierz z Google Play

Zrzut ekranu pozimu 37/40 5-6 kolorów

Dodatkowo można zmienić kierunek ruchu piłki, przez co nie musimy czekać wieczność aż trafi w ostatni blok.

QR Code Google Play Bricks Color Pick

Zrzut ekranu poziom 62/80 (Tryb relaks)

Ostatnie wpisy

  • Jak skompilować bibliotekę OpenAL z Oboe dla systemu Android
  • Lazarus 2.0.12 wydany
  • Jak naprawić zamrażanie GUI LMMS w systemie Linux?
  • Jak zaktualizować wine do wersji 5.0.0 w Linux Mint 19 / Ubuntu 18
  • Agile Commander 1.2.3 wydany!

Kategorie

  • DevBlog
  • Linux
    • Kurs bash
    • Narzędzie WoeUSB
  • Programowanie
    • Język D (dlang)
      • Kontrolki DlangUI
    • Język Object Pascal
      • Lazarus (pl)
    • Narzędzie make
  • Promocja
  • Tworzenie gier
    • Castle Engine (pl)
    • Godot
  • Windows 10
    • Narzędzie WoeUSB

Produkty:
Agile Commander
Bricks Color Pick

 

 

Digital Karabela – Andrzej Kilijański
76-015 Wyszebórz 32, Poland
https://digitalkarabela.com
Kontakt
Polityka prywatności