Androidプロジェクトを.tomlに移行する際に直面する問題

前書き
  • 以前のプロジェクトを.ktsに変更してビルドするようになってから
    公式もプロジェクトをversion catalogsバージョンディレクトリに移行することを目的とした記事を公開しました
    追加すると、Android StudioでAndroidをディレクトリとして表示する際に下部に表示されます

    これで一手間省けます(ダブルShiftで検索する必要がなくなりますXD)
    クリックするだけで内容が見られます

  • 以前はDependence.ktのようなものを作成すると、ダブルShiftで検索するか
    ../Dependence.ktで探す必要がありました

適用されるAGPバージョン
  • 新しいバージョンのAndroid Studioでは
    IDEの新しいプロジェクトを通じて直接設定できますが
    古いプロジェクトに遭遇した場合
    手動で移行する際にAGPバージョンを更新する必要があるかどうかが気になります
    通常、古いプロジェクトは長い年月が経っている可能性があり
    更新に時間がかかるか、短期間で最適化するコストがない場合
    元のバージョンを維持することを考慮することがあります

  • そこで少し調べてみました
    手元のASで作成したAGPでtomlが設定されているものを適当に選びました
    バージョンは8.4.0でした






  • Gradle公式ドキュメントを調べたところ、7.0のドキュメントで 7.0のリリースでversion catalogsの実験的機能がサポートされたと記載されています

    Gradle 7.0 リリースノート つまり、tomlは7.xで使用できるということです

移行時に直面する可能性のある問題
  • プロジェクトでこのような方法でライブラリを導入している場合があります
    implement("com.orhanobut:dialogplus:1.11@aar")
    

    後ろに@aarが付いていますが
    tomlのversionsでは後ろに@aarを追加することがサポートされていないため
    ビルドが通りません


    以下のように変更すれば問題ありません

  • 過去にはkotlinオブジェクトを使用してバージョンパラメータを設定していました、以下のように
    すべてを.tomlに変更したい場合 外部から.tomlで設定されたバージョンにアクセスする実験を行いましたが
    libsのように直接使用することはできません
    libs.xx.xx.xxxでバージョンを取得することはできません

    直接get()を使用して.toml内のVersionsの値を取得する必要があります
    例:libs.versions.minSdk.get().toInt()

    ただし、この方法で設定すると
    .toml内でどこで使用されているかが見えません


    aapt dump badging appName.apkを使用してビルドされたものとlibs.versions.minSdk.get()で設定されたものが一致するかを検証します


  • AGP 8.1.0未満の設定では、plugin{}の上に@Suppress("DSL_SCOPE_VIOLATION")を追加する必要があります。

    これはIDE側の問題によるものです。 IDEのKotlinスクリプトエディタでプラグインエイリアスのバージョンカタログアクセサがエラーとして表示される #22797

  • 次に、[plugins]の下のversion.refについて
    nullまたは空に設定することはできません。

一部のプロジェクトでは、plugin + classpathを使用して設定を行います。 これにより、直接plugins設定を使用すると競合が発生します。


なぜ一部のライブラリはversion.refを設定しなくてもビルドできるのか
  • 初めて.tomlを使用する際、一部のライブラリにversion.refを設定しなくても
    正常にビルドできることに気づくでしょう。


    これは、composeBomを導入した際に
    他の関連ライブラリをバージョン設定なしで導入すると
    設定したcomposeBomのバージョンに基づいて
    関連ライブラリのバージョンが自動的にマッピングされるためです。
    このように、composeBomを設定するだけで、自動導入をサポートする部分が互換性のあるバージョンに設定されます。
    非常に便利です!
  • Bomマッピングを参照して対応するバージョンを確認
バージョンカタログの移行方法

移行説明

../gradleディレクトリの下にlib.version.tomlを作成します。


必要に応じて[versions][libraries][plugins]を追加します。
公式が推奨する命名方式はケバブケースです。
これによりコード補完がより良くなります。
以下のコード例を参照してください:

実際の使用例

tomlを追加した後、sync nowを押して同期します。
その後、build.gradle.ktsで直接使用できます。
以下のコード例を参照してください:
参考資料

You might also enjoy