Skip to content

Commit dca835f

Browse files
committed
Supported com.android.tools.build:gradle:3.1.0.
1 parent 93d286e commit dca835f

File tree

14 files changed

+126
-32
lines changed

14 files changed

+126
-32
lines changed

AndroidStub/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ uploadArchives {
6262
}
6363

6464
dependencies {
65-
compile 'com.android.support:support-annotations:22.2.0'
66-
compile 'com.android.databinding:library:1.3.1'
67-
compile 'com.android.databinding:baseLibrary:3.0.0'
65+
api 'com.android.support:support-annotations:22.2.0'
66+
api 'com.android.databinding:library:1.3.1'
67+
api 'com.android.databinding:baseLibrary:3.0.0'
6868
}

PluginDemo/app/build.gradle

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
apply plugin: 'com.android.application'
22

33
android {
4-
compileSdkVersion 23
5-
buildToolsVersion "25.0.2"
4+
compileSdkVersion VERSION_COMPILE_SDK
5+
buildToolsVersion VERSION_BUILD_TOOLS
66

77
defaultConfig {
88
applicationId "com.didi.virtualapk.demo"
9-
minSdkVersion 15
10-
targetSdkVersion 15
9+
minSdkVersion VERSION_MIN_SDK
10+
targetSdkVersion VERSION_TARGET_SDK
1111
versionName "1.0.0"
1212
versionCode 1
1313
}
14+
compileOptions {
15+
sourceCompatibility SOURCE_COMPATIBILITY
16+
}
1417

1518
flavorDimensions "demo"
1619
productFlavors {
@@ -50,8 +53,8 @@ android {
5053
dependencies {
5154
// the following aars are also compiled in host project, so they will be filterd when build plugin apk.
5255
// but, wo can still visit their Class and Resources.
53-
compile 'com.android.support:appcompat-v7:23.4.0'
54-
compile 'com.didi.virtualapk:core:0.9.6-dev'
56+
implementation 'com.android.support:appcompat-v7:23.4.0'
57+
implementation 'com.didi.virtualapk:core:0.9.6'
5558
}
5659

5760
apply plugin: 'com.didi.virtualapk.plugin'

PluginDemo/build.gradle

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,16 @@ buildscript {
1010
}
1111
}
1212

13+
ext {
14+
VERSION_COMPILE_SDK = 27
15+
VERSION_BUILD_TOOLS = '26.0.2'
16+
17+
VERSION_MIN_SDK = 15
18+
VERSION_TARGET_SDK = 25
19+
20+
SOURCE_COMPATIBILITY = JavaVersion.VERSION_1_7
21+
}
22+
1323
allprojects {
1424
repositories {
1525
google()

PluginDemo/gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
6+
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip

app/build.gradle

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,11 @@ android {
4545
}
4646

4747
dependencies {
48-
compile fileTree(dir: 'libs', include: ['*.jar'])
49-
testCompile 'junit:junit:4.12'
48+
implementation fileTree(dir: 'libs', include: ['*.jar'])
49+
testImplementation 'junit:junit:4.12'
5050

51-
compile 'com.android.support:appcompat-v7:23.4.0'
52-
compile 'com.didi.virtualapk:core:0.9.6-dev'
53-
// compile project (':CoreLibrary')
51+
implementation 'com.android.support:appcompat-v7:23.4.0'
52+
implementation 'com.didi.virtualapk:core:0.9.6'
53+
// implementation project (':CoreLibrary')
5454

5555
}

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ buildscript {
1616

1717
ext {
1818
VERSION_COMPILE_SDK = 27
19-
VERSION_BUILD_TOOLS = '25.0.2'
19+
VERSION_BUILD_TOOLS = '26.0.2'
2020

2121
VERSION_MIN_SDK = 15
2222
VERSION_TARGET_SDK = 25

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
6+
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip

virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/BasePlugin.groovy

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@ package com.didi.virtualapk
22

33
import com.android.build.gradle.AppExtension
44
import com.android.build.gradle.AppPlugin
5-
import com.android.build.gradle.internal.TaskContainerAdaptor
65
import com.android.build.gradle.internal.TaskFactory
6+
import com.android.build.gradle.internal.TaskManager
77
import com.android.build.gradle.internal.api.ApplicationVariantImpl
88
import com.android.build.gradle.internal.variant.VariantFactory
9-
import com.android.builder.core.VariantConfiguration
109
import com.android.builder.core.VariantType
1110
import com.didi.virtualapk.tasks.AssemblePlugin
1211
import com.didi.virtualapk.utils.Log
@@ -44,6 +43,14 @@ public abstract class BasePlugin implements Plugin<Project> {
4443
@Override
4544
public void apply(Project project) {
4645
this.project = project
46+
project.ext.set(Constants.GRADLE_3_1_0, false)
47+
48+
try {
49+
Class.forName('com.android.builder.core.VariantConfiguration')
50+
} catch (Throwable e) {
51+
// com.android.tools.build:gradle:3.1.0
52+
project.ext.set(Constants.GRADLE_3_1_0, true)
53+
}
4754

4855
AppPlugin appPlugin = project.plugins.findPlugin(AppPlugin)
4956

@@ -69,7 +76,12 @@ public abstract class BasePlugin implements Plugin<Project> {
6976

7077
project.extensions.create('virtualApk', VAExtention)
7178

72-
taskFactory = new TaskContainerAdaptor(project.tasks)
79+
if (project.extensions.extraProperties.get(Constants.GRADLE_3_1_0)) {
80+
TaskManager taskManager = Reflect.on(appPlugin).field('taskManager').get()
81+
taskFactory = taskManager.getTaskFactory()
82+
} else {
83+
taskFactory = Reflect.on('com.android.build.gradle.internal.TaskContainerAdaptor').create(project.tasks).get()
84+
}
7385
project.afterEvaluate {
7486

7587
if (!checkVariantFactoryInvoked) {
@@ -84,12 +96,18 @@ public abstract class BasePlugin implements Plugin<Project> {
8496

8597
taskFactory.create(variantPluginTaskName, AssemblePlugin, configAction)
8698

87-
taskFactory.named("assemblePlugin", new Action<Task>() {
99+
Action action = new Action<Task>() {
88100
@Override
89101
void execute(Task task) {
90102
task.dependsOn(variantPluginTaskName)
91103
}
92-
})
104+
}
105+
106+
if (project.extensions.extraProperties.get(Constants.GRADLE_3_1_0)) {
107+
taskFactory.configure("assemblePlugin", action)
108+
} else {
109+
taskFactory.named("assemblePlugin", action)
110+
}
93111
}
94112
}
95113
}
@@ -120,7 +138,12 @@ public abstract class BasePlugin implements Plugin<Project> {
120138
}
121139

122140
appPlugin.variantManager.productFlavors.each {
123-
String variantName = VariantConfiguration.computeFullName(it.key, buildType, VariantType.DEFAULT, null)
141+
String variantName
142+
if (project.extensions.extraProperties.get(Constants.GRADLE_3_1_0)) {
143+
variantName = com.android.build.gradle.internal.core.VariantConfiguration.computeFullName(it.key, buildType, VariantType.DEFAULT, null)
144+
} else {
145+
variantName = com.android.builder.core.VariantConfiguration.computeFullName(it.key, buildType, VariantType.DEFAULT, null)
146+
}
124147
def variantPluginTaskName = createPluginTaskName("assemble${variantName.capitalize()}Plugin".toString())
125148
pluginTasks.add(variantPluginTaskName)
126149
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.didi.virtualapk
2+
3+
public final class Constants {
4+
public static final String GRADLE_3_1_0 = 'va.gradle.3.1.0'
5+
}

virtualapk-gradle-plugin/src/main/groovy/com.didi.virtualapk/VAHostPlugin.groovy

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.android.build.gradle.internal.transforms.ProGuardTransform
99
import com.android.build.gradle.tasks.ProcessAndroidResources
1010
import com.didi.virtualapk.utils.FileUtil
1111
import com.didi.virtualapk.utils.Log
12+
import com.google.common.collect.ImmutableMap
1213
import org.gradle.api.Plugin
1314
import org.gradle.api.Project
1415
import org.gradle.api.artifacts.component.ComponentIdentifier
@@ -32,7 +33,15 @@ public class VAHostPlugin implements Plugin<Project> {
3233
public void apply(Project project) {
3334

3435
this.project = project
36+
project.ext.set(Constants.GRADLE_3_1_0, false)
3537

38+
try {
39+
Class.forName('com.android.builder.core.VariantConfiguration')
40+
} catch (Throwable e) {
41+
// com.android.tools.build:gradle:3.1.0
42+
project.ext.set(Constants.GRADLE_3_1_0, true)
43+
}
44+
3645
//The target project must be a android application module
3746
if (!project.plugins.hasPlugin('com.android.application')) {
3847
Log.e(TAG, "application required!")
@@ -86,8 +95,15 @@ public class VAHostPlugin implements Plugin<Project> {
8695
FileUtil.saveFile(vaHostDir, "versions", {
8796
List<String> deps = new ArrayList<String>()
8897
Log.i TAG, "Used compileClasspath: ${applicationVariant.name}"
89-
Set<ArtifactDependencyGraph.HashableResolvedArtifactResult> compileArtifacts = ArtifactDependencyGraph.getAllArtifacts(
90-
applicationVariant.variantData.scope, AndroidArtifacts.ConsumedConfigType.COMPILE_CLASSPATH, null)
98+
Set<ArtifactDependencyGraph.HashableResolvedArtifactResult> compileArtifacts
99+
if (project.extensions.extraProperties.get(Constants.GRADLE_3_1_0)) {
100+
ImmutableMap<String, String> buildMapping = com.android.build.gradle.internal.ide.ModelBuilder.computeBuildMapping(project.gradle)
101+
compileArtifacts = ArtifactDependencyGraph.getAllArtifacts(
102+
applicationVariant.variantData.scope, AndroidArtifacts.ConsumedConfigType.COMPILE_CLASSPATH, null, buildMapping)
103+
} else {
104+
compileArtifacts = ArtifactDependencyGraph.getAllArtifacts(
105+
applicationVariant.variantData.scope, AndroidArtifacts.ConsumedConfigType.COMPILE_CLASSPATH, null)
106+
}
91107

92108
compileArtifacts.each { ArtifactDependencyGraph.HashableResolvedArtifactResult artifact ->
93109
ComponentIdentifier id = artifact.id.componentIdentifier

0 commit comments

Comments
 (0)