Remote Repositoryの構築と参照(Giraffe版)

投稿日:  更新日:

Remote Repositoryの構築と参照方法について、まとめます。

この記事は「Remote Repositoryの構築と参照(2022.04発行)」をAndroid Studio Giraffe(2023.07)向けに書き直したものです。

Gradle Ver7.x以降、リポジトリの構築方法が若干変更になりました。

また、GiraffeよりGradleでKotlin DSLが推奨になりました。それに従い、ビルドスクリプトをKotlinで記述したコードに置き換えています。

※環境:Android Studio Giraffe | 2022.3.1
   :Android Gradle Plugin 8.1.0
   :Gradle 8.0

スポンサーリンク

Remote Repositoryとは

Remote Repositoryはネットワークを経由して参照されることを目的にしたリポジトリです。言い換えれば、ネットワーク上に公開されたリポジトリです。

Android Studioで参照するライブラリ

リポジトリを所持するホストをリポジトリサーバと言います。

このサーバを何処に設置するかによって、リポジトリを公開する範囲が決まってきます。

例えば、誰もが参照可能な外部ネットワークに設置すれば、全世界に公開することになります。

「Central Repository」も「Remote Repository」の中の1つです。

スポンサーリンク

利用可能なスキーム

アクセスする際のリポジトリサーバはURLで指定します。

このURLのスキームで使用するプロトコルとサーバのタイプが決まります。

スキームは次のようなものが利用可能です。

スキームサーバのタイプ
fileローカルなストレージ
httpウェブサーバ
httpsウェブサーバ(Over SSL)
gcsGoogle Cloud Storage
s3Amazon Simple Storage Service
sftpFTPサーバ
※キャッシュの場所: C:¥Users¥ユーザ名¥.gradle¥caches
スポンサーリンク

ライブラリの構築

始めに、Module Libraryを作成(「Module Libraryの構築と参照(Giraffe編)」を参照)します。

その後、以下のことを行います。

ビルドスクリプトの修正

ビルドスクリプト(build.gradle.kts)へ以下の内容を追記します。
※拡張子「.kts」はKotlinで記述されたビルドスクリプトを示す

  • プラグイン読み込み
  • Software Componentの設定
  • 発行の指示書
  • 発行先のリポジトリ
plugins {
    id("com.android.library")
    id("org.jetbrains.kotlin.android")
    id("maven-publish")  // プラグリンの読み込み
}

android {
    ...
    publishing {
        singleVariant("release") // Software Componentの設定
    }
}

publishing {
    publications { // 発行の指示書
        create<MavenPublication>("myLib") { // タスクの作成
            groupId = "com.example.lib"
            artifactId = "decoration"
            version = "0.0.1"
            afterEvaluate {                 // ビルドスクリプトの評価後に実行
                from(components["release"]) // Componentの取得方法
            }
        }
    }
    repositories {  // 発行先のリポジトリ
        maven {
            name = "myRepo"
            url = uri("file:///E:/フォルダ/MyRepository")
        }
    }
}

dependencies {

    implementation("androidx.core:core-ktx:1.9.0")
    implementation("androidx.appcompat:appcompat:1.6.1")
    implementation("com.google.android.material:material:1.9.0")
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.1.5")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
}

 プラグイン読み込み 

プラグイン(maven-publish)を読み込みます。これにより、ライブラリ発行のためのDSL(Domain Specific Language)が利用可能になります。

 Software Componentの設定 

Gradle 7.x以降、Componentの設定を明記するようになりました。

ここでいうComponentとは、「ライブラリに含まれるデータの目録」のことです。

サンプルはsingleVariantを用いた例です。

singleVariantは公開する単一のバリアントをComponentへ指定します。これにより、そのバリアントのAAR(Android ARchive)ファイルがライブラリに含まれます。そして、バリアント名がComponentを取得する際の参照Keyになります。

ビルドバリアント

 発行の指示書 

「Componentをどのように発行するか?!」を指定する指示書です。

指示書に従ってタスクが作成されます。そして、タスクの実行により、ライブラリは発行されます。

プロパティ概要
groupId管理者を一意に識別する名前です。
「どこの誰が開発したライブラリであるか」を明確にするために、ドメイン(パッケージ)名を指定します。
【例】groupId = 'com.example.lib'
artifactIdライブラリ名です。
ライブラリを参照する時、この名前が使用されます。
【例】artifactId = 'decoration'
versionバージョンです。
バージョンの運用方法は自由です。一貫性を持たせるためにSemantic Versioningに従うという選択肢もあります。
【例】version = '0.0.1'
  発行先のリポジトリ 

発行先のリポジトリをURLで指定します。

サンプルはスキームfileを用いてローカルストレージへ発行する例です。

タスクの作成

build.gradle.ktsを再読み込みするために「Sync Project」を実行すると、タスクが作成されます。

build.gradle.ktxの再読み込みでタスク作成

タスクの実行

タスクを実行すると、ビルドバリアントで指定されたビルドが行われた後に、ライブラリの発行が指示書に従って行われます。

以下はサンプルで作成されたRemote Repositoryのフォルダ構成です。Mavenリポジトリ形式になっています。

E:¥フォルダ¥MyRepository
└── com
    └── example
        └── lib
            └── decoration
                ├── 0.0.1
                │   ├── decoration-0.0.1.aar
                │   ├── decoration-0.0.1.aar.md5
                │   ├── decoration-0.0.1.aar.sha1
                │   ├── decoration-0.0.1.aar.sha256
                │   ├── decoration-0.0.1.aar.sha512
                │   ├── decoration-0.0.1.module
                │   ├── decoration-0.0.1.module.md5
                │   ├── decoration-0.0.1.module.sha1
                │   ├── decoration-0.0.1.module.sha256
                │   ├── decoration-0.0.1.module.sha512
                │   ├── decoration-0.0.1.pom
                │   ├── decoration-0.0.1.pom.md5
                │   ├── decoration-0.0.1.pom.sha1
                │   ├── decoration-0.0.1.pom.sha256
                │   └── decoration-0.0.1.pom.sha512
                ├── maven-metadata.xml
                ├── maven-metadata.xml.md5
                ├── maven-metadata.xml.sha1
                ├── maven-metadata.xml.sha256
                └── maven-metadata.xml.sha512
スポンサーリンク

ライブラリの参照

Remote Repositoryをライブラリの参照先に追加します。

pluginManagement {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}
dependencyResolutionManagement {  // すべてのモジュールに有効な指示
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {  // ライブラリの参照先となるリポジトリのリスト
        google()
        mavenCentral()
        maven {
            url = uri("file:///E:/フォルダ/MyRepository")  // Remote Repositoryを追加
        }
    }
}

rootProject.name = "My Application"
include(":app")

「≧ Gradle Version 7.0」からrepositories命令の記述場所が、repositoriesModeの値により制限されるようになりました。注意が必要です。

RepositoriesMode概要
FAIL_ON_PROJECT_REPOSsettings.gradleでrepositoriesを宣言
モジュール名/build.gradleでrepositoriesを宣言たし場合、ビルドエラー
PREFER_PROJECTsettings.gradleで宣言したrepositoriesは無視
モジュール名/build.gradleでrepositories命令を宣言
PREFER_SETTINGSsettings.gradleでrepositoriesを宣言
モジュール名/build.gradleで宣言したrepositoriesは無視

参照するライブラリを依存関係リスト(dependencies)に追加します。フォーマットは「groupId:artifactId:version」です。

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
}

android {
    ...
}

dependencies {
    ...
    implementation("com.example.lib:decoration:0.0.1")
    ...
}

これで、Remote Repositoryのライブラリを参照するようになります。

スポンサーリンク

サンプルの実行結果

サンプルの実行結果を示します。

import com.example.lib.decoration.Brackets
import com.example.lib.decoration.angle
import com.example.lib.decoration.round
import com.example.lib.decoration.square

...
{
    val _str1 = Brackets("#", "#").bracket("Hello World !!")
    println(_str1)
    val _str2 = round("Hello World !!")
    println(_str2)
    val _str3 = angle("Hello World !!")
    println(_str3)
    val _str4 = square("Hello World !!")
    println(_str4)
}
09:46:26.289  4363-4363  System.out  I  # Hello World !! #
09:46:26.290  4363-4363  System.out  I  ( Hello World !! )
09:46:26.290  4363-4363  System.out  I  < Hello World !! >
09:46:26.290  4363-4363  System.out  I  [ Hello World !! ]
スポンサーリンク

タスクのネーミングルール

タスクは発行するライブラリ毎に作成されます。

タスクのネーミングルール

publishAllPublicationsToMyRepoRepositoryタスクは一括で処理するタスクです。

この例では、sample-releaseとsample-debugライブラリが発行されます。

E:¥フォルダ¥MyRepository
└── com
    └── example
        └── lib
            ├── sample-debug
            │   ├── 0.0.1
            │   │   ├── sample-debug-0.0.1.aar
            │   │   ├── sample-debug-0.0.1.aar.md5
            │   │   ├── sample-debug-0.0.1.aar.sha1
            │   │   ├── sample-debug-0.0.1.aar.sha256
            │   │   ├── sample-debug-0.0.1.aar.sha512
            │   │   ├── sample-debug-0.0.1.module
            │   │   ├── sample-debug-0.0.1.module.md5
            │   │   ├── sample-debug-0.0.1.module.sha1
            │   │   ├── sample-debug-0.0.1.module.sha256
            │   │   ├── sample-debug-0.0.1.module.sha512
            │   │   ├── sample-debug-0.0.1.pom
            │   │   ├── sample-debug-0.0.1.pom.md5
            │   │   ├── sample-debug-0.0.1.pom.sha1
            │   │   ├── sample-debug-0.0.1.pom.sha256
            │   │   └── sample-debug-0.0.1.pom.sha512
            │   ├── maven-metadata.xml
            │   ├── maven-metadata.xml.md5
            │   ├── maven-metadata.xml.sha1
            │   ├── maven-metadata.xml.sha256
            │   └── maven-metadata.xml.sha512
            └── sample-release
                ├── 0.0.2
                │   ├── sample-release-0.0.2.aar
                │   ├── sample-release-0.0.2.aar.md5
                │   ├── sample-release-0.0.2.aar.sha1
                │   ├── sample-release-0.0.2.aar.sha256
                │   ├── sample-release-0.0.2.aar.sha512
                │   ├── sample-release-0.0.2.module
                │   ├── sample-release-0.0.2.module.md5
                │   ├── sample-release-0.0.2.module.sha1
                │   ├── sample-release-0.0.2.module.sha256
                │   ├── sample-release-0.0.2.module.sha512
                │   ├── sample-release-0.0.2.pom
                │   ├── sample-release-0.0.2.pom.md5
                │   ├── sample-release-0.0.2.pom.sha1
                │   ├── sample-release-0.0.2.pom.sha256
                │   └── sample-release-0.0.2.pom.sha512
                ├── maven-metadata.xml
                ├── maven-metadata.xml.md5
                ├── maven-metadata.xml.sha1
                ├── maven-metadata.xml.sha256
                └── maven-metadata.xml.sha512
スポンサーリンク

注意1:Componentの作成タイミング

Componentは、singleVariantの評価(実行)時ではなく、全て(GradleのRootおよびSubプロジェクト)のビルドスクリプトを評価した後に作成されます。よって、Componentを参照する際は、全てのビルドスクリプトの評価を待つ必要があります。

			...
            afterEvaluate {                 // ビルドスクリプトの評価後に実行
                from(components["release"]) // Componentの取得
            }
			...
スポンサーリンク

注意2:タスクが作成されないとき

「Sync Project」の実行でGradleタスクが作成されないときは、以下の項目のチェックを確認してください。

Gradleタスクの作成

スポンサーリンク

関連記事:

アプリ開発の中で作成したクラスや関数などを資産としてライブラリ化し、次のアプリ開発で再利用するといったスタイルは、開発効率を上げる常套手段です。 私のように個人でアプリを開発している場合、この恩恵は薄いのですが、ソフトハウス(死語?)で年間に多くのアプリを開発している現場では濃いと思います。 「誰かが欲しいと思う機能」は「誰もが欲しいと思う機能」です。同じような仕様のアプリ開発を受注することはありませんか?機能の骨幹はライブラリからの流用に任せて、外観は顧客の要望に合わせるだけで済んだら、楽です。 今回は、Android Studio(アプリ開発)で参照するライブラリの種類について、まとめます。 ...
Module Libraryの構築と参照方法について、まとめます。 ※環境:Android Studio Bumblebee | 2021.1.1 ...
Local Repositoryの構築と参照方法について、まとめます。 ※環境:Android Studio Bumblebee | 2021.1.1 ...
Central Repositoryの参照方法について、まとめます。 ...
Remote Repositoryの構築と参照方法について、まとめます。 ※環境:Android Studio Bumblebee | 2021.1.1 ...
リポジトリサーバをApache+WebDavで構築する方法です。 Remote Repositoryの詳細は「Remote Repositoryの構築と参照」を参照してください。 ...
リポジトリサーバをGoogle Cloud Storageで構築する方法です。 Remote Repositoryの詳細は「Remote Repositoryの構築と参照」を参照してください。 ...
Module Libraryの構築と参照方法について、まとめます。 この記事は「Module Libraryの構築と参照(2022.04発行)」をAndroid Studio Giraffe(2023.07)向けに書き直したものです。 GiraffeよりGradleでKotlin DSLが推奨になりました。それに従い、ビルドスクリプトをKotlinで記述したコードに置き換えています。 ※環境:Android Studio Giraffe | 2022.3.1    :Android Gradle Plugin 8.1.0    :Gradle 8.0 ...
Local Repositoryの構築と参照方法について、まとめます。 この記事は「Local Repositoryの構築と参照(2022.04発行)」をAndroid Studio Giraffe(2023.07)向けに書き直したものです。 Gradle Ver7.x以降、リポジトリの構築方法が若干変更になりました。 また、GiraffeよりGradleでKotlin DSLが推奨になりました。それに従い、ビルドスクリプトをKotlinで記述したコードに置き換えています。 ※環境:Android Studio Giraffe | 2022.3.1    :Android Gradle Plugin 8.1.0    :Gradle 8.0 ...
スポンサーリンク