Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Triplet x64-android, arm-neon-android, dan arm64-android diuji oleh integrasi berkelanjutan registri yang dikumpulkan vcpkg.
Persyaratan build Android
Mengunduh Android NDK
Atur variabel lingkungan
ANDROID_NDK_HOMEke instalasi Android NDK Anda untuk mengonfigurasi toolchain Android. Contohnya:export ANDROID_NDK_HOME=/home/your-account/Android/Sdk/ndk-bundleAtau:
export ANDROID_NDK_HOME=/home/your-account/Android/android-ndk-r26d
Catatan: Anda masih perlu menginstal pengkompilasi g++ atau C++ yang menargetkan host Anda untuk dependensi host apa pun.
kembar tiga vcpkg dan Android ABI yang sesuai
Ada enam ABI Android yang berbeda, yang masing-masing memetakan ke triplet vcpkg. Tabel berikut menguraikan pemetaan dari arsitektur vcpkg ke arsitektur android:
| VCPKG_TARGET_TRIPLET | ANDROID_ABI | ANDROID_ARM_NEON |
|---|---|---|
| arm64-android | arm64-v8a | |
| arm-android | armeabi-v7a | TIDAK AKTIF |
| arm-neon-android | armeabi-v7a | AKTIF |
| x64-android | x86_64 | |
| x86-android | x86 | |
| armv6-android | armeabi |
Membangun pustaka Android dalam kontainer Docker
Anda dapat membuat pustaka Android, seperti jsoncpp dalam kontainer Docker Ubuntu.
Buat Dockerfile dengan konten berikut:
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
Buat gambar dan luncurkan kontainer baru:
docker build . -t "vcpkg-android"
docker run -it "vcpkg-android" bash
Dalam kontainer, buat /project/vcpkg.json dengan konten berikut:
{
"dependencies": [
"jsoncpp"
],
"builtin-baseline": "1e68748a7c6914642ed686b2e19c3d688bca150a"
}
Terakhir, jalankan vcpkg install --triplet x64-android untuk membuat jsoncpp untuk android.
Menggunakan Vulkan SDK
vcpkg memiliki vulkan paket yang memungkinkan Anda untuk find_package(Vulkan). Untuk menggunakannya, Anda harus memberikan VULKAN_SDK variabel lingkungan.
export VULKAN_SDK=/usr/local
./vcpkg install vulkan
NDK sudah berisi header Vulkan dan libvulkan.so biner untuk setiap arsitekturnya.
Untuk mengeksposnya ke vcpkg, Anda dapat mempertimbangkan export VULKAN_SDK=... untuk setiap penginstalan. Tetapi dengan menempatkan set(ENV{VULKAN_SDK} ...) dalam file triplet, Anda dapat melewati pekerjaan yang melelahkan.
Jika Anda menggunakan NDK 21.3.6528147 atau versi yang lebih lama, itu akan seperti berikut ini:
# 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)
Perhatikan bahwa lokasi sysroot telah berubah sejak NDK 22. (Untuk informasi selengkapnya, lihat [BUG] header sysroot yang hilang sejak r22?).
Jika Anda lebih suka menggunakan versi terbaru, periksa BuildSystemMaintainers.md dokumen NDK lalu letakkan jalur yang sesuai untuk sistem Anda.
Misalnya, pengguna MacOS akan menggunakan jalur seperti contoh ini:
# 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)
Dengan cara ini, Anda dapat menginstal vulkan dan paket yang memerlukannya untuk semua triplet Android. (misalnya 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})
Contoh Proyek Android
Folder docs/examples/vcpkg_android_example_cmake menyediakan contoh kerja, dengan pustaka Android yang menggunakan pustaka jsoncpp:
Detail lebih lanjut
CMakeLists.txt hanya menggunakan
find_packagedantarget_link_librarySkrip compile.sh memungkinkan Anda memilih pasangan yang cocok dari "android abi" / "vcpkg triplet" dan untuk menguji kompilasi
File dummy my_lib.cpp menggunakan pustaka jsoncpp
Nota
Contoh ini hanya mengkompilasi pustaka Android, karena kompilasi Aplikasi Android lengkap berada di luar cakupan dokumen ini.
Uji pada contoh: vcpkg_android.cmake
Uji menggunakan vcpkg_android.cmake.
Folder vcpkg_android_example_cmake_script memberikan contoh yang sama, dan menggunakan skrip cmake untuk menyederhanakan penggunaan.
Detail lebih lanjut
CMakeLists.txt utama memuat vcpkg_android.cmake jika bendera
VCPKG_TARGET_ANDROIDdiatur:if (VCPKG_TARGET_ANDROID) include("cmake/vcpkg_android.cmake") endif()Penting
Tempatkan baris ini sebelum memanggil
project().Skrip compile.sh menunjukkan bahwa kemudian dimungkinkan untuk mengkompilasi android menggunakan pemanggilan cmake sederhana, misalnya:
cmake .. -DVCPKG_TARGET_ANDROID=ON -DANDROID_ABI=armeabi-v7a