@@ -2,6 +2,7 @@ package top.niunaijun.blackobfuscator
22
33import com.android.build.gradle.AppExtension
44import com.android.build.gradle.api.ApplicationVariant
5+ import com.android.build.gradle.internal.api.ReadOnlyProductFlavor
56import com.android.build.gradle.internal.dsl.BuildType
67import com.android.build.gradle.internal.dsl.ProductFlavor
78import 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