Android Studio 4.0'da Yeni Native Dependency'ler

En son güncellendiği tarih: 5 gün önce

NDK kullanıcıları için Native Dependency'leri yönetmek önemli bir durumdur. Aşağıdaki bir çok maddeyi göz önünde bulundurmaları gerekiyor.


  • Kütüphane yazarlarının hem ndk-build hem de CMake için destek sağlaması gerekiyor. (Ayrıca yazılımcıların bu iki seçenekten birini kullandıklarını da varsaymaları gerekir)

  • Kütüphaneler her zaman Android için önceden oluşturulmuş prebuilt binary'leri distribute etmiyor. Bu nedenle yazılımcıların kütüphaneleri kendileri oluşturması gerekiyor veya web üzerinde önceden yayınlanmış/oluşturulmuş (güvenilir olmayan) prebuilt binary'lere güvenmeleri gerekiyor.

  • Android'e özel build script'ler artık genellikle güncel değil veya hizmet veremiyor.

  • Kütüphaneler bazen Android'in desteklemediği bir build sistem tarafından oluşturulmuş olabiliyor.

  • Kütüphaneler kullanıcı cihazlarında build olamayabiliyor. Örneğin, Unix shell script'leri Windows'ta çalıştırılamıyor.

  • Kütüphaneler genellikle diğer kütüphanelere bağımlıdırlar. Bu nedenle yazılımcıların diğer kütüphaneleri de takip etmesi gerekiyor.



Android Gradle Plugin 4.0 sürümüyle birlikte Java kitaplıkları için kullanılan dağıtım ve gösterim mekanizması native library'ler için de aktif edildi ve bu sorunlar ele alındı: Android Archives (AARs)


Örneğin curl ve jsoncpp'nin nasıl kullanıldığını aşağıdaki örnek ile inceleyebiliriz. Aşağıdaki dependency'ler ile curl'un sahip olduğu gizli OpenSSL dependency'si otomatik olarak pull edilir.


AGP 4.0 ile bu özellik hala deneme aşamasındadır. Bu nedenle bu özelliği etkinleştirmek için projenin gradle.properties dosyasında aşağıdaki tanımları yapmak gerekiyor:


Paketleri Build'e Import Etmek


Build.gradle dosyasına dependency'ler eklemek, gradle'ın bu dependency'leri Maven'den indirmesine neden olur. Ancak yine de CMake veya ndk-build'e bu bağımlılıkların nasıl kullanılması gerektiğini bildirmek gerekiyor. Ancak gerekli olan CMake paket konfigürasyonu veya ndk-build modül'ü otomatik olarak oluşturulabiliyor. Yapılması gereken sadece import etmek ve kullanmak.


CMake için aşağıdaki örneği inceleyebilirsiniz:


ndk-build için ise örnek şu şekilde:


Tanımlamalar sonrası App.cpp içinde aşağıdakileri şekilde include yazılabilir:


Yazılımcıların yaygın sorunlarından biri curl ile kullanmak için OpenSSL'i build etmektir. Yukarıdaki build script'lerde açıkça belirtilmemesine rağmen, curl paketi OpenSSL'e bağlıdır. Ancak bu otomatik olarak kullanılabilir.


Tüm örnek için the curl-ssl sample'ı inceleyebilirsiniz.


Prefab


Prefab yukarıda bahsettiğimiz entegrasyonları kolaylaştıran tool'dur.


C++ kütüphanelerini tanıtan her AAR; library'lerini, header'larını ve bir miktar metadata'sını AAR'deki Prefab dizinine paketler. Android Gradle Plugin, Prefab dizini AAR dependency'si içinde yer aldığında, içerilen bilgilerle build system script'lerini oluşturmak için Prefab'ı otomatik olarak run eder.


Her AAR, farklı konfigürasyonlar için çok sayıda prebuilt içerebilir, bu nedenle Prefab build konfigürasyonunuza uygun bir kütüphane bulmak için bir dizi uyumluluk kontrolü gerçekleştirir. Seçilen kütüphane, build'in ABI değerini, minSdkVersion değerini ve STL seçimini eşleştirerek, kullanılan NDK sürümüne en uygun olanın seçilmesini sağlar.

Kullanılabilir Kütüphanelerin Listesi


  • com.android.ndk.thirdparty:curl:7.68.0-alpha-1

  • com.android.ndk.thirdparty:jsoncpp:1.8.4-alpha-1

  • com.android.ndk.thirdparty:openssl:1.1.1d-alpha-1

  • com.google.oboe:oboe:1.3.0


Güncel Liste: https://maven.google.com/web/index.html


Kendi Kütüphanelerinizi Dağıtmak


Dağıtılacak kütüphaneler için ndkports geliştirilmiş durumda. Dağıtım için build edilecek kütüphane, Android yapısına uymayan tipik bir Linux projesi veya platformlar arası bir projeyle ndkports ile patch oluşturulup Google'a gönderilebilir.


Açık kaynak kütüphanenizin Google tarafından Prefab'da tutulmasını ve yayınlanmasını isterseniz aşağıdaki “Package request” bug şablonunu kullanabilirsiniz.

https://github.com/google/prefab/issues


Ancak bu yolla iletilecek her paketin Google tarafından desteklenmeyeceğini de unutmamak gerekiyor. Çünkü iletilecek her issue'nın yayınlanmasının bir maliyeti bulunuyor. Bu noktada uygun bulunan paketler Google tarafından tercih edilecektir.



Android Gradle Plugin ile native dependency'lerin kullanımı için: Documentation

Daha fazla örnek için: NDK samples

Prefab ile ilgili daha fazla bilgi için: Documentation on GitHub

Yayınlanmış hatalar için: Issue Tracker

İncelemenin çevrildiği referans: https://android-developers.googleblog.com/2020/02/native-dependencies-in-android-studio-40.html?linkId=82811653


#androidgradleplugin #androidstudio4 #prefab #AAR #ndkports


Komünite

Platform

Mobiler.dev Anasayfa
  • Twitter
  • Instagram
  • development_düzenlendi_düzenlendi
  • Youtube
  • slack-icon-black_edited_edited_edited
  • Gri LinkedIn Simge
JetBrains Hakkında Detaylı Bilgi Alın

© 2020 by mobiler.dev

mobilerdevLogo.jpg
Yazarlık Başvurusu Hakkında Bilgi Alın, Başvuru Yapın.
Topluluk Yazarlarını Tanıyın