Search code examples
androidandroid-studiobuild.gradlegoogle-cloud-endpointsandroid-studio-3.0

Endpoint client library not recognized


Not sure what happened, but after moving to gradle 3.0.0 rc2, my app module is not recognizing any of the client libraries produced by the endpoint module.

The build can complete w/o any problem with one exception...none of the new API gets picked up by the build.

Here's the dependency section of the gradle file in my app module:

dependencies {
// Gradle dependency check...must be run in the project directory
// ./gradlew -q dependencies app:dependencies --configuration compile

implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation project(path: ':backend', configuration: 'android-endpoints')

Update:

I noticed that the war/jar files are consistently being updated in the backend/build/libs and the zip files are updated as well in backend/build/client-libs.

Update #2:

This occurs with Android Studio 3.0.

Update #3: Apparently, this is a known bug to 3.0 rc2 see here

Update #4 Here's what Google team's suggestion, but I have no idea getting it to work. Anyone?

//In library module:

dependencies {
   api fileTree(include: ['*.jar'], dir: 'libs')
}

gradle file references:

Project level:

buildscript {
repositories {
    jcenter()
    google()
}
dependencies {

    // 2.0
    classpath 'com.google.guava:guava:22.0'
    classpath 'com.android.tools.build:gradle:3.0.0'

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}
}

allprojects {
repositories {
    jcenter()
}
}

task clean(type: Delete) {
delete rootProject.buildDir
}

Endpoint (backend) level:

buildscript {
repositories {
    mavenCentral()
    jcenter()

}
dependencies {
    // V2: Add the new App Engine and Endpoints Frameworks plugin dependencies
    classpath 'com.google.cloud.tools:endpoints-framework-gradle-plugin:1.0.2'
    classpath 'com.google.cloud.tools:appengine-gradle-plugin:1.3.3'

}
}

repositories {
mavenCentral()
jcenter()
}

apply plugin: 'java'
apply plugin: 'war'

// V2: Apply new App Engine and Endpoints Framework server plugins
apply plugin: 'com.google.cloud.tools.appengine'
apply plugin: 'com.google.cloud.tools.endpoints-framework-server'

sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8

dependencies {
// V2: Endpoints Framework v2 migration
implementation 'com.google.endpoints:endpoints-framework:2.0.8'

testImplementation 'junit:junit:4.12'
testImplementation 'com.google.appengine:appengine-testing:1.9.59'
testImplementation 'com.google.appengine:appengine-api-stubs:1.9.59'

// 2.0
//implementation group: 'com.google.endpoints', name: 'endpoints-framework', version: '+'

implementation group: 'com.googlecode.junit-toolbox', name: 'junit-toolbox', version: '1.5'

implementation 'com.googlecode.objectify:objectify:5.1.21'
implementation 'org.json:json:20151123'
implementation 'javax.servlet:servlet-api:2.5'
implementation 'org.apache.httpcomponents:httpclient:4.5.2'
implementation 'com.ganyo:gcm-server:1.0.2'
implementation 'com.google.appengine.tools:appengine-gcs-client:0.4.4'
implementation 'com.google.apis:google-api-services-storage:v1-rev66-1.21.0'
implementation 'com.google.api-client:google-api-client:1.23.0'
implementation 'com.google.http-client:google-http-client-android:1.23.0'

// I think this can be deleted
//implementation 'commons-fileupload:commons-fileupload:1.3.1'


}

appengine {
// All commented out due to v2
//downloadSdk = true
/*appcfg {
    oauth2 = true
}*/
/*endpoints {
    getClientLibsOnBuild = true
    getDiscoveryDocsOnBuild = true
    googleClientVersion = '1.23.0'
}*/

//httpAddress = "0.0.0.0"


}

// 2.0 - optional
endpointsServer {
// Endpoints Framework Plugin server-side configuration
hostname = "mickey-mouse-pooh.appspot.com"
}

App level:

apply plugin: 'com.android.application'

// V2: Apply the new Endpoints Framework client plugin
apply plugin: 'com.google.cloud.tools.endpoints-framework-client'

buildscript {
repositories {
    jcenter()
}
dependencies {
    // V2: Add the new Endpoints Framework plugin dependencies
    classpath 'com.google.cloud.tools:endpoints-framework-gradle-
plugin:1.0.2'
}
}

android {
compileSdkVersion 26
buildToolsVersion '26.0.2'
defaultConfig {
    applicationId "com.inneraries.projectboon"
    minSdkVersion 20 // before to update
    targetSdkVersion 26
    android.compileOptions.sourceCompatibility 1.8
    android.compileOptions.targetCompatibility 1.8
    versionCode 112
    versionName 'Phoenix'
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
productFlavors {

}
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
}

repositories {
jcenter()
maven {
    url "https://maven.google.com"
}
}

dependencies {
// Gradle dependency check...must be run in the project directory
// ./gradlew -q dependencies app:dependencies --configuration compile
implementation fileTree(include: ['*.jar'], dir: 'libs')

// V2
endpointsServer project(path: ':backend', configuration: 'endpoints')

// the "force" element is in place to avoid the conflict from the Facebook SDK 4.36.0 which is
// using 25.3.1 Android SDK
api('com.android.support:appcompat-v7:26.1.0') {
    force = true
}
api('com.android.support:design:26.1.0') {
    force = true
}
// For enabling Google app invite
api 'com.google.firebase:firebase-invites:11.4.2'

api 'com.google.android.gms:play-services-plus:11.4.2'
api 'com.google.android.gms:play-services-auth:11.4.2'
api 'com.google.android.gms:play-services-identity:11.4.2'
api 'com.google.android.gms:play-services-location:11.4.2'
api 'com.google.android.gms:play-services-gcm:11.4.2'
api 'com.facebook.android:facebook-android-sdk:4.27.0'

api 'com.google.api-client:google-api-client:1.23.0'
api 'com.google.http-client:google-http-client-android:1.23.0'
}

// this is to avoid this error
// Warning:Conflict with dependency 'com.google.code.findbugs:jsr305'.
// Resolved versions for app (1.3.9) and test app (2.0.1) differ.
configurations.all {
resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
}

Solution

  • Here's Google's stand as of Nov 1, 2017: Upgrade the framework to v2.

    They also provided some workarounds (your manager might not like this):

    1. Build the client library manually and copy it over. [Use gradle task : appengineEndpointsGetClientLibs]
    2. Export a pre-built jar and copy it over. [Use gradle task : appengineEndpointsExportClientLibs] NOTE : 2 and 3 will require you to add the google-api-client-lib dependency directly on the android app

    3. Try to use the new plugins that use a different mechanism, while it does automatically add source to your project, this does NOT integrate with Android Studio's UI - so you will have to use gradle/command-line tooling directly for running and deploying: https://github.com/GoogleCloudPlatform/endpoints-framework-gradle-plugin/blob/master/ANDROID_README.md

    I have provide my gradle files in the problem description in case you need a reference.