Как рандомизировать словари ProGuard для каждой сборки? - PullRequest
2 голосов
/ 03 апреля 2020

Я нашел статью , в которой вводится концепция рандомизации словарных статей вместо использования стандартных «a, b, c, ...» для имен классов и переменных при запутывании. Он объясняет, что задачи можно запускать в gradle при сборке, чтобы создать случайный текстовый файл, который может заменить файл, предоставленный по умолчанию:

tasks.whenTaskAdded { currentTask ->
    //Android Gradle plugin may change this task name in the future
    def prefix = 'transformClassesAndResourcesWithProguardFor'
    if (currentTask.name.startsWith(prefix)) {
        def taskName = currentTask.name.replace(prefix,
                       'createProguardDictionariesFor')
        task "$taskName" {
            doLast {
                createRandomizedDictonaries()
            }
        }

        //append scramble task to proguard task
        currentTask.dependsOn "$taskName"
    }
}

Однако я не знаю, как он запускает createRandomizedDictonaries() в gradle и как он создает текстовый файл, который содержит случайный список букв / целых чисел / символов. Лог c может выглядеть примерно так:

  • Запуск функции из класса из gradle.
  • Считывание строк в главном текстовом файле (в приложении) и добавление их одного по одному в строку Arraylist с al oop? Потенциально объединить это с некоторыми логиками рандомизации c, чтобы добавить только X строк из текстового файла?
  • Если все строки были добавлены в Arraylist, используйте некоторые логики рандомизации c, чтобы добавить X строк в другой string Arraylist, который должен использоваться для обфускации ProGuard.
  • Создайте новый текстовый файл со случайными строками из Arraylist.
  • Direct ProGuard использует новый сгенерированный текстовый файл для запутывания.

Приветствуются решения для kotlin и java.

...