Skip to content

Commit f8a5b27

Browse files
committed
support mapping
1 parent 85d39c6 commit f8a5b27

File tree

12 files changed

+169
-60
lines changed

12 files changed

+169
-60
lines changed

app/build.gradle

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,36 +20,39 @@ android {
2020

2121
buildTypes {
2222
release {
23-
minifyEnabled false
23+
minifyEnabled true
2424
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
2525
}
2626

2727
debug {
28-
minifyEnabled false
28+
minifyEnabled true
2929
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
3030
}
3131

3232
googleplay {
33-
minifyEnabled false
33+
minifyEnabled true
3434
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
3535
}
3636
}
3737

38-
productFlavors {
39-
app {
40-
applicationId "com.ghosthing.ball"
41-
}
42-
43-
}
44-
compileOptions {
38+
// productFlavors {
39+
// app {
40+
// applicationId "com.ghosthing.ball"
41+
// }
42+
//
43+
// cpp {
44+
// applicationId "com.ghosthing.ball"
45+
// }
46+
// }
47+
compileOptions {
4548
sourceCompatibility JavaVersion.VERSION_1_8
4649
targetCompatibility JavaVersion.VERSION_1_8
4750
}
4851
}
4952

5053
BlackObfuscator {
5154
enabled true
52-
obfClass = ["MainActivity", "com.bbb"]
55+
obfClass = ["top.niunaijun.blackobfuscator.asplugin", "androidx.core.app"]
5356
}
5457

5558
dependencies {
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package top.niunaijun.blackobfuscator.asplugin;
2+
3+
/**
4+
* Created by Milk on 2022/1/13.
5+
* * ∧_∧
6+
* (`・ω・∥
7+
* 丶 つ0
8+
* しーJ
9+
* 此处无Bug
10+
*/
11+
public class Abx {
12+
public static boolean go() {
13+
return System.currentTimeMillis() > 0;
14+
}
15+
}

app/src/main/java/top/niunaijun/blackobfuscator/asplugin/MainActivity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,6 @@ protected void onCreate(Bundle savedInstanceState) {
1616
} else {
1717
Log.d("123", "onCreate: aax1xaaa");
1818
}
19+
Log.d("123", "onCreate: " + Abx.go());
1920
}
2021
}
Binary file not shown.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
ed7bf432cc57babf03a25c5a0ff95abc
1+
eb035af7c6ce60caf3ab9c762a96e98d
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
803f254bf5ef5711f0f6cf94f55b1237d3f8e7c8
1+
eaab39a87530bce1ff233150bed9bd1c786c64d1

localRepo/top/niunaijun/blackobfuscator/plugin/maven-metadata.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@
77
<versions>
88
<version>1.0.0</version>
99
</versions>
10-
<lastUpdated>20220111141950</lastUpdated>
10+
<lastUpdated>20220113045741</lastUpdated>
1111
</versioning>
1212
</metadata>
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
ab00298c03962a3ffdc635a350badc08
1+
a4e0ad7fcf21d4047bf1348dbbbeae58
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
5472636145974a6e10fa5af7b149bed773731c73
1+
ef65fe9ba949d79e0d61ed67e5197027f3a5221b

plugin/src/main/groovy/top/niunaijun/blackobfuscator/ObfPlugin.groovy

Lines changed: 34 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package top.niunaijun.blackobfuscator
22

33
import com.android.build.gradle.AppExtension
44
import com.android.build.gradle.api.ApplicationVariant
5+
import com.android.build.gradle.internal.api.ReadOnlyProductFlavor
56
import com.android.build.gradle.internal.dsl.BuildType
67
import com.android.build.gradle.internal.dsl.ProductFlavor
78
import com.android.build.gradle.internal.tasks.DexMergingTask
@@ -13,13 +14,15 @@ public class ObfPlugin implements Plugin<Project> {
1314
private String PLUGIN_NAME = "BlackObfuscator"
1415
private Project mProject
1516
public static BlackObfuscatorExtension sObfuscatorExtension
17+
public Map<String, String> mTaskMapping = new HashMap<>()
1618

1719
void apply(Project project) {
1820
this.mProject = project
1921
def android = project.extensions.findByType(AppExtension)
2022
project.configurations.create(PLUGIN_NAME).extendsFrom(project.configurations.implementation)
2123
sObfuscatorExtension = project.extensions.create(PLUGIN_NAME, BlackObfuscatorExtension, project)
2224

25+
mTaskMapping.clear()
2326
project.afterEvaluate {
2427
System.out.println("=====BlackObfuscator=====")
2528
System.out.println(sObfuscatorExtension.toString())
@@ -36,46 +39,36 @@ public class ObfPlugin implements Plugin<Project> {
3639
task.getOutputs().getFiles().collect().each() { element ->
3740
def file = new File(element.toString())
3841
ObfDex.obf(file.getAbsolutePath(),
39-
sObfuscatorExtension.depth, sObfuscatorExtension.obfClass, sObfuscatorExtension.blackClass)
42+
sObfuscatorExtension.depth,
43+
sObfuscatorExtension.obfClass,
44+
sObfuscatorExtension.blackClass,
45+
mTaskMapping.get(task.name))
4046
}
4147
}
4248
}
4349
List<Task> tasks = new ArrayList<>()
44-
addTask("mergeDexRelease", tasks)
45-
addTask("mergeDexDebug", tasks)
46-
addTask("mergeLibDexDebug", tasks)
47-
addTask("mergeProjectDexDebug", tasks)
48-
addTask("transformDexArchiveWithDexMergerForDebug", tasks)
49-
addTask("transformDexArchiveWithDexMergerForRelease", tasks)
50-
addTask("minifyReleaseWithR8", tasks)
51-
addTask("minifyDebugWithR8", tasks)
52-
53-
List<String> buildTypes = new ArrayList<>()
54-
List<String> productFlavors = new ArrayList<>()
5550
if (android != null) {
5651
android.applicationVariants.all(new Action<ApplicationVariant>() {
5752
@Override
5853
void execute(ApplicationVariant applicationVariant) {
59-
def name = upperCaseFirst(applicationVariant.buildType.name)
60-
buildTypes.add(name)
61-
}
62-
})
63-
android.productFlavors.all(new Action<ProductFlavor>() {
64-
@Override
65-
void execute(ProductFlavor productFlavor) {
66-
def name = upperCaseFirst(productFlavor.name)
67-
productFlavors.add(name)
54+
File mappingFile = null
55+
if (applicationVariant.buildType.minifyEnabled) {
56+
mappingFile = applicationVariant.mappingFile
57+
}
58+
def buildType = upperCaseFirst(applicationVariant.buildType.name)
59+
boolean empty = true
60+
for (ReadOnlyProductFlavor flavor : applicationVariant.productFlavors) {
61+
def flavorName = upperCaseFirst(flavor.name)
62+
addOtherTask(tasks, flavorName, buildType, mappingFile)
63+
empty = false
64+
}
65+
if (empty) {
66+
addOtherTask(tasks, "", buildType, mappingFile)
67+
}
6868
}
6969
})
7070
}
7171

72-
for (String buildType : buildTypes) {
73-
for (String product : productFlavors) {
74-
addOtherTask(tasks, product, buildType)
75-
}
76-
addOtherTask(tasks, "", buildType)
77-
}
78-
7972
for (Task task : tasks) {
8073
task.doLast(action)
8174
}
@@ -85,26 +78,29 @@ public class ObfPlugin implements Plugin<Project> {
8578
}
8679
}
8780

88-
private void addOtherTask(List<Task> tasks, String name, String buildType) {
89-
addTask("mergeDex${name}${buildType}", tasks)
90-
addTask("mergeLibDex${name}${buildType}", tasks)
91-
addTask("mergeProjectDex${name}${buildType}", tasks)
92-
addTask("transformDexArchiveWithDexMergerFor${name}${buildType}", tasks)
93-
addTask("minify${name}${buildType}WithR8", tasks)
81+
private void addOtherTask(List<Task> tasks, String name, String buildType, File mappingFile) {
82+
addTask("mergeDex${name}${buildType}", tasks, mappingFile)
83+
addTask("mergeLibDex${name}${buildType}", tasks, mappingFile)
84+
addTask("mergeProjectDex${name}${buildType}", tasks, mappingFile)
85+
addTask("transformDexArchiveWithDexMergerFor${name}${buildType}", tasks, mappingFile)
86+
addTask("minify${name}${buildType}WithR8", tasks, mappingFile)
87+
88+
println("$name$buildType mappingFile $mappingFile")
9489
}
9590

9691
private String upperCaseFirst(String val) {
97-
char[] arr = val.toCharArray();
98-
arr[0] = Character.toUpperCase(arr[0]);
99-
return new String(arr);
92+
char[] arr = val.toCharArray()
93+
arr[0] = Character.toUpperCase(arr[0])
94+
return new String(arr)
10095
}
10196

102-
private void addTask(String name, List<Task> tasks) {
97+
private void addTask(String name, List<Task> tasks, File mappingFile) {
10398
try {
10499
//Protected code
105100
Task task = mProject.tasks.getByName(name)
106101
if (!tasks.contains(task)) {
107102
tasks.add(task)
103+
mTaskMapping.put(task.name, mappingFile.absolutePath)
108104
println("add Task $name")
109105
}
110106
} catch(UnknownTaskException e1) {

0 commit comments

Comments
 (0)