画竜点睛を衝く@mapyo

日々やった事をつらつらと書くブログです

Android Wear開発でBuild Variantsを使って出来なかった事があった

普通に使うときの公式のドキュメントはこの辺。

https://developer.android.com/tools/building/configuring-gradle.html#workBuildVariants

ざっくりまとめると、開発する時と本番リリースする時でapiの向き先とか、簡単に変更出来たり、デモ用。自分用とかで、定数を簡単に切り替えられるやつ。Android studioで簡単に切り替えられる。

Product flavorsとBuild typesがある。

Product flavorsは使わなかった。だいたいは、Build typesで事足りそう。Build typesはDebugやReleaseなどのビルドを切り替えた時の設定値を簡単に切り替えられるようにするもの。APIの接続先とか。

どうやって使ったらいいかはぐぐったら結構出てくるのでそれを参考にするとよい感じ。

build.gradeを修正した時にビルドにめっちゃ時間がかかるのが辛いですね。。。

Android Wearで使うときとうまく行かなかった事

debug時とrelease時のアプリを共存させたいし、DeployGateで配布する時はrelease用の鍵を使ってビルドしないとwearable側にアプリがインストールされないので、これらを解決したくて handheld側で以下のように設定していました。

buildTypes {
    debug {
        buildConfigField "String", "URL", "\"test.hoge.jp\""
        applicationIdSuffix = '.debug'
        versionNameSuffix = 'd'
    }

    // deploygateで配布してandroid wearにインストールする為にrelease用の鍵を使使いたい
    releaseBeta {
        buildConfigField "String", "URL", "\"test.hoge.jp\""
        applicationIdSuffix = '.beta'
        versionNameSuffix = 'b'
    }

    release {
        buildConfigField "String", "URL", "\"hoge.jp\""
        proguardFiles getDefaultProguardFile('proguard-android.txt')
    }
}

ref. Android Studio で Build Variants

しかし、これでreleaseBetaをビルドしようとすると、以下のエラーが発生してしまっていた。

Error:Execution failed for task ':mobile:handleReleaseBetaMicroApk'.
> The main and the micro apps do not have the same package name.

handheld側のパッケージ名と、wearable側のパッケージ名が違うことが原因で発生しているっぽい。ぐぐると、以下のようなページが参考になった。

http://stackoverflow.com/questions/25141039/wear-app-and-with-custom-build-type-with-applicationidsuffix

参考にして、以下のように修正した。

handheld側のbuild.gradeの一部

dependencies {
    debugWearApp project(path:':wear', configuration: 'debug')
    releaseWearApp project(path:':wear', configuration: 'release')

    compile 'com.deploygate:sdk:3.1'
    // 以下省略。。
}

wearable側のbuild.gradeの一部

android {
    publishNonDefault true

    // 以下省略。。。
}

すると、debugとreleaseに関しては使い分けが出来るようになったし、ちゃんとwearable側にもdebugとrelease両方のアプリがインストールされていた。

でも、releaseBetaが使い分けられず。。。何も考えないでreleaseBetaをビルドすると、ビルドしたapkファイルにwearableにインストールするapkファイルが内包されていなかった。

かと言って、試しに

releaseBetaWearApp project(path:':wear', configuration: 'releaseBeta')

とかを追加してみたけど、そんなメソッドないよと怒られる。 この辺、もっとgradleの仕組みを知れば解決出来るものなのだろうかー。

それとも、ググり力が足りないのだろうか。