Yerel kitaplık projenizi Gradle derleme bağımlılığı olarak eklemek için: kullanarak Gradle'a CMake veya ndk-build komut dosyası yolunu girin. Zaman Gradle, CMake veya ndk-build ve paylaşılan paketler kitaplığını kullanımınıza sunulur. Gradle, hangi dosyaların bunları Android Studio projenize çekin. Böylece, Proje penceresi. Yerel reklamınız için derleme komut dosyanız yoksa bir proje başlatma belgesi Devam etmeden önce CMake komut dosyasını kullanın.
Android projenizdeki her modül yalnızca bir CMake veya ndk-build'a bağlanabilir
komut dosyası olarak da kullanabilirsiniz. Örneğin,
birden fazla CMake projesi varsa bir CMakeLists.txt
dosyası kullanmanız gerekir
üst düzey CMake derleme komut dosyanız olarak (daha sonra Gradle'ı bağlarsınız) ve
diğer CMake projelerini şu şekilde ekleyin:
bağımlılıklarını görebilirsiniz. Benzer şekilde, ndk-build kullanıyorsanız
diğer Makefile'ları üst düzeyinize ekleyebilir.
Android.mk
komut dosyası dosyası.
Gradle'ı yerel bir projeye bağladığınızda Android Studio, Kaynak dosyalarınızı ve yerel kitaplıklarınızı gösteren Proje bölmesi cpp grubunda, harici derleme komut dosyalarınızda ise Harici Derleme Dosyaları grubu.
Not: Gradle yapılandırmasında değişiklik yaparken Projeyi Senkronize Et'i tıklayarak değişikliklerinizi uygulayın. tıklayın. Ayrıca, CMake veya ndk-build ayarlarınızda değişiklik yaparken Gradle'a bağladıktan sonra bu dosyayı Oluştur > Bağlı C++ Hesabını Yenile Projeler'i tıklayın.
Android Studio kullanıcı arayüzünü kullanma
Gradle'ı harici bir CMake veya ndk-build projesine bağlamak için Android Studio kullanıcı arayüzü:
- IDE'nin sol tarafından Proje bölmesini açın ve Android görünümünü seçin.
- Yerel kitaplığınıza bağlamak istediğiniz modülü sağ tıklayın, örneğin app modülünü bağlayıp C++ Projesini Bağla'yı seçin. kolayca ayarlayabilirsiniz. Şuna benzer bir iletişim kutusu göreceksiniz: Şekil 4'te gösterilmiştir.
- Açılır menüden Yap'ı veya
ndk-build.
- CMake'i seçerseniz öğesinin yanındaki alanı kullanın
CMakeLists.txt
komut dosyasını belirtmek için Proje Yolu dosyası oluşturun. - ndk-build'i seçerseniz yanındaki alanı kullanın
Proje Yolu:
Android.mk
harici ndk-build projenize ekleyin. Android Studio,Application.mk
dosyanızla aynı dizinde bulunuyorsa,Android.mk
dosyası.
- CMake'i seçerseniz öğesinin yanındaki alanı kullanın
- Tamam'ı tıklayın.
Gradle'ı manuel olarak yapılandırma
Gradle'ı yerel kitaplığınıza bağlanacak şekilde manuel olarak yapılandırmak için
Modül düzeyinize externalNativeBuild
blok
build.gradle
dosyasını seçin ve dosyayı
cmake
veya
ndkBuild
engelleme:
Eski
android { ... defaultConfig {...} buildTypes {...} // Encapsulates your external native build configurations. externalNativeBuild { // Encapsulates your CMake build configurations. cmake { // Provides a relative path to your CMake build script. path "CMakeLists.txt" } } }
Kotlin
android { ... defaultConfig {...} buildTypes {...} // Encapsulates your external native build configurations. externalNativeBuild { // Encapsulates your CMake build configurations. cmake { // Provides a relative path to your CMake build script. path = file("CMakeLists.txt") } } }
Not: Gradle'ı mevcut bir ndk-build'e bağlamak istiyorsanız
kullanmak için
yerine ndkBuild
bloğu
cmake
engelle ve Android.mk
dosyanız için göreli bir yol sağlayın. Gradle
Application.mk
dosyasını da içerirse
Android.mk
dosyanızla aynı dizinde bulunur.
İsteğe bağlı yapılandırmaları belirtin
CMake veya ndk-build için isteğe bağlı argümanlar ve işaretler belirtebilirsiniz:
başka bir yapılandırılıyor
externalNativeBuild
blok içinde
Modül düzeyinizin defaultConfig
bloğu
build.gradle
dosya. Şuradaki diğer mülklere benzer:
defaultConfig
engelleme, her biri için bu özellikleri geçersiz kılabilirsiniz.
ürün çeşidini ekleyin.
Örneğin, CMake veya ndk-build projeniz birden fazla yerel kod tanımlıyorsa
kitaplıkları ve yürütülebilir dosyaları bulmak için
Bunların bir alt kümesini oluşturmak ve paketlemek için kullanılan targets
özelliği
eserleri ortaya çıkarır. Aşağıdaki kod örneğinde
yapılandırabileceğiniz özelliklerden bazıları şunlardır:
Eski
android { ... defaultConfig { ... // This block is different from the one you use to link Gradle // to your CMake or ndk-build script. externalNativeBuild { // For ndk-build, instead use the ndkBuild block. cmake { // Passes optional arguments to CMake. arguments "-DANDROID_ARM_NEON=TRUE", "-DANDROID_TOOLCHAIN=clang" // Sets a flag to enable format macro constants for the C compiler. cFlags "-D__STDC_FORMAT_MACROS" // Sets optional flags for the C++ compiler. cppFlags "-fexceptions", "-frtti" } } } buildTypes {...} productFlavors { ... demo { ... externalNativeBuild { cmake { ... // Specifies which native libraries or executables to build and package // for this product flavor. The following tells Gradle to build only the // "native-lib-demo" and "my-executible-demo" outputs from the linked // CMake project. If you don't configure this property, Gradle builds all // executables and shared object libraries that you define in your CMake // (or ndk-build) project. However, by default, Gradle packages only the // shared libraries in your app. targets "native-lib-demo", // You need to specify this executable and its sources in your CMakeLists.txt // using the add_executable() command. However, building executables from your // native sources is optional, and building native libraries to package into // your app satisfies most project requirements. "my-executible-demo" } } } paid { ... externalNativeBuild { cmake { ... targets "native-lib-paid", "my-executible-paid" } } } } // Use this block to link Gradle to your CMake or ndk-build script. externalNativeBuild { cmake {...} // or ndkBuild {...} } }
Kotlin
android { ... defaultConfig { ... // This block is different from the one you use to link Gradle // to your CMake or ndk-build script. externalNativeBuild { // For ndk-build, instead use the ndkBuild block. cmake { // Passes optional arguments to CMake. arguments += listOf("-DANDROID_ARM_NEON=TRUE", "-DANDROID_TOOLCHAIN=clang") // Sets a flag to enable format macro constants for the C compiler. cFlags += listOf("-D__STDC_FORMAT_MACROS") // Sets optional flags for the C++ compiler. cppFlags += listOf("-fexceptions", "-frtti") } } } buildTypes {...} productFlavors { ... create("demo") { ... externalNativeBuild { cmake { ... // Specifies which native libraries or executables to build and package // for this product flavor. The following tells Gradle to build only the // "native-lib-demo" and "my-executible-demo" outputs from the linked // CMake project. If you don't configure this property, Gradle builds all // executables and shared object libraries that you define in your CMake // (or ndk-build) project. However, by default, Gradle packages only the // shared libraries in your app. targets += listOf("native-lib-demo", // You need to specify this executable and its sources in your CMakeLists.txt // using the add_executable() command. However, building executables from your // native sources is optional, and building native libraries to package into // your app satisfies most project requirements. "my-executible-demo") } } } create("paid") { ... externalNativeBuild { cmake { ... targets += listOf("native-lib-paid", "my-executible-paid") } } } } // Use this block to link Gradle to your CMake or ndk-build script. externalNativeBuild { cmake {...} // or ndkBuild {...} } }
Ürün aromalarını yapılandırma ve derleme varyantları hakkında daha fazla bilgi edinmek için şu adrese gidin:
Derleme Varyantlarını Yapılandırma Örneğin,
CMake için yapılandırabileceğiniz değişkenlerin bir listesini
arguments
özelliği için CMake Değişkenlerini Kullanma bölümüne bakın.
Önceden oluşturulmuş yerel kitaplıkları dahil et
Gradle'ın hiçbir uygulamada kullanılmayan önceden oluşturulmuş yerel kitaplıkları paketlemesini istiyorsanız
harici yerel derlemesi varsa, bunları src/main/jniLibs/ABI
bulun.
CMake dahil olmak üzere Android Gradle eklentisinin 4.0'dan önceki sürümleri
jniLibs
dizininizde eklenebilmesi için IMPORTED
hedefin oluşturulması gerekiyor
uygulamasını indirin. Eklentinin önceki bir sürümünden taşıma işlemi gerçekleştiriyorsanız
aşağıdaki gibi bir hatayla karşılaşırsanız:
* What went wrong:
Execution failed for task ':app:mergeDebugNativeLibs'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
> More than one file was found with OS independent path 'lib/x86/libprebuilt.so'
Android Gradle Plugin 4.0 kullanıyorsanız
IMPORTED
CBu hatadan kaçınmak için jniLibs
dizininizden hedefler oluşturun.
ABI'leri belirtin
Gradle, varsayılan olarak yerel kitaplığınızı ayrı bir .so
ürününde oluşturur.
Uygulama İkili Arabirimleri için dosyalar
(ABI'ler) NDK'nın desteklediği ve bunların tümünü uygulamanıza paket haline getirdiğinde. Şunu istiyorsanız:
Yerel uygulamanızın yalnızca belirli ABI yapılandırmalarını oluşturmak ve paketlemek için Gradle
kitaplıkları kullanarak bunları
ndk.abiFilters
işaretini aşağıda gösterildiği gibi, modül düzeyindeki build.gradle
dosyanızda bulabilirsiniz:
Eski
android {
...
defaultConfig {
...
externalNativeBuild {
cmake {...}
// or ndkBuild {...}
}
// Similar to other properties in the defaultConfig
block,
// you can configure the ndk block for each product flavor
// in your build configuration.
ndk {
// Specifies the ABI configurations of your native
// libraries Gradle should build and package with your app.
abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a',
'arm64-v8a'
}
}
buildTypes {...}
externalNativeBuild {...}
}
Kotlin
android {
...
defaultConfig {
...
externalNativeBuild {
cmake {...}
// or ndkBuild {...}
}
// Similar to other properties in the defaultConfig
block,
// you can configure the ndk block for each product flavor
// in your build configuration.
ndk {
// Specifies the ABI configurations of your native
// libraries Gradle should build and package with your app.
abiFilters += listOf("x86", "x86_64", "armeabi", "armeabi-v7a",
"arm64-v8a")
}
}
buildTypes {...}
externalNativeBuild {...}
}
Çoğu durumda, abiFilters
ndk
blok, Gradle'a hem derleme hem de
ve yerel kitaplıklarınızın bu sürümlerini paketleyin. Ancak isterseniz
Gradle'ın yapmasını istediğiniz şeyden bağımsız olarak
ne yapması gerektiğini kontrol edin.
pakete eklemek içinabiFilters
defaultConfig.externalNativeBuild.cmake
blok (veya
defaultConfig.externalNativeBuild.ndkBuild
bloğu). Gradle
bu ABI yapılandırmalarını oluşturur ancak yalnızca
defaultConfig.ndk
blok.
Uygulama yüklemelerinizin sayısını daha da azaltmak için Android App Bundle kullanarak yayınlamanız önerilir. yalnızca kullanıcının ABI'si ile eşleşen yerel kitaplıklar olarak cihaz indirme işlemiyle birlikte teslim edilir.
APK'ları kullanarak (Ağustos 2021'den önce oluşturulmuş) yayınlanan eski uygulamalar için şunları yapabilirsiniz:
yapılandırma
ABI'ye dayanan birden fazla APK oluşturabilirsiniz. Bunun yerine,
sürümünü yüklediğinizde Gradle, her ABI için ayrı bir APK oluşturur
her bir ABI'nın ihtiyaç duyduğu dosyaları desteklemek ve yalnızca paketler. Şu durumda:
belirtmeden ABI başına birden fazla APK'yı yapılandırın
Yukarıdaki kod örneğinde gösterildiği gibi abiFilters
işareti. Gradle derlemeleri
yerel kitaplıklarınızın desteklenen tüm ABI sürümleri ancak yalnızca bunları paketler
birden fazla APK yapılandırmanızda belirttiğinizden emin olun. Farklı bir sürüm oluşturmaktan kaçınmak için
istemediğiniz yerel kitaplıklar varsa,
hem abiFilters
işareti hem de ABI başına birden fazla APK'nız
yapılandırma.