Skip to content

Commit d2d6b86

Browse files
authored
Merge pull request #41 from bytedance/yangzhiqian/master
Upgrade AGP(3.5.3)、Fix memory leak、Run refer-check in single、Unified threadpool
2 parents 03a9563 + edf6eba commit d2d6b86

File tree

35 files changed

+242
-84
lines changed

35 files changed

+242
-84
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.6
3+
- Upgrade AGP 3.5.3
4+
- Fix memory leak in HookProguard
5+
- Run refer-check-plugin in single flow in order to check any issues producted by bytex'plugin
6+
- Unified threadpool and run pipleline lifecycles in parallel
7+
28
### Version 0.1.5
39
- Fix bugs with getter-setter-inline plugins
410

GradleToolKit/GradleEnvApi/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ group "$upload_group"
33
version "$upload_version"
44
dependencies {
55
implementation fileTree(dir: 'libs', include: ['*.jar'])
6-
compile gradleApi()
6+
compileOnly gradleApi()
77
compileOnly "com.android.tools.build:gradle:$gradle_version"
88
}
99
sourceCompatibility = "1.8"

GradleToolKit/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ group "$upload_group"
66
version "$upload_version"
77
dependencies {
88
kapt 'com.google.auto.service:auto-service:1.0-rc4'
9-
compile gradleApi()
9+
compileOnly gradleApi()
1010
compileOnly "com.android.tools.build:gradle:$gradle_version"
1111
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
1212
compile project(':GradleEnvApi')
1313

14-
compile ('com.google.auto.service:auto-service:1.0-rc4') {
14+
compile('com.google.auto.service:auto-service:1.0-rc4') {
1515
exclude module: 'guava'
1616
}
17-
implementation "com.didiglobal.booster:booster-android-gradle-api:1.2.0"
17+
implementation "com.didiglobal.booster:booster-android-gradle-api:2.0.0"
1818
}
1919
sourceCompatibility = "1.8"
2020
targetCompatibility = "1.8"

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

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,48 @@ 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
89
import java.io.File
910

1011
fun MergeResources.resourceSetList(): List<File> {
12+
val resourceSets = try {
13+
resourceSetList1()
14+
} catch (e: Exception) {
15+
resourceSetList2()
16+
}
17+
return resourceSets.flatMap { it.sourceFiles }.toSet().toList()
18+
}
19+
20+
21+
fun MergeResources.resourceSetList1(): Iterable<ResourceSet> {
1122

1223
val computeResourceSetListMethod = MergeResources::class.java.declaredMethods
13-
.firstOrNull { it.name == "computeResourceSetList" && it.parameterCount == 0 }
14-
?: return emptyList()
24+
.find { it.name == "computeResourceSetList" && it.parameterCount == 0 }!!
1525

1626
val oldIsAccessible = computeResourceSetListMethod.isAccessible
1727
try {
1828
computeResourceSetListMethod.isAccessible = true
29+
return computeResourceSetListMethod.invoke(this) as Iterable<ResourceSet>
30+
} finally {
31+
computeResourceSetListMethod.isAccessible = oldIsAccessible
32+
}
33+
}
1934

20-
val resourceSets = computeResourceSetListMethod.invoke(this) as? Iterable<*>
21-
?: return emptyList()
35+
fun MergeResources.resourceSetList2(): Iterable<ResourceSet> {
36+
val getConfiguredResourceSets = MergeResources::class.java.declaredMethods
37+
.find { it.name == "getConfiguredResourceSets" && it.parameterCount == 1 }!!
2238

23-
return resourceSets.mapNotNull { resourceSet ->
24-
val getSourceFiles = resourceSet?.javaClass?.methods?.find { it.name == "getSourceFiles" && it.parameterCount == 0 }
25-
val files = getSourceFiles?.invoke(resourceSet)
26-
@Suppress("UNCHECKED_CAST")
27-
files as? Iterable<File>
28-
}.flatten()
39+
val getPreprocessor = MergeResources::class.java.declaredMethods
40+
.find { it.name == "getPreprocessor" && it.parameterCount == 0 }!!
2941

42+
val getConfiguredResourceSetsAccess = getConfiguredResourceSets.isAccessible
43+
val getPreprocessorAccess = getPreprocessor.isAccessible
44+
try {
45+
getConfiguredResourceSets.isAccessible = true
46+
getPreprocessor.isAccessible = true
47+
return getConfiguredResourceSets.invoke(this, getPreprocessor.invoke(this)) as Iterable<ResourceSet>
3048
} finally {
31-
computeResourceSetListMethod.isAccessible = oldIsAccessible
49+
getConfiguredResourceSets.isAccessible = getConfiguredResourceSetsAccess
50+
getPreprocessor.isAccessible = getPreprocessorAccess
3251
}
3352
}
Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.ss.android.ugc.bytex.gradletoolkit
22

33
import com.android.build.gradle.tasks.MergeSourceSetFolders
4+
import com.android.ide.common.resources.AssetSet
45
import java.io.File
56

67
/**
@@ -9,27 +10,37 @@ import java.io.File
910

1011

1112
fun MergeSourceSetFolders.assetSetList(): List<File> {
13+
val assetSets = try {
14+
assetSetList1()
15+
} catch (e: Exception) {
16+
assetSetList2()
17+
}
18+
return assetSets.flatMap { it.sourceFiles }.toSet().toList()
19+
}
20+
1221

22+
fun MergeSourceSetFolders.assetSetList1(): Iterable<AssetSet> {
1323
val computeAssetSetListMethod = MergeSourceSetFolders::class.java.declaredMethods
14-
.firstOrNull { it.name == "computeAssetSetList" && it.parameterCount == 0 }
15-
?: return emptyList()
24+
.find { it.name == "computeAssetSetList" && it.parameterCount == 0 }!!
1625

1726
val oldIsAccessible = computeAssetSetListMethod.isAccessible
1827
try {
1928
computeAssetSetListMethod.isAccessible = true
29+
return computeAssetSetListMethod.invoke(this) as Iterable<AssetSet>
30+
} finally {
31+
computeAssetSetListMethod.isAccessible = oldIsAccessible
32+
}
33+
}
2034

21-
val assetSets = computeAssetSetListMethod.invoke(this) as? Iterable<*>
22-
?: return emptyList()
23-
24-
return assetSets.mapNotNull { assetSet ->
25-
val getSourceFiles = assetSet?.javaClass?.methods?.find { it.name == "getSourceFiles" && it.parameterCount == 0 }
26-
val files = getSourceFiles?.invoke(assetSet)
27-
@Suppress("UNCHECKED_CAST")
28-
files as? Iterable<File>
29-
}.flatten()
35+
fun MergeSourceSetFolders.assetSetList2(): Iterable<AssetSet> {
36+
val computeAssetSetListMethod = MergeSourceSetFolders::class.java.declaredMethods
37+
.find { it.name == "computeAssetSetList\$gradle" && it.parameterCount == 0 }!!
3038

39+
val oldIsAccessible = computeAssetSetListMethod.isAccessible
40+
try {
41+
computeAssetSetListMethod.isAccessible = true
42+
return computeAssetSetListMethod.invoke(this) as Iterable<AssetSet>
3143
} finally {
3244
computeAssetSetListMethod.isAccessible = oldIsAccessible
3345
}
34-
35-
}
46+
}

HookProguard/src/main/java/com/ss/android/ugc/bytex/hookproguard/KeepClassSpecificationHolder.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ class KeepClassSpecificationHolder {
1515
private final KeepClassSpecification instance;
1616
private StringMatcher classNameMatcher;
1717
private List<MemberSpecificationHolder> methodSpecifications;
18-
private Node extendsClassNode;
1918

2019
KeepClassSpecificationHolder(KeepClassSpecification instance, StringParser parser) {
2120
this.instance = instance;
@@ -50,9 +49,6 @@ void parserMethodSpecifications(StringParser parser) {
5049
}
5150

5251
Node computeExtendsClassNode(Graph graph) {
53-
if (extendsClassNode == null) {
54-
extendsClassNode = graph.get(instance.extendsClassName);
55-
}
56-
return extendsClassNode;
52+
return graph.get(instance.extendsClassName);
5753
}
5854
}

PluginConfig/PluginConfigProcessor/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ apply plugin: 'java'
33
dependencies {
44
implementation fileTree(dir: 'libs', include: ['*.jar'])
55
compile('com.google.auto.service:auto-service:1.0-rc4')
6+
annotationProcessor 'com.google.auto.service:auto-service:1.0-rc4'
67
compile project(':PluginConfigAnnotation')
78
}
89
sourceCompatibility = "1.8"

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ Add those configuration code to your build.gradle, and apply your plugins on dem
7474

7575
```groovy
7676
buildscript {
77-
ext.plugin_version="0.1.4"
77+
ext.plugin_version="0.1.6"
7878
repositories {
7979
google()
8080
jcenter()

README_zh.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ ByteX是一个基于gradle transform api和ASM的字节码插件平台(或许
6565

6666
```groovy
6767
buildscript {
68-
ext.plugin_version="0.1.4"
68+
ext.plugin_version="0.1.6"
6969
repositories {
7070
google()
7171
jcenter()

TransformEngine/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ apply plugin: 'java-library'
22
apply plugin: 'kotlin'
33
dependencies {
44
implementation fileTree(dir: 'libs', include: ['*.jar'])
5-
compile gradleApi()
5+
compileOnly gradleApi()
66
compileOnly "com.android.tools.build:gradle:$gradle_version"
77
compile "com.google.guava:guava:$guava_version"
88
testCompile 'com.squareup.okio:okio:1.14.0'

0 commit comments

Comments
 (0)