Android
x64-android, arm-neon-android ve arm64-android üçlüleri vcpkg'nin seçilmiş kayıt defteri sürekli tümleştirmesi tarafından test edilir.
Android NDK'yi indirme
Android araç zincirini ayarlamak için ortam değişkenini
ANDROID_NDK_HOME
Android NDK yüklemenize ayarlayın. Örneğin:export ANDROID_NDK_HOME=/home/your-account/Android/Sdk/ndk-bundle
Veya:
export ANDROID_NDK_HOME=/home/your-account/Android/android-ndk-r26d
Not: Herhangi bir konak bağımlılıkları için ana bilgisayarınızı hedefleyen g++ veya C++ derleyicisi yüklemeniz gerekir.
Her biri bir vcpkg üçlüsünün eşlendiği altı farklı Android API'leri vardır. Aşağıdaki tabloda vcpkg mimarilerinden android mimarilerine eşleme özetlenmektedir:
VCPKG_TARGET_TRIPLET | ANDROID_ABI | ANDROID_ARM_NEON |
---|---|---|
arm64-android | arm64-v8a | |
arm-android | armeabi-v7a | KAPALI |
arm-neon-android | armeabi-v7a | AÇIK |
x64-android | x86_64 | |
x86-android | x86 | |
armv6-android | armeabi |
Ubuntu Docker kapsayıcısı gibi jsoncpp
Android kitaplıkları oluşturabilirsiniz.
Aşağıdaki içeriklerle bir Dockerfile
oluşturun:
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
Görüntüyü derleyin ve yeni bir kapsayıcı başlatın:
docker build . -t "vcpkg-android"
docker run -it "vcpkg-android" bash
Kapsayıcıda aşağıdaki içeriklerle oluşturun /project/vcpkg.json
:
{
"dependencies": [
"jsoncpp"
],
"builtin-baseline": "1e68748a7c6914642ed686b2e19c3d688bca150a"
}
Son olarak, android için derlemek jsoncpp
için komutunu çalıştırınvcpkg install --triplet x64-android
.
vcpkg, 'ı kullanmanıza olanak tanıyan bir vulkan
pakete find_package(Vulkan)
sahiptir. Bunu kullanmak için ortam değişkenini VULKAN_SDK
sağlamanız gerekir.
export VULKAN_SDK=/usr/local
./vcpkg install vulkan
NDK, mimarilerinin her biri için zaten Vulkan üst bilgileri ve libvulkan.so
ikili dosyaları içeriyor.
Bunları vcpkg'de kullanıma açmak için her yükleme için göz önünde bulundurabilirsiniz export VULKAN_SDK=...
. Ancak üçlü dosyaları yerleştirerek set(ENV{VULKAN_SDK} ...)
sıkıcı işi atlayabilirsiniz.
NDK 21.3.6528147 veya önceki bir sürümü kullanıyorsanız, aşağıdaki gibi olacaktır:
# 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)
NDK 22'den bu yana sysroot konumunun değiştiğine dikkat edin. (Daha fazla bilgi için bkz. [HATA] r22'den bu yana sysroot üst bilgileri eksik).
En son sürümü kullanmayı tercih ediyorsanız, NDK belgesinin BuildSystemMaintainers.md denetleyin ve sisteminiz için uygun yolu koyun.
Örneğin, MacOS kullanıcıları şu örneğe benzer yolu kullanır:
# 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)
Bunu tüm Android üçlüleri için yaparak ve bunu gerektiren paketleri yükleyebilirsiniz vulkan
. (örn. 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})
docs/examples/vcpkg_android_example_cmake klasörü, jsoncpp kitaplığını kullanan bir Android kitaplığı ile çalışan bir örnek sağlar:
CMakeLists.txt yalnızca ve kullanır
find_package
target_link_library
compile.sh betiği eşleşen "android abi" / "vcpkg triplet" çiftini seçmenizi ve derlemeyi test etmenizi sağlar
Sahte my_lib.cpp dosyası jsoncpp kitaplığını kullanır
Not
Tam teşekküllü bir Android Uygulamasının derlemesi bu belgenin kapsamının dışında olduğundan, bu örnek yalnızca bir Android kitaplığını derler.
vcpkg_android.cmake kullanarak test edin.
klasör vcpkg_android_example_cmake_script aynı örneği sağlar ve kullanımı basitleştirmek için bir cmake betiği kullanır.
Bayrak
VCPKG_TARGET_ANDROID
ayarlandıysa ana CMakeLists.txt vcpkg_android.cmake'yi yükler:if (VCPKG_TARGET_ANDROID) include("cmake/vcpkg_android.cmake") endif()
Önemli
çağrısı
project()
öncesinde bu satırları yerleştirin.compile.sh betiği, android için basit bir cmake çağrısı kullanarak derlemenin mümkün olduğunu gösterir, örneğin:
cmake .. -DVCPKG_TARGET_ANDROID=ON -DANDROID_ABI=armeabi-v7a
Not
Bu bölüm, vcpkg'nin herhangi bir zamanda değişebilen veya kaldırılabilen deneysel bir özelliğini kapsar.
vcpkg, Android arşivlerini (AAR dosyaları) dışarı aktarabilir. Arşiv oluşturulduktan sonra Android Studio'da yerel bağımlı olarak içeri aktarılabilir. Arşiv, Android Studio'nun prefabrik aracı kullanılarak otomatik olarak kullanılır.
Prefab hakkında daha fazla bilgi için bkz:
- Resmi prefabrik belgeler.
- Android geliştiricileri blogundan blog gönderisi: Android Studio 4.0'da Yerel Bağımlılıklar
Not
Android Studio kullanıcıları: Prefab paketleri Android Studio 4+ üzerinde desteklenir.
ndk <required>
Ortam değişkenini ANDROID_NDK_HOME
android ndk yüklemenize ayarlayın. Örneğin:
export ANDROID_NDK_HOME=/home/your-account/Android/Sdk/ndk-bundle
7zip <required on windows>
veyazip <required on linux>
maven <optional>
Android üçlüleri
Not
"Prefab" kullanmak için (aşağıya bakın), dört mimarinin tümü gereklidir. Eksik olan varsa dışarı aktarma başarısız olur.
İlk olarak, desteklenen tüm Android mimarileri için "vcpkg yükleme" komutunu çalıştırın (tümünü dışarı aktarmak zorunludur):
./vcpkg install jsoncpp:arm-android jsoncpp:arm64-android jsoncpp:x64-android jsoncpp:x86-android
Ardından, prefab'ı dışarı aktarın:
Notlar:
- bayrağı
--prefab-maven
isteğe bağlıdır. Maven yüklüyse çağır. - Bayrağı,
--prefab-debug
gradle aracılığıyla prefabrik arşivin nasıl kullanılacağına ilişkin yönergelerin çıkışını oluşturur.
./vcpkg export --triplet x64-android jsoncpp --prefab --prefab-maven --prefab-debug
Aşağıdaki gibi bir çıkış görürsünüz:
The following packages are already built and will be exported:
jsoncpp:arm64-android
Exporting package jsoncpp...
[DEBUG] Found 4 triplets
arm64-android
x64-android
x86-android
arm-android
...
... Lots of output...
...
[INFO] Scanning for projects...
Downloading from central: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom
...
... Lots of output...
...
[INFO] BUILD SUCCESS
[INFO] Total time: 2.207 s
[INFO] Finished at: 2020-05-10T14:42:28+02:00
...
... Lots of output...
...
[DEBUG] Configuration properties in Android Studio
In app/build.gradle
com.vcpkg.ndk.support:jsoncpp:1.9.2
And cmake flags
externalNativeBuild {
cmake {
arguments '-DANDROID_STL=c++_shared'
cppFlags "-std=c++17"
}
}
In gradle.properties
android.enablePrefab=true
android.enableParallelJsonGen=false
android.prefabVersion=${prefab.version}
Successfully exported jsoncpp. Checkout .../vcpkg/prefab
prefab
└── jsoncpp/
├── aar/
│ ├── AndroidManifest.xml
│ ├── META-INF/
│ │ └── LICENSE
│ └── prefab/
│ ├── modules/
│ │ └── jsoncpp/
│ │ ├── libs/
│ │ │ ├── android.arm64-v8a/
│ │ │ │ ├── abi.json
│ │ │ │ ├── include/
│ │ │ │ │ └── json/
│ │ │ │ │ ├── json.h
│ │ │ │ │ └── ....
│ │ │ │ └── libjsoncpp.so
│ │ │ ├── android.armeabi-v7a/
│ │ │ │ ├── abi.json
│ │ │ │ ├── include/
│ │ │ │ │ └── json/
│ │ │ │ │ ├── json.h
│ │ │ │ │ └── ....
│ │ │ │ └── libjsoncpp.so
│ │ │ ├── android.x86/
│ │ │ │ ├── abi.json
│ │ │ │ ├── include/
│ │ │ │ │ └── json/
│ │ │ │ │ ├── json.h
│ │ │ │ │ └── ....
│ │ │ │ └── libjsoncpp.so
│ │ │ └── android.x86_64/
│ │ │ ├── abi.json
│ │ │ ├── include/
│ │ │ │ └── json/
│ │ │ │ ├── json.h
│ │ │ │ └── ....
│ │ │ └── libjsoncpp.so
│ │ └── module.json
│ └── prefab.json
├── jsoncpp-1.9.2.aar
└── pom.xml
Buradaki örnek GitHub deposuna bakın:
vcpkg geri bildirimi
vcpkg, açık kaynak bir projedir. Geri bildirim sağlamak için bir bağlantı seçin: