Я нашел статью , в которой вводится концепция рандомизации словарных статей вместо использования стандартных «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.