Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Tryplety x64-android, arm-neon-android i arm64-android są testowane przez wyselekcjonowany rejestr vcpkg ciągłej integracji.
Wymagania dotyczące kompilacji systemu Android
Pobieranie zestawu NDK systemu Android
Ustaw zmienną środowiskową
ANDROID_NDK_HOME
na instalację zestawu Android NDK, aby skonfigurować łańcuch narzędzi systemu Android. Na przykład:export ANDROID_NDK_HOME=/home/your-account/Android/Sdk/ndk-bundle
Lub:
export ANDROID_NDK_HOME=/home/your-account/Android/android-ndk-r26d
Uwaga: nadal trzeba zainstalować język g++ lub kompilator języka C++, który jest przeznaczony dla hosta dla dowolnych zależności hosta.
trojaczki vcpkg i odpowiadające im android ABI
Istnieją sześć różnych interfejsów API systemu Android, z których każda jest mapowane na potrójność vcpkg. W poniższej tabeli przedstawiono mapowanie architektur vcpkg na architektury systemu Android:
VCPKG_TARGET_TRIPLET | ANDROID_ABI | ANDROID_ARM_NEON |
---|---|---|
arm64-android | arm64-v8a | |
arm-android | armeabi-v7a | WYŁ. |
arm-neon-android | armeabi-v7a | NA |
x64-android | x86_64 | |
x86-android | x86 | |
armv6-android | armeabi |
Tworzenie bibliotek systemu Android w kontenerze platformy Docker
Biblioteki systemu Android, takie jak jsoncpp
w kontenerze platformy Docker systemu Ubuntu.
Utwórz element Dockerfile
z następującą zawartością:
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND noninteractive
RUN \
apt-get update && \
apt-get -y upgrade
RUN \
apt-get -y --no-install-recommends install git g++ wget curl zip vim pkg-config tar cmake unzip ca-certificates
# Download Android NDK
RUN \
wget https://dl.google.com/android/repository/android-ndk-r26d-linux.zip && \
unzip android-ndk-r26d-linux.zip && \
rm -rf android-ndk-r26d-linux.zip
ENV ANDROID_NDK_HOME /android-ndk-r26d
RUN git clone https://github.com/microsoft/vcpkg
WORKDIR vcpkg
RUN ./bootstrap-vcpkg.sh
ENV PATH "/vcpkg:$PATH"
ENV VCPKG_ROOT "/vcpkg"
WORKDIR /project
Skompiluj obraz i uruchom nowy kontener:
docker build . -t "vcpkg-android"
docker run -it "vcpkg-android" bash
W kontenerze utwórz /project/vcpkg.json
z następującą zawartością:
{
"dependencies": [
"jsoncpp"
],
"builtin-baseline": "1e68748a7c6914642ed686b2e19c3d688bca150a"
}
Na koniec uruchom polecenie vcpkg install --triplet x64-android
, aby skompilować jsoncpp
dla systemu Android.
Korzystanie z zestawu Vulkan SDK
Vcpkg zawiera vulkan
pakiet , który umożliwia find_package(Vulkan)
. Aby go użyć, należy podać zmienną VULKAN_SDK
środowiskową.
export VULKAN_SDK=/usr/local
./vcpkg install vulkan
Zestaw NDK zawiera libvulkan.so
dla każdej z jego architektur.
Aby uwidocznić je w narzędziu vcpkg, można rozważyć export VULKAN_SDK=...
każdą instalację. Ale umieszczając set(ENV{VULKAN_SDK} ...)
w potrójnych plikach, można pominąć żmudną pracę.
Jeśli używasz zestawu NDK 21.3.6528147 lub starszej wersji, będzie on podobny do następującego:
# In android triplets... (e.g. arm64-android.cmake)
set(VCPKG_CMAKE_SYSTEM_NAME Android)
# ...
# If your API level is 30, libvulkan.so is at $ENV{ANDROID_NDK_HOME}/platforms/android-30/arch-arm64/usr/lib
set(ENV{VULKAN_SDK} $ENV{ANDROID_NDK_HOME}/sysroot/usr)
Zwróć uwagę, że lokalizacja folderu sysroot zmieniła się od czasu 22. (Aby uzyskać więcej informacji, zobacz [BUG] brak nagłówków sysroot od r22?).
Jeśli wolisz używać najnowszej wersji, sprawdź BuildSystemMaintainers.md dokumentu NDK, a następnie umieść odpowiednią ścieżkę dla systemu.
Na przykład użytkownicy systemu MacOS będą używać ścieżki podobnej do poniższego przykładu:
# In android triplets... (e.g. arm64-android.cmake)
set(VCPKG_CMAKE_SYSTEM_NAME Android)
# ...
# If your API level is 30, libvulkan.so is at $ENV{ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/lib/aarch64-linux-android/30
set(ENV{VULKAN_SDK} $ENV{ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr)
Dzięki temu dla wszystkich trypletów systemu Android można zainstalować vulkan
i pakiety, które tego wymagają. (np. vulkan-hpp
)
"vcpkg install vulkan-hpp:arm64-android"
user@host$ ./vcpkg install vulkan-hpp:arm64-android
Computing installation plan...
The following packages will be built and installed:
* vulkan[core]:arm64-android -> 1.1.82.1-1
vulkan-hpp[core]:arm64-android -> 2019-05-11-1
Additional packages (*) will be modified to complete this operation.
Detecting compiler hash for triplet arm64-android...
...
Starting package 1/2: vulkan:arm64-android
Building package vulkan[core]:arm64-android...
-- Using community triplet arm64-android. This triplet configuration is not guaranteed to succeed.
-- [COMMUNITY] Loading triplet configuration from: /.../vcpkg/triplets/community/arm64-android.cmake
-- Querying VULKAN_SDK Environment variable
-- Searching /.../Library/Android/sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/include/vulkan/ for vulkan.h
-- Found vulkan.h
-- Performing post-build validation
-- Performing post-build validation done
...
Building package vulkan[core]:arm64-android... done
Installing package vulkan[core]:arm64-android...
Installing package vulkan[core]:arm64-android... done
Elapsed time for package vulkan:arm64-android: 35.9 ms
Starting package 2/2: vulkan-hpp:arm64-android
Building package vulkan-hpp[core]:arm64-android...
-- Using community triplet arm64-android. This triplet configuration is not guaranteed to succeed.
-- [COMMUNITY] Loading triplet configuration from: /.../vcpkg/triplets/community/arm64-android.cmake
-- Using cached /.../vcpkg/downloads/KhronosGroup-Vulkan-Hpp-5ce8ae7fd0d9c0543d02f33cfa8a66e6a43e2150.tar.gz
-- Cleaning sources at /.../vcpkg/buildtrees/vulkan-hpp/src/e6a43e2150-4f344cd911.clean. Use --editable to skip cleaning for the packages you specify.
-- Extracting source /.../vcpkg/downloads/KhronosGroup-Vulkan-Hpp-5ce8ae7fd0d9c0543d02f33cfa8a66e6a43e2150.tar.gz
-- Using source at /.../vcpkg/buildtrees/vulkan-hpp/src/e6a43e2150-4f344cd911.clean
-- Performing post-build validation
-- Performing post-build validation done
...
Building package vulkan-hpp[core]:arm64-android... done
Installing package vulkan-hpp[core]:arm64-android...
Installing package vulkan-hpp[core]:arm64-android... done
Elapsed time for package vulkan-hpp:arm64-android: 144.5 ms
Total elapsed time: 1.013 s
The package vulkan-hpp:arm64-android is header only and can be used from CMake via:
find_path(VULKAN_HPP_INCLUDE_DIRS "vulkan/vulkan.hpp")
target_include_directories(main PRIVATE ${VULKAN_HPP_INCLUDE_DIRS})
Przykładowy projekt systemu Android
Dokument/przykłady/vcpkg_android_example_cmake folderu zawiera przykład pracy z biblioteką systemu Android, która korzysta z biblioteki jsoncpp:
Szczegóły
CMakeLists.txt po prostu używa i
find_package
target_link_library
Skrypt compile.sh umożliwia wybranie dowolnej pasującej pary "android abi" / "vcpkg triplet" i przetestowania kompilacji
Fikcyjny plik my_lib.cpp używa biblioteki jsoncpp
Uwaga
W tym przykładzie kompilowana jest tylko biblioteka systemu Android, ponieważ kompilacja pełnej aplikacji systemu Android wykracza poza zakres tego dokumentu.
Przetestuj na przykładzie: vcpkg_android.cmake
Przetestuj przy użyciu narzędzia vcpkg_android.cmake.
Folder vcpkg_android_example_cmake_script zawiera ten sam przykład i używa skryptu cmake w celu uproszczenia użycia.
Szczegóły
Główny CMakeLists.txt ładuje vcpkg_android.cmake, jeśli flaga
VCPKG_TARGET_ANDROID
jest ustawiona:if (VCPKG_TARGET_ANDROID) include("cmake/vcpkg_android.cmake") endif()
Ważne
Umieść te wiersze przed wywołaniem metody
project()
.Skrypt compile.sh pokazuje, że można go skompilować dla systemu Android przy użyciu prostego wywołania cmake, na przykład:
cmake .. -DVCPKG_TARGET_ANDROID=ON -DANDROID_ABI=armeabi-v7a