0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AndroidStudoでBuildVariantsを追加すると実行の構成がエラーになる事象の解消方法

Last updated at Posted at 2023-01-15

AndroidStudoでBuildVariantsとは

BuildVariants(ビルドバリアント)とは、単一のプロジェクトからさまざまなバージョンのアプリを作成する方法です。
公式ホームページ
ビルド バリアントを設定する
デフォルトでは「表示」→「ツールウィンドウ」→「BuildVariants」を開くと以下のように
Screenshot_20230115_124447.png

  • debug
  • release

の2つのVariatntsが定義されています。
VariatntsはbuildTypeとproductFlavorsの組み合わせで構成されます。
buildTypeはビルドの方法、debug、release、staging・・・等を定義します。
productFlavorsはどちらかと言うとそのアプリのビルドに何を含めるか、demo、full・・・等を定義します。
Variatntsはこの掛け合わせ、(demo、full) × (debug、release、staging) になります。
productFlavorsは定義されていなければ、defaultConfig の設定値が適用されます。

BuildVariantsでやりたかったこと

現在、専用のバーコードカメラを持ったAndroid端末でバーコードを読み取るアプリの開発をしています。標準ではない端末メーカ専用のカメラなのでバーコードを読み込むAPIも専用のライブラリが提供されていて、それを呼び出しています。
なので、エミュレータではその専用の専用のバーコードカメラがないので動かすことができません。
バーコードを読み取って、その値で動き出すアプリなので、バーコードが読めないと実質何もできません。常に実機があるわけではないので、なんとかエミュレータでも動かせる方法がないか模索していました。
当初はSharedPreferenceにモードを持って、独自にファイルを読み込んでバーコードの中身を返すクラスを作って、ロジックで

    if (isMock()) {
        val barcode = BarcodeMock.readBarcode()
    } else {
        val barcode = ・・・ // モノホンのライブラリを呼ぶ
    }

のようにしていましたが、

  • 処理が煩雑になる。
  • 本番(実機)で必要のない処理が入っているのがイマイチよろしくない。

これらを解決するために、モノホンのバーコードライブラリと同じAPIインタフェースでモック用のライブラリを作り、ビルド時にモノホンとモックのライブラリを切り替えることができないかを考えてみました。

BuildVariantsにVariantsを追加する

今回は、productFlavorsは必要ないので、buildTypeだけを使います
デフォルトのbuildTypesに1個追加して、

  • debug (デバック、モノホンのバーコードライブラリ)
  • debugMock (デバック、モックのバーコードライブラリ)
  • release (リリース、モノホンのバーコードライブラリ)

で、Variantsを切り替えることで実現しようとしました。

build.gradle
buildTypes {
    debug { // バーコードライブラリ モノホン
    }
    debugMock{ // バーコードライブラリMock
    }
    release { // バーコードライブラリ モノホン
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}
dependencies {
    ・・・
    debugImplementation files('libs/monohon.jar') // バーコードライブラリ モノホン
    debugMockImplementation files('libs/Mock.jar') // バーコードライブラリMock
    releaseImplementation files('libs/monohon.jar') // バーコードライブラリ モノホン
    ・・・
}

これで、期待したとおりBuildVariantsに「debugMock」が増えたんですが・・・
Screenshot_20230115_130252.png
VariantsにdebugMock、releaseを選ぶと、実行の構成が赤い☓印が付いて実行できなくなります。
Screenshot_20230115_130529.png
Variantsがデフォルトのdebugとreleaseだけの時はこのように赤い☓印は付きません。実行の構成を開いてみると・・・
Screenshot_20230115_130730.png
下に赤い!マークで、

エラー: The apk for your currently selected variant cannot be signed. Please specify a signing configuration for this variant (release).

と書かれています。これを見ると署名がされていないと言うように見えますが・・・ここで署名なんて必要なんだっけ?と思いつつ隣の修正ボタンを押して署名情報を入れてみましたが、それでも☓印は消えません。

そもそもこの赤いバツ印が付いた状態で署名なくても、署名なしビルドであればビルドはできます。
「ビルド」→「Build Bundle(s)/APK(s)」→「build APK(s)」
debug、debugMock、relaseどれもビルドできます。

【Android】Active Build Variantを切り替えたときにエラーが発生した時のまとめ

を試してみましたが、これでも実行の構成の赤い☓印は消えませんでした。
ここに、ズバリ解決方法が載ってました。

Error: The apk for your currently selected variant (Unknown output) is not signed. Please specify a signing configuration for this variant (debug)

「ファイル」→「プロジェクトの構成」
左のカテゴリから「Modules」を選択、Modulesは「app」を選択、右上の「DefaultConfig」を選択
SigningConfigに「signingConfigs.debug」を選択
Screenshot_20230115_131701.png
これによって、build.gradleは以下のようになります。

build.gradle
・・・
defaultConfig {

    ・・・

    signingConfig signingConfigs.debug
}

これで赤い☓印は消えました
Screenshot_20230115_132232.png
Screenshot_20230115_132254.png

signingConfig signingConfigs.debugはdefaultConfigじゃなくて、buildTypesの各Variantsの方にいれてもいいみたいです。

build.gradle
    buildTypes {
        debug {
        }
        debugMock{
            signingConfig signingConfigs.debug
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.debug
        }
    }
    ・・・
}

でもイケます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?