Skip to content

Commit 4fa5445

Browse files
authored
Merge pull request #47 from bytedance/yangzhiqian/master
merge internal:optimize hook proguard、improve compatibility、add checkIncrementalInDebug、fix npe cased by refer-checker
2 parents a028267 + 37a0642 commit 4fa5445

File tree

45 files changed

+554
-311
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+554
-311
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
11
# Change Log
2+
### Version 0.1.8
3+
- improve compatibility
4+
- optimize hook proguard
5+
- add checkIncrementalInDebug
6+
- fix npe cased by refer-checker
7+
-
28
### Version 0.1.7
39
- Optimize incremental build and fix bugs
410
- Fix memory leak in plugins

GradleToolKit/src/main/kotlin/com/ss/android/ugc/bytex/gradletoolkit/MergeResources.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,34 +5,34 @@ package com.ss.android.ugc.bytex.gradletoolkit
55
*/
66

77
import com.android.build.gradle.tasks.MergeResources
8-
import com.android.ide.common.resources.ResourceSet
98
import java.io.File
109

10+
//todo fix reflection
1111
fun MergeResources.resourceSetList(): List<File> {
1212
val resourceSets = try {
1313
resourceSetList1()
1414
} catch (e: Exception) {
1515
resourceSetList2()
1616
}
17-
return resourceSets.flatMap { it.sourceFiles }.toSet().toList()
17+
return resourceSets.flatMap { it!!.javaClass.getMethod("getSourceFiles").invoke(it) as List<File> }.toSet().toList()
1818
}
1919

2020

21-
fun MergeResources.resourceSetList1(): Iterable<ResourceSet> {
21+
private fun MergeResources.resourceSetList1(): Iterable<*> {
2222

2323
val computeResourceSetListMethod = MergeResources::class.java.declaredMethods
2424
.find { it.name == "computeResourceSetList" && it.parameterCount == 0 }!!
2525

2626
val oldIsAccessible = computeResourceSetListMethod.isAccessible
2727
try {
2828
computeResourceSetListMethod.isAccessible = true
29-
return computeResourceSetListMethod.invoke(this) as Iterable<ResourceSet>
29+
return computeResourceSetListMethod.invoke(this) as Iterable<*>
3030
} finally {
3131
computeResourceSetListMethod.isAccessible = oldIsAccessible
3232
}
3333
}
3434

35-
fun MergeResources.resourceSetList2(): Iterable<ResourceSet> {
35+
private fun MergeResources.resourceSetList2(): Iterable<*> {
3636
val getConfiguredResourceSets = MergeResources::class.java.declaredMethods
3737
.find { it.name == "getConfiguredResourceSets" && it.parameterCount == 1 }!!
3838

@@ -44,7 +44,7 @@ fun MergeResources.resourceSetList2(): Iterable<ResourceSet> {
4444
try {
4545
getConfiguredResourceSets.isAccessible = true
4646
getPreprocessor.isAccessible = true
47-
return getConfiguredResourceSets.invoke(this, getPreprocessor.invoke(this)) as Iterable<ResourceSet>
47+
return getConfiguredResourceSets.invoke(this, getPreprocessor.invoke(this)) as Iterable<*>
4848
} finally {
4949
getConfiguredResourceSets.isAccessible = getConfiguredResourceSetsAccess
5050
getPreprocessor.isAccessible = getPreprocessorAccess
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/build
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
apply plugin: 'java'
2+
group "$upload_group"
3+
version "$upload_version"
4+
apply from: rootProject.file('gradle/publish.gradle')
5+
dependencies {
6+
compileOnly gradleApi()
7+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ARTIFACT_GROUP=com.bytedance.android.byteX
2+
ARTIFACT_NAME=ProguardConfigurationResolver
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.ss.android.ugc.bytex.proguardconfigurationresolver;
2+
3+
import org.gradle.api.Project;
4+
import org.gradle.api.Task;
5+
import org.gradle.api.file.FileCollection;
6+
7+
import javax.annotation.Nullable;
8+
9+
/**
10+
* Created by yangzhiqian on 2020/7/6<br/>
11+
*/
12+
public abstract class ProguardConfigurationResolver {
13+
protected Project project;
14+
protected String variantName;
15+
16+
public ProguardConfigurationResolver(Project project, String variantName) {
17+
this.project = project;
18+
this.variantName = variantName;
19+
}
20+
21+
@Nullable
22+
public abstract Task getTask();
23+
24+
@Nullable
25+
public abstract FileCollection getAllConfigurationFiles();
26+
}
27+
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/build
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
apply plugin: 'java'
2+
group "$upload_group"
3+
version "$upload_version"
4+
5+
dependencies {
6+
compileOnly gradleApi()
7+
compileOnly "com.android.tools.build:gradle:3.6.2"
8+
implementation project(":ProguardConfigurationResolver")
9+
}
10+
11+
apply from: rootProject.file('gradle/publish.gradle')
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ARTIFACT_GROUP=com.bytedance.android.byteX
2+
ARTIFACT_NAME=ProguardConfigurationResolver-task
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.ss.android.ugc.bytex.proguardconfigurationresolver.task;
2+
3+
import com.android.build.gradle.internal.tasks.ProguardConfigurableTask;
4+
import com.android.build.gradle.internal.tasks.ProguardTask;
5+
import com.android.build.gradle.internal.tasks.R8Task;
6+
import com.ss.android.ugc.bytex.proguardconfigurationresolver.ProguardConfigurationResolver;
7+
8+
import org.gradle.api.Project;
9+
import org.gradle.api.Task;
10+
import org.gradle.api.file.FileCollection;
11+
12+
/**
13+
* Created by yangzhiqian on 2020/7/6<br/>
14+
*/
15+
public class ProguardConfigurableTaskResolver extends ProguardConfigurationResolver {
16+
17+
public ProguardConfigurableTaskResolver(Project project, String variantName) {
18+
super(project, variantName);
19+
}
20+
21+
@Override
22+
public Task getTask() {
23+
for (Task task : project.getTasks()) {
24+
if ((task instanceof ProguardTask || task instanceof R8Task) &&
25+
((ProguardConfigurableTask) task).getVariantName().equals(variantName)) {
26+
return task;
27+
}
28+
}
29+
return null;
30+
}
31+
32+
@Override
33+
public FileCollection getAllConfigurationFiles() {
34+
Task task = getTask();
35+
if (task == null) {
36+
return null;
37+
}
38+
return ((ProguardConfigurableTask) getTask()).getConfigurationFiles();
39+
}
40+
}

0 commit comments

Comments
 (0)