Gradle'ı yerel kitaplığınıza bağlama (original) (raw)
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 yoksabir 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ızdiğ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ölmesicpp grubunda, harici derleme komut dosyalarınızda iseHarici Derleme Dosyaları grubu.
Not: Gradle yapılandırmasında değişiklik yaparkenProjeyi 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 veAndroid 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.txtkomut dosyasını belirtmek için Proje Yolu dosyası oluşturun. - ndk-build'i seçerseniz yanındaki alanı kullanınProje Yolu:Android.mk harici ndk-build projenize ekleyin. Android Studio, Application.mk dosyanızla aynı dizinde bulunuyorsa,
Android.mkdosyası.
4.Şekil Harici bir C++ projesini Android Studio iletişim kutusu.
- 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 blokbuild.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ğucmake engelle ve Android.mk dosyanız için göreli bir yol sağlayın. GradleApplication.mk dosyasını da içerirseAndroid.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ıyorexternalNativeBuild blok içinde Modül düzeyinizin defaultConfig bloğubuild.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 listesiniarguments ö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/ABIbulun.
CMake dahil olmak üzere Android Gradle eklentisinin 4.0'dan önceki sürümlerijniLibs 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ızIMPORTED 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.