Android-студия Proguard Base расположение - PullRequest
0 голосов
/ 10 декабря 2018

Я использую Zelix Klass Master, чтобы запутать свои приложения для Android.Использовали его около 1 года.Я решил обновить свою андроид студию, так как я все еще работал под управлением версии 3.0.1.После обновления Android Studio я больше не могу запутать свой apk с помощью Zelix. Он использует Proguard для запутывания моего приложения для Android, так как Zelix работает через proguard: мне нужно заменить jar proguard внутри каталога

<Android Studio>\gradle\m2repository\net\sf\proguard\proguard-base

Я заменил все jar-файлы proguard в каталоге и даже удалил родительский файл proguard внутри sf, и он все еще использует proguard, чтобы запутать мой android apk. Думаю, он больше не использует proguard из <Android Studio>\gradle\m2repository\net\sf\proguardпотому что я удалил этот каталог, и android studio по-прежнему строит с использованием proguard.

Итак, вопрос в том, где находится новый proguard lib?и как мне заставить его использовать proguard из этого каталога (proguard-base)?для получения информации о том, как настроить Zelix, вы можете прочитать его здесь :

Редактировать: После ответа Света я попытался сделать то, что он предложил, и теперь выдает эту ошибку ..

Невозможно найти метод 'proguard.KeepClassSpecification. (ZZZZZZLproguard / ClassSpecification; Lproguard / ClassSpecification;) V'.Возможные причины этой непредвиденной ошибки:

  • Кэш зависимостей Gradle может быть поврежден (это иногда происходит после истечения времени ожидания сетевого подключения.) Повторно загрузить зависимости и синхронизировать проект (требуется сеть)
  • Состояниепроцесса сборки Gradle (демон) может быть поврежден.Остановка всех демонов Gradle может решить эту проблему.Остановить процессы сборки Gradle (требуется перезапуск)
  • Возможно, в вашем проекте используется сторонний плагин, несовместимый с другими плагинами в проекте или версией Gradle, запрошенной проектом.
В случае поврежденных процессов Gradle вы также можете попробовать закрыть IDE и затем убить все процессы Java.

Ответы [ 3 ]

0 голосов
/ 13 декабря 2018

Тот факт, что вы получаете сообщение "Невозможно найти метод" proguard.KeepClassSpecification. (ZZZZZZLproguard / ClassSpecification; Lproguard / ClassSpecification;) V ", указывает на то, что вы успешно используете переименованный proguardStub.jar.Проблема в том, что текущий файл proguardStub.jar необходимо обновить, чтобы он более полно отражал ProGuard 6.0.Похоже, что ProGuard 6.0 добавляет дополнительный конструктор, который не отображается в классе KeepClassSpecification в proguardStub.jar.

Можно ожидать, что новая версия proguardStub.jar появится на следующей неделе или около того.

0 голосов
/ 13 декабря 2018

Хорошо, я исправил проблему благодаря Свету.Я награжу его щедростью за помощь.Поэтому он ответил и сказал мне, что мне нужно изменить classPath proguard следующим образом

buildscript {  
    repositories {
        flatDir { dirs '/proguard' }
    }
    dependencies {
        classpath ':proguard:'
    }
}

После этого, очевидно, он не будет работать с оригинальным proguardStub.jar, так как это для proguard 5.0, а не 6.0.3.я разобрал код на части и вставил код в старый файл proguardStub.jar, который будет рассматриваться как 6.0.3, и теперь он наконец работает!вот обновленный proguardStub.jar, который я создал здесь .

Если кому-то из вас интересно, как я это сделал, я просто изменил байт-код с помощью ASM, чтобы он не вызывал ошибок, а также изменил старую строку, чтобы она показала 6.0.3 вместо 5.0 :) КонечноString ничего не влияет, а просто показывает, какая это версия.

0 голосов
/ 13 декабря 2018

Проблема заключается в том, что ProGuard теперь рассматривается как зависимость плагина Android Gradle в последних версиях Android Studio и поэтому обновляется вместе с ним.Так что любая замена proguard.jar переименованным в proGuardStub.jar может быть автоматически отменена.

Я определенно не эксперт Gradle.Однако мне сказали, что изменение в build.gradle, подобное следующему, работает:

buildscript {  
    repositories {
        flatDir { dirs '/proguard' }
    }
    dependencies {
        classpath ':proguard:'
    }
}

"flatDir" указывает хранилище плоских каталогов, которое, я считаю, не будет автоматически обновляться.Если есть какие-либо эксперты Gradle, которые могут улучшить или усовершенствовать этот подход, то он был бы очень признателен.

...