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
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):
I have provide my gradle files in the problem description in case you need a reference.
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/).