skip to Main Content

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'
}

2

Answers


  1. Chosen as BEST ANSWER

    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.


  2. I have investigated this issue in the last 10 days and this is what I’ve understood. Google philosophy about endpoint develpment, which has been integrated in Android Studio since the first introduction, has changed. As a matter of fact, Android Studio 3 will not provide native support to Endpoint (indeed, you cannot add the endpoint module anymore).
    Basically, they are trying to separate backend development (which should be general for all platforms) from client side development. Therefore, they will encourage you to develop the backend on IntelliJ and then import generated libraries in your ‘lib’ folder (which is now a default folder on project creation). They have also provided dedicated endpoint deployment tools for IntelliJ (see https://cloud.google.com/tools/intellij/docs/).

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search