Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Os trigêmeos x64-android, arm-neon-android e arm64-android são testados pela integração contínua do registro curado do vcpkg.
Requisitos de compilação do Android
Baixe o NDK Android
Defina a variável
ANDROID_NDK_HOMEde ambiente para sua instalação NDK do Android para configurar a cadeia de ferramentas do Android. Por exemplo:export ANDROID_NDK_HOME=/home/your-account/Android/Sdk/ndk-bundleOu:
export ANDROID_NDK_HOME=/home/your-account/Android/android-ndk-r26d
Nota: você ainda precisará instalar o g++ ou um compilador C++ que tenha como alvo o seu sistema anfitrião para quaisquer dependências do sistema anfitrião.
trigêmeos vcpkg e seu correspondente Android ABI
Existem seis ABIs Android diferentes, cada um dos quais mapeia para um triplete vcpkg. A tabela a seguir descreve o mapeamento de arquiteturas vcpkg para arquiteturas android:
| VCPKG_TARGET_TRIPLET | ANDROID_ABI | ANDROID_ARM_NEON |
|---|---|---|
| ARM64-androide | ARM64-V8A | |
| ARM Android | armeabi-v7a | DESLIGADO |
| ARM-NEON-Android | armeabi-v7a | LIGADO |
| X64-androide | x86_64 | |
| x86-androide | x86 | |
| armv6-androide | Armeabi |
Criando bibliotecas Android em um contêiner do Docker
Você pode construir bibliotecas Android, como jsoncpp em um contêiner do Ubuntu Docker.
Crie um Dockerfile com o seguinte conteúdo:
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
Crie a imagem e inicie um novo contêiner:
docker build . -t "vcpkg-android"
docker run -it "vcpkg-android" bash
No contêiner, crie /project/vcpkg.json com o seguinte conteúdo:
{
"dependencies": [
"jsoncpp"
],
"builtin-baseline": "1e68748a7c6914642ed686b2e19c3d688bca150a"
}
Finalmente, execute vcpkg install --triplet x64-android para construir jsoncpp para o Android.
Usando o SDK Vulkan
vcpkg tem um vulkan pacote que lhe find_package(Vulkan)permite . Para usá-lo você tem que fornecer a VULKAN_SDK variável de ambiente.
export VULKAN_SDK=/usr/local
./vcpkg install vulkan
O NDK já contém cabeçalhos Vulkan e binários libvulkan.so para cada uma das suas arquiteturas.
Para os expor ao vcpkg, pode-se considerar export VULKAN_SDK=... para cada instalação. Mas ao colocar set(ENV{VULKAN_SDK} ...) nos ficheiros de tripletos, você pode pular o trabalho tedioso.
Se você estiver usando o NDK 21.3.6528147 ou uma versão anterior, será como o seguinte:
# 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)
Observe que o local do sysroot foi alterado desde NDK 22. (Para obter mais informações, consulte [BUG] sysroot headers missing since r22?).
Se preferir usar a versão mais recente, verifique o BuildSystemMaintainers.md do documento NDK e, em seguida, coloque o caminho apropriado para o seu sistema.
Por exemplo, os usuários do MacOS usarão o caminho como este exemplo:
# 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)
Ao fazer isso para todos os trigêmeos Android, você pode instalar vulkan e os pacotes que o exigem. (por exemplo) 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})
Exemplo de projeto Android
A pasta docs/examples/vcpkg_android_example_cmake fornece um exemplo de trabalho, com uma biblioteca Android que consome a biblioteca jsoncpp:
Detalhes
O CMakeLists.txt simplesmente usa
find_packageetarget_link_libraryO script compile.sh permite que você selecione qualquer par correspondente de "android abi" / "vcpkg triplet" e testar a compilação
O arquivo de my_lib.cpp fictício usa a biblioteca jsoncpp
Observação
Este exemplo compila apenas uma biblioteca Android, pois a compilação de um aplicativo Android completo está além do escopo deste documento.
Teste com um exemplo: vcpkg_android.cmake
Teste usando vcpkg_android.cmake.
A pasta vcpkg_android_example_cmake_script fornece o mesmo exemplo e usa um script cmake para simplificar o uso.
Detalhes
O CMakeLists.txt principal carrega vcpkg_android.cmake se o sinalizador
VCPKG_TARGET_ANDROIDestiver definido:if (VCPKG_TARGET_ANDROID) include("cmake/vcpkg_android.cmake") endif()Importante
Coloque estas linhas antes de ligar para
project().O script compile.sh mostra que é possível compilar para Android usando uma simples invocação cmake, por exemplo:
cmake .. -DVCPKG_TARGET_ANDROID=ON -DANDROID_ABI=armeabi-v7a