Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android wear application packaging fails with flavours

I have an application that includes a wear app. All works fine on debug tested with a real device. I can alse create the release apk that packs the wear apk inside it. But only if there is only one flavour on my application.

I want to maintain two versions of the application with different applicationId, but although this compile without errors, in this case the two release apks (one of each flavour) don't cointain the corresponding wear apks.

This is the relevant part of the mobile app build.gradle:

    productFlavors {
    Trial {
        applicationId "com.example.myapp.trial"
        versionName "3.0.1"
        versionCode 301
    }
    Full {
        applicationId "com.example.myapp"
        versionName "3.0.1"
        versionCode 301
    }
}

}

dependencies {
    compile 'com.google.android.gms:play-services:6.1.+@aar'
    wearApp project(':myWearApp')
}

And this is the correspondig wear app build.gradle:

productFlavors {
    Trial {
        applicationId "com.example.myapp.trial"
        versionName "3.0.1"
        versionCode 301
    }
    Full {
        applicationId "com.example.myapp"
        versionName "3.0.1"
        versionCode 301
    }
}

}

dependencies {
    compile 'com.google.android.support:wearable:1.0.0'
    compile 'com.google.android.gms:play-services-wearable:6.1.71'
}

Any help will be welcomed. Thanks.

like image 231
Miguel Sesma Avatar asked Dec 09 '14 19:12

Miguel Sesma


3 Answers

Thanks to the clue Scott gave me this is the full solution:

1.) Flavors must be lowercase

2.) dependency configurations must include flavorRelease

3.) In Wear app buil gradle, under android{}, we must include publishNonDefault true

So for mobile app build.gradle:

android {

......

productFlavors {
    trial {
        applicationId "com.sample.myapp.trial"
        versionName "3.0.1"
        versionCode 301
    }
    full {
        applicationId "com.sample.myapp"
        versionName "3.0.1"
        versionCode 301
    }
 }
}

dependencies {
    trialWearApp project(path: ':myWearApp', configuration: 'trialRelease')
    fullWearApp project(path: ':myWearApp', configuration: 'fullRelease')
}

And for wear app build.gradle:

android {

  publishNonDefault true
......

productFlavors {
    trial {
        applicationId "com.sample.myapp.trial"
        versionName "3.0.1"
        versionCode 301
    }
    full {
        applicationId "com.sample.myapp"
        versionName "3.0.1"
        versionCode 301
    }
 }
}
like image 113
Miguel Sesma Avatar answered Oct 26 '22 23:10

Miguel Sesma


The flavor of the parent app isn't propagated automatically to the Wear project. You have to map it explicitly.

Instead of this:

dependencies {
    wearApp project(':myWearApp')
}

Do this:

In your Wear app:

android {
    publishNonDefault true
}

In your parent app:

dependencies {
    TrialWearApp project(path: ':myWearApp', configuration: 'Trial')
    FullWearApp project(path: ':myWearApp', configuration: 'Full')
}
like image 32
Scott Barta Avatar answered Oct 27 '22 00:10

Scott Barta


I see that you found a solution to your problem, but here is my version that combines build configs with flavors and application suffixes in case you might need that in the future. Could also be relevant information for those who end up googling their way into this post.

app/build.gradle:

android {
    compileSdkVersion 23
    buildToolsVersion '23.0.3'

    signingConfigs {
        debug { ... }
        release { ... }
    }

    defaultConfig {
        applicationId "com.sample.myapp"
        minSdkVersion 14
        targetSdkVersion 23
        versionName "3.0.1"
        versionCode 301
    }

    buildTypes {
        debug {
            applicationIdSuffix ".debug"
            embedMicroApp = true
            minifyEnabled false
            debuggable true
        }
        release {
            embedMicroApp = true
            minifyEnabled true
            zipAlignEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }

    productFlavors {
        trial {
            applicationIdSuffix ".trial"
        }
        full {
            applicationIdSuffix ".pro"
        }
    }
}

configurations {
    trialDebugWearApp
    fullDebugWearApp
    trialReleaseWearApp
    fullReleaseWearApp
}

dependencies {
    ...

    trialDebugWearApp project(path: ':myWearApp', configuration: 'trialDebug')
    fullDebugWearApp project(path: ':myWearApp', configuration: 'fullDebug')
    trialReleaseWearApp project(path: ':myWearApp', configuration: 'trialRelease')
    fullReleaseWearApp project(path: ':myWearApp', configuration: 'fullRelease')
}

wear/build.gradle:

android {
    compileSdkVersion 23
    buildToolsVersion '23.0.3'

    publishNonDefault true

    signingConfigs {
        debug { ... }
        release { ... }
    }

    defaultConfig {
        applicationId "com.sample.myapp"
        minSdkVersion 20
        targetSdkVersion 23
        versionName "3.0.1"
        versionCode 301
    }

    buildTypes {
        debug {
            applicationIdSuffix ".debug"
            minifyEnabled false
            debuggable true
        }
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }

    productFlavors {
        trial {
            applicationIdSuffix ".trial"
        }
        full {
            applicationIdSuffix ".pro"
        }
    }

    dependencies {
        ...
    }
}
like image 29
Tormod Avatar answered Oct 27 '22 01:10

Tormod