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

投稿日:  更新日:

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

スポンサーリンク

Local Repositoryとは

Local Repositoryはユーザのホームフォルダに作成されるリポジトリです。

   Windowsの場合
   Linuxの場合
:C:¥Users¥ユーザ名¥.m2¥repository
:~/.m2/repository

よって、ライブラリの提供範囲はユーザになります。

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

ライブラリはMavenリポジトリ形式です。

スポンサーリンク

ライブラリの構築

始めに、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(発行先のリポジトリを指定)がないので
    // ←Local Repository(デフォルト)が発行先になる
}

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'

タスクの作成

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

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

タスクの実行

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

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

C:¥Users¥ユーザ名¥.m2¥repository
└── com                                             // groupId
    └── example                                     // groupId
        └── lib                                     // groupId
            └── decoration                          // artifactId
                ├── 0.0.1                           // version
                │   ├── decoration-0.0.1.aar
                │   ├── decoration-0.0.1.module
                │   └── decoration-0.0.1.pom
                └── maven-metadata-local.xml
スポンサーリンク

ライブラリの参照

Local Repositoryをライブラリの参照先に追加します。mavenLocal()関数が参照先を示す関数です。

pluginManagement {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}
dependencyResolutionManagement {  // すべてのモジュールに有効な指示
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {  // ライブラリの参照先となるリポジトリのリスト
        google()
        mavenCentral()
        mavenLocal()  // Local 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")
    ...
}

これで、Local 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:51:12.439  4587-4587  System.out I  # Hello World !! #
09:51:12.439  4587-4587  System.out I  ( Hello World !! )
09:51:12.439  4587-4587  System.out I  < Hello World !! >
09:51:12.440  4587-4587  System.out I  [ Hello World !! ]

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

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

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

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

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

C:¥Users¥ユーザ名¥.m2¥repository
└── com
    └── example
        └── lib
            ├── sample-debug
            │   ├── 0.0.1
            │   │   ├── sample-debug-0.0.1.aar
            │   │   ├── sample-debug-0.0.1.module
            │   │   └── sample-debug-0.0.1.pom
            │   └── maven-metadata-local.xml
            └── sample-release
                ├── 0.0.2
                │   ├── sample-release-0.0.2.aar
                │   ├── sample-release-0.0.2.module
                │   └── sample-release-0.0.2.pom
                └── maven-metadata-local.xml
スポンサーリンク

注意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 ...
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 ...
スポンサーリンク