Kitaplığınızı yükleyin

Kitaplığınıza erişim izni vermek için bir depo seçmeniz gerekir. Bu sayfada, depo türü seçerken dikkat edilmesi gereken noktalar açıklanmakta ve Maven Publish eklentisi kullanılarak nasıl yayın oluşturulacağı gösterilmektedir.

Kitaplığınızı yüklemeden önce kitaplığınızı yayınlanmaya hazır hale getirdiğinizden ve gerekli yayın varyantlarını veya test donanımlarını yapılandırdığınızdan emin olun.

Depo türü seçin

Kitaplıklar, AAR dosyaları olarak yayınlanır. Bu dosyalarda bayt kodu ve yerel kitaplıklar olarak derlenmiş kod, Android manifesti ve kaynaklar bulunur. Paketin kendisi herhangi bir kimlik, sürüm veya diğer kitaplıklara bağımlılık beyan etmez.

AAR'leri doğrudan dağıtmak yerine bir depo aracılığıyla sağlamak genellikle en iyi uygulamadır. Bu sayede kullanıcılar, sürüm gibi önemli ayrıntıları içermeyen bir name.aar dosyasıyla uğraşmak zorunda kalmadan kitaplığın nereden geldiğini daha iyi anlayabilir. Bir kitaplığın daha yeni bir sürümüne yükseltme yaparken, daha yeni sürümün yalnızca gerekli bağımlılıklarının eklendiğinden emin olmak için bir depo kullanın. Böylece kullanıcıların bağımlılıkları manuel olarak güncellemesi gerekmez.

Kitaplığınızı yayınlamak için depo kullanmanın birçok avantajı vardır:

  • Gradle, kitaplığınızın bağımlılıklarını bağımlılık grafiğine otomatik olarak ekleyebilir.
  • Gradle, kitaplığınızın tek bir sürümünün bağımlılık grafiğinde olmasını sağlayarak kitaplığınız farklı sürümlerle birden fazla kez geçişli olarak dahil edilirse çakışmaları çözer.
  • Kitaplığınız Java 8 veya daha yeni dil özelliklerini kullanıyorsa Android Gradle Eklentisi (AGP) daha verimli bir şekilde desugaring işlemi yaparak kullanıcılarınızın derleme sürelerini kısaltabilir.
  • Kitaplığınız, varyant yayınlamayı kullanabilir ve test donanımları gibi özellikler içerebilir.

AAR'yi doğrudan dağıtmak, kullanıcınıza kitaplığınızın kimliği, sürümü veya bağımlılıkları hakkında bilgi vermez. Bir depoda yayınlama yaparken dağıtım, depo mekanizmasının bir parçası olan ayrı bir dosya tarafından gerçekleştirilir. Maven depoları için bu, POM dosyasıdır. Bu nedenle, kitaplıkları AAR dosyalarını manuel olarak dağıtmak yerine depoları kullanarak yayınlamanız önemle tavsiye edilir.

Depo türleri

Üç tür depo vardır:

  • Maven Central gibi ücretsiz online depolar, herkesin kitaplık yüklemesine ve indirmesine olanak tanır.
  • Giriş yaparak erişilen özel depolar, özel kitaplıkların kontrollü bir şekilde dağıtılmasına olanak tanır.
  • Yerel, klasör tabanlı depolar, kitaplıkların manuel indirme yoluyla dağıtılmasına olanak tanır.

Yerel, klasör tabanlı depolar kullanmak, kullanıcılarınıza AAR'ye manuel indirme bağlantısı sağlamaya veya AAR'yi e-postayla göndermeye çok benzer. Temel fark, yalnızca AAR'yi değil, aynı zamanda kimlik, sürüm ve bağımlılıklarla ilgili ek bilgileri de göndermenizdir.

AAR'nizi ve meta verileri içeren klasör tabanlı deponun ZIP dosyasını dağıtırsınız. Kullanıcılarınız daha sonra dosyanın içeriğini çıkarabilir, içeriği projelerine ekleyebilir ve Gradle'ı bu içeriğe yönlendirebilir. Bu noktadan sonra kullanıcılar, kitaplık online bir depodaymış gibi Maven koordinatlarını kullanarak kitaplığa bağımlılık bildirebilir ve daha önce bahsedilen tüm avantajlardan yararlanabilir.

Yayını oluşturma

Gradle Maven Publish eklentisini kullanarak yayınlayın. Maven Publish eklentisi, yayınları ve depoları bildirmenize olanak tanır ve bu yayınları depolarda yayınlamak için görevler oluşturur. Bu yayınlar, derlemeyi yönlendiren eklentinin oluşturduğu bir SoftwareComponent örneğini kullanır. Bu örnek, AGP veya java-library eklentisi olabilir.

Maven Publish eklentisini AGP ile çalıştırırken yazılım bileşenlerinin, eklenti uygulandığında doğrudan oluşturulmadığını unutmayın. Bunun yerine afterEvaluate() geri çağırma adımında oluşturulurlar. Bu nedenle, yazılım bileşenini seçen yayının da afterEvaluate() adımında yapılandırılması gerekir.

Modül düzeyindeki build.gradle dosyasının aşağıdaki kod snippet'i, singleVariant() veya multipleVariants() ile oluşturulan belirli bir varyant için yayın oluşturur:

Modern

publishing {
  publications {
    release(MavenPublication) {
      groupId = 'com.my-company'
      artifactId = 'my-library'
      version = '1.0'

      afterEvaluate {
        from components.release
      }
    }
  }
}

Kotlin

publishing {
  publications {
    register<MavenPublication>("release") {
      groupId = "com.my-company"
      artifactId = "my-library"
      version = "1.0"

      afterEvaluate {
        from(components["release"])
      }
    }
  }
}

Yukarıdaki örnekte, bileşenin adı (components.release), singleVariant() veya multipleVariants() için verilen ada dayanır.

Bir yayın bildirdikten sonra hedef depo oluşturmanız gerekir.

Yerel bir depoda yayınlama

Yerel bir depoda yayınlama işlemi, depo beyanı dışında uzak bir depoda yayınlama işlemine çok benzer. Seçtiğiniz varyantları yayınlayan bir yayın oluşturmak için uzak depoda nasıl yayın yapacağınızı öğrenmek üzere önceki bölümü okuyun. Ardından yerel bir depo oluşturun:

Modern

publishing {
  publications {
    release(MavenPublication) {
      ...
    }
  }
  repositories {
    maven {
      name = 'myrepo'
      url = layout.buildDirectory.dir("repo")
    }
  }
}

Kotlin

publishing {
  publications {
    register<MavenPublication>("release") {
      ...
    }
  }
  repositories {
    maven {
      name = "myrepo"
      url = uri(layout.buildDirectory.dir("repo"))
    }
  }
}

Bu işlem, yayının ve deponun adından oluşan publishReleaseToMyRepoRepository adlı bir görev oluşturur. Depoyu belirtilen konumda oluşturmak için bu görevi çalıştırın. Bu örnekte depo, projenin derleme klasöründe, repo dizini altında oluşturulur.

Deponun ZIP dosyasını otomatik olarak oluşturmak istiyorsanız aşağıdaki kodu kullanın:

Modern

tasks.register('generateRepo', Zip) {
  def publishTask = tasks.named('publishReleasePublicationToMyrepoRepository')
  from publishTask.map { it.getRepository().getUrl() }
  into 'mylibrary'
  archiveFileName.set('mylibrary.zip')
}

Kotlin

tasks.register<Zip>("generateRepo") {
  val publishTask = tasks.named(
    "publishReleasePublicationToMyrepoRepository",
    PublishToMavenRepository::class.java)
  from(publishTask.map { it.repository.url })
  into("mylibrary")
  archiveFileName.set("mylibrary.zip")
}

Bu kod, yayınlama görevinin içeriğini kullanan ve sıkıştıran generateRepo adlı bir Zip görevi oluşturur. Bu sırada, zip girişlerinin mylibrary adlı üst düzey bir klasörde olmasını sağlar. Çıkış, build/distributions altında bulunur.