🔑

リリース用AAR作成時のProGuard設定によるランタイムエラー解消について

2025/01/21に公開

Android開発において、リリースビルド用のAARを作成した際に、ランタイムエラーが発生することがあります。今回は、ProGuardの設定が原因でクラッシュしたケースとその解決方法を紹介します。

問題のコード

object FooUI {
    @Composable
    fun showSomeBlock(
        foo: String,
        onTapBar: (Int) -> Unit,
        onTapFizz: (String) -> Unit,
    ) {
        BuzzView(foo, onTapBar, onTapBar)
    }
}

問題の発生

リリース用のAARをビルドし、アプリケーションに組み込んだところ、デバッグモードでは正常動作するが、リリースモードではランタイムエラーが発生しました。原因を調査したところ、ProGuardの設定が影響していることが判明しました。

解決策

proguard-rules.proに以下の設定を追加することで問題が解消しました。

-keep class com.foo.bar.buzz.** { *; }

// これがないと、@Composableなどのアノテーションが消えてしまう
-keepattributes *Annotation*

@ComposableアノテーションがProGuardによって消えてしまったみたい

まとめ

ProGuardは繊細

Discussion