Skip to content

Commit

Permalink
Fix build failures and bump to AGP 3.6 and Gradle 5.6.4 (#167)
Browse files Browse the repository at this point in the history
The build failure was likely due to the legacy errorprone gradle
plugin, which was more than 3 years ago.
https://plugins.gradle.org/plugin/net.ltgt.errorprone/0.0.13

I upgraded errorprone gradle plugin to a recent version,
and also bump the AGP 3.6 and Gradle 5.6.4 because the errorprone
version requires a minimum Gradle 5.2.
https://github.com/tbroyer/gradle-errorprone-plugin/releases/tag/v0.8

I also used the maven publish integration from AGP by using
components.release
https://developer.android.com/studio/build/maven-publish-plugin

I currently disabled `failOnError` on javadoc, as the compilation
configuration is not applied to javadoc's classpath.
Gradle 6 introduced the concept of resolvable and consumable,
so I would recommend we revisit it when we are on Gradle 6.

I tested locally by mavenPublishToLocal using a standalone sample
app with android instrumentation tests. The tests can compile
successfully with proper dependency.

There are some minor changes:
- Prompted by IDE that Closure.DELEGATE_FIRST can be inlined
- New lint warnings that are SoonBlockedPrivateAPI
- Some attempts to fix javadoc errors
- Removed errorprone in test modules
  • Loading branch information
Chao Zhang authored Jun 4, 2020
1 parent 2cd9fbb commit 4b7c28b
Show file tree
Hide file tree
Showing 16 changed files with 121 additions and 256 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ local.properties
*.ipr
*.iws
*.svn
.cxx/
15 changes: 10 additions & 5 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ buildscript {
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.0'
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0'
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.7.3"
classpath 'com.android.tools.build:gradle:3.6.0'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4'
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.15.1"
}
}

Expand Down Expand Up @@ -45,5 +45,10 @@ artifactory {
}

task distributeBuild(type: DistributeTask) {
dependsOn ':artifactoryPublish', 'dexmaker:artifactoryPublish', 'dexmaker-mockito:artifactoryPublish', 'dexmaker-mockito-inline:artifactoryPublish', 'dexmaker-mockito-inline-extended:artifactoryPublish'
dependsOn ':artifactoryPublish',
'dexmaker:artifactoryPublish',
'dexmaker-mockito:artifactoryPublish',
'dexmaker-mockito-inline:artifactoryPublish',
'dexmaker-mockito-inline-extended:artifactoryPublish'
}

12 changes: 0 additions & 12 deletions dexmaker-mockito-inline-extended-tests/build.gradle
Original file line number Diff line number Diff line change
@@ -1,15 +1,3 @@
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "net.ltgt.gradle:gradle-errorprone-plugin:0.0.13"
}
}

apply plugin: "net.ltgt.errorprone"
apply plugin: 'com.android.library'

android {
Expand Down
96 changes: 9 additions & 87 deletions dexmaker-mockito-inline-extended/build.gradle
Original file line number Diff line number Diff line change
@@ -1,21 +1,11 @@
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "net.ltgt.gradle:gradle-errorprone-plugin:0.0.13"
}
plugins {
id("net.ltgt.errorprone") version "0.8"
}

apply plugin: "net.ltgt.errorprone"
apply plugin: 'com.android.library'
apply plugin: 'maven-publish'
apply plugin: 'ivy-publish'
apply plugin: 'com.jfrog.artifactory'
apply from: "$rootDir/gradle/publishing_aar.gradle"

version = VERSION_NAME
description = 'Extension of the Mockito Inline API to allow mocking static methods on the Android Dalvik VM'

android {
compileSdkVersion 28
Expand Down Expand Up @@ -46,81 +36,13 @@ android {
}
}

tasks.withType(JavaCompile) {
options.compilerArgs += ["-Xep:StringSplitter:OFF"]
}

task sourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.srcDirs
}

task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
failOnError false
}

task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}

publishing {
publications {
ivyLib(IvyPublication) {
from new org.gradle.api.internal.java.JavaLibrary(new org.gradle.api.internal.artifacts.publish.DefaultPublishArtifact(project.getName(), 'aar', 'aar', null, new Date(), new File("$buildDir/outputs/aar/${project.getName()}-release.aar"), assemble), project.configurations.implementation.getAllDependencies())
artifact sourcesJar
artifact javadocJar
}

lib(MavenPublication) {
from new org.gradle.api.internal.java.JavaLibrary(new org.gradle.api.internal.artifacts.publish.DefaultPublishArtifact(project.getName(), 'aar', 'aar', null, new Date(), new File("$buildDir/outputs/aar/${project.getName()}-release.aar"), assemble), project.configurations.implementation.getAllDependencies())

artifact sourcesJar
artifact javadocJar

pom.withXml {
asNode().children().last() + {
resolveStrategy = Closure.DELEGATE_FIRST
description = 'Extension of the Mockito Inline API to allow mocking static methods on the Android Dalvik VM'
url 'https://github.com/linkedin/dexmaker'
scm {
url 'https://github.com/linkedin/dexmaker'
connection 'scm:git:git://github.com/linkedin/dexmaker.git'
developerConnection 'https://github.com/linkedin/dexmaker.git'
}
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
distribution 'repo'
}
}

developers {
developer {
id 'com.linkedin'
name 'LinkedIn Corp'
email ''
}
}
}
}

//Useful for inspecting maven artifacts in 'build/repo' after running './gradlew publish'
repositories {
maven {
url = "$rootProject.buildDir/repo"
}
}
}
}
}

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

tasks.withType(JavaCompile) {
options.errorprone.errorproneArgs.add("-Xep:StringSplitter:OFF")
}

dependencies {
Expand Down
12 changes: 0 additions & 12 deletions dexmaker-mockito-inline-tests/build.gradle
Original file line number Diff line number Diff line change
@@ -1,15 +1,3 @@
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "net.ltgt.gradle:gradle-errorprone-plugin:0.0.13"
}
}

apply plugin: "net.ltgt.errorprone"
apply plugin: 'com.android.library'

android {
Expand Down
96 changes: 9 additions & 87 deletions dexmaker-mockito-inline/build.gradle
Original file line number Diff line number Diff line change
@@ -1,21 +1,11 @@
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "net.ltgt.gradle:gradle-errorprone-plugin:0.0.13"
}
plugins {
id("net.ltgt.errorprone") version "0.8"
}

apply plugin: "net.ltgt.errorprone"
apply plugin: 'com.android.library'
apply plugin: 'maven-publish'
apply plugin: 'ivy-publish'
apply plugin: 'com.jfrog.artifactory'
apply from: "$rootDir/gradle/publishing_aar.gradle"

version = VERSION_NAME
description = 'Implementation of the Mockito Inline API for use on the Android Dalvik VM'

android {
compileSdkVersion 28
Expand All @@ -41,85 +31,17 @@ android {
}
}

tasks.withType(JavaCompile) {
options.compilerArgs += ["-Xep:StringSplitter:OFF"]
}

task sourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.srcDirs
}

task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}

publishing {
publications {
ivyLib(IvyPublication) {
from new org.gradle.api.internal.java.JavaLibrary(new org.gradle.api.internal.artifacts.publish.DefaultPublishArtifact(project.getName(), 'aar', 'aar', null, new Date(), new File("$buildDir/outputs/aar/${project.getName()}-release.aar"), assemble), project.configurations.implementation.getAllDependencies())
artifact sourcesJar
artifact javadocJar
}

lib(MavenPublication) {
from new org.gradle.api.internal.java.JavaLibrary(new org.gradle.api.internal.artifacts.publish.DefaultPublishArtifact(project.getName(), 'aar', 'aar', null, new Date(), new File("$buildDir/outputs/aar/${project.getName()}-release.aar"), assemble), project.configurations.implementation.getAllDependencies())

artifact sourcesJar
artifact javadocJar

pom.withXml {
asNode().children().last() + {
resolveStrategy = Closure.DELEGATE_FIRST
description = 'Implementation of the Mockito Inline API for use on the Android Dalvik VM'
url 'https://github.com/linkedin/dexmaker'
scm {
url 'https://github.com/linkedin/dexmaker'
connection 'scm:git:git://github.com/linkedin/dexmaker.git'
developerConnection 'https://github.com/linkedin/dexmaker.git'
}
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
distribution 'repo'
}
}

developers {
developer {
id 'com.linkedin'
name 'LinkedIn Corp'
email ''
}
}
}
}

//Useful for inspecting maven artifacts in 'build/repo' after running './gradlew publish'
repositories {
maven {
url = "$rootProject.buildDir/repo"
}
}
}
}
}

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

tasks.withType(JavaCompile) {
options.errorprone.errorproneArgs.add("-Xep:StringSplitter:OFF")
}

dependencies {
implementation project(':dexmaker')

implementation 'org.mockito:mockito-core:2.28.2', { exclude group: 'net.bytebuddy' }
}

12 changes: 0 additions & 12 deletions dexmaker-mockito-tests/build.gradle
Original file line number Diff line number Diff line change
@@ -1,15 +1,3 @@
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "net.ltgt.gradle:gradle-errorprone-plugin:0.0.13"
}
}

apply plugin: "net.ltgt.errorprone"
apply plugin: 'com.android.library'

android {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ public void copyBlacklistedFields() throws Exception {
parent.measure(100, 100);
}

@SuppressLint({"PrivateApi", "CheckReturnValue"})
@SuppressLint({"PrivateApi", "CheckReturnValue", "SoonBlockedPrivateApi"})
@Test
public void cannotCallBlackListedAfterSpying() {
// Spying and mocking might change the View class's byte code
Expand All @@ -132,7 +132,7 @@ public void cannotCallBlackListedAfterSpying() {
}

public static class CallBlackListedMethod {
@SuppressLint("PrivateApi")
@SuppressLint({"PrivateApi", "SoonBlockedPrivateApi"})
boolean callingBlacklistedMethodCausesException() {
// Settings.Global#isValidZenMode is a blacklisted method. Resolving it should fail
try {
Expand All @@ -151,7 +151,7 @@ public void spiesCannotBeUsedToCallHiddenMethods() {
}

public static abstract class CallBlacklistedMethodAbstract {
@SuppressLint("PrivateApi")
@SuppressLint({"PrivateApi", "SoonBlockedPrivateApi"})
public boolean callingBlacklistedMethodCausesException() {
// Settings.Global#isValidZenMode is a blacklisted method. Resolving it should fail
try {
Expand Down
17 changes: 6 additions & 11 deletions dexmaker-mockito/build.gradle
Original file line number Diff line number Diff line change
@@ -1,15 +1,6 @@
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "net.ltgt.gradle:gradle-errorprone-plugin:0.0.13"
}
plugins {
id("net.ltgt.errorprone") version "0.8"
}

apply plugin: "net.ltgt.errorprone"
apply plugin: 'java'
apply from: "$rootDir/gradle/publishing.gradle"

Expand All @@ -23,6 +14,10 @@ repositories {
jcenter()
}

tasks.withType(JavaCompile) {
options.errorprone.errorproneArgs.add("-Xep:StringSplitter:OFF")
}

dependencies {
implementation project(':dexmaker')

Expand Down
12 changes: 0 additions & 12 deletions dexmaker-tests/build.gradle
Original file line number Diff line number Diff line change
@@ -1,15 +1,3 @@
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "net.ltgt.gradle:gradle-errorprone-plugin:0.0.13"
}
}

apply plugin: "net.ltgt.errorprone"
apply plugin: 'com.android.application'

android {
Expand Down
Loading

0 comments on commit 4b7c28b

Please sign in to comment.