Search code examples
gradlewear-os

Issue with bundling Android Wear1 app's with android gradle plugin 3.0.1


I cannot get the Wear1 signed APK into the res/raw folder of my signed mobile apk file since using the latest android gradle plugin 3.0.1

I have to use the latest gradle to get the google repo for certain dependencies.

I have checked the wear apk and it is signed with my production signature.

I know the preferred method going forward is to unbundle and I can successfully do that but Google's acknowledged latency issue on installing Wear 1 apps that way makes it unattractive at this time.

Below are my gradle files.

Project build.config

buildscript {
    repositories {
        google()
        jcenter()

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

Mobile build.config

apply plugin: 'com.android.application'
apply from: rootProject.file('shared-config/android-signing.gradle')


android {
    compileSdkVersion 27
    buildToolsVersion '27.0.2'

    defaultConfig {
        applicationId "com.me.myapp"
        minSdkVersion 18
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        debug {
            signingConfig signingConfigs.debug
        }

        release {
            signingConfig signingConfigs.release
        }
    }

    flavorDimensions "environment"

    productFlavors {

        development {
            dimension "environment"
        }

        production {
            dimension "environment"
        }
    }
}

configurations {
    developmentReleaseWearApp
    productionReleaseWearApp
}

dependencies {
    implementation 'com.google.android.gms:play-services-wearable:11.8.0'
    implementation 'com.android.support:support-compat:27.1.0'
    implementation 'com.android.support:percent:27.1.0'

    implementation 'com.android.support.constraint:constraint-layout:1.0.2'

    developmentReleaseWearApp project(path: ':wear', configuration: 'wear1Release')
    productionReleaseWearApp project(path: ':wear', configuration: 'wear1Release')

    implementation 'com.android.support:support-annotations:27.1.0'
    implementation 'com.android.support:appcompat-v7:27.1.0'
    implementation 'com.android.support:recyclerview-v7:27.1.0'
    implementation 'com.android.support:preference-v14:27.1.0'
    implementation 'com.android.support:design:27.1.0'
    implementation 'com.android.support:support-v13:27.1.0'
    provided 'com.google.android.wearable:wearable:2.2.0'
    implementation 'com.google.android.support:wearable:2.2.0'
}

Wear build.config

apply plugin: 'com.android.application'
apply from: rootProject.file('shared-config/android-signing.gradle')

android {
    compileSdkVersion 27
    buildToolsVersion '27.0.2'

    publishNonDefault true

    defaultConfig {
        applicationId "com.me.myapp"
        minSdkVersion 23
        targetSdkVersion 27
        versionCode 2
        versionName "1.0"
    }
    buildTypes {
        debug {
            signingConfig signingConfigs.debug
        }

        release {
            signingConfig signingConfigs.release
        }
    }

    flavorDimensions "wearVersion"

    productFlavors {
        wear1 {
            dimension "wearVersion"
            // Use the defaultConfig value
        }
        wear2 {
            dimension "wearVersion"
            minSdkVersion 24
        }
    }

    configurations {
        wear1Release
        wear2Release
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "com.google.android.gms:play-services-wearable:11.8.0"
    implementation "com.android.support:support-compat:27.1.0"
    implementation "com.android.support:support-annotations:27.1.0"
    implementation "com.android.support:appcompat-v7:27.1.0"
    implementation "com.android.support:recyclerview-v7:27.1.0"
    implementation "com.android.support:percent:27.1.0"
    implementation "com.android.support:support-v4:27.1.0"
    implementation "com.android.support:wear:27.1.0"
    implementation "com.google.android.support:wearable:2.2.0"
    implementation "com.android.support.constraint:constraint-layout:1.1.0-beta5"
    provided 'com.google.android.wearable:wearable:2.2.0'

}

settings.gradle

include ':mobile'
include ':wear'

gradle-wrapper.properties

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip

Solution

  • I was having the same problem this week. Today I finally managed to get the wear app correctly embedded into the mobile app APK using the 3.0.1 gradle. I added a productFlavor to my wear app build.gradle to match the productFlavor of the mobile app that I was generating the build for. Trying to specify a differently-named wear app configuration in the mobile app's build.gradle dependency list seemed to be the problem for me.

    I would suggest trying to add development and production flavors to your wear app build.gradle:

    development {
                    dimension "wearVersion"
                    // Use the defaultConfig value
                }
    
    production {
                    dimension "wearVersion"
                    // Use the defaultConfig value
                }
    

    and then change your mobile app build.gradle dependency to simply:

    wearApp project(path: ':wear')
    

    When you generate the build, it should match productFlavor to productFlavor by default and that is working for me.