КАК ЮЗАТЬ Proguard
Суть в том, что наш код в APK очень кривой непожатый и не обфускован. Eсть полезная штука - proguard, который решает эту проблему. Во-первых делает код не читаемым - и это очень полезно, чтобы вашему приложению не выкручивали руки нерадивые юзвери. Ну и самое главное то, что всё внутри Вашего APK сжимается и упорядочивается так, чтобы мало весило и быстро работало.
Как это вообще делается - инфы достаточно в нете: Просто при релизе в студии ставится галка (или задаётся в коде билда) minifyEnabled true.
В app build.gradle должна появиться вот такая запись:
Код: Выделить всё
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
#// - собстна два файла, первый - студия получит из SDK, а второй файлик настроек, в котором пишется что делать гварду с конкретными библиотеками или классами
signingConfig signingConfigs.namecfg
}
debug {
signingConfig signingConfigs.namecfg
}
}
Начнём с того, что обфусковывать сторонние библиотеки нет смысла - они есть в открытом доступе и получить их внутренности не проблема. (обфускацией же мы пытаемся добиться целостности и нечитабельности данных или не? ) - ну вот какбы не нужно это делать!
Пресловутая библиотека appcompat уже миллион раз добавлена в исключения самого прогварда (на сегодня проблема решена автоматоматом, её прогвард умеет корректно добавлять в апк), но если же есть желание написать руками это исключение, то правильно будет использовать вот такую запись:
-keep class android.support.v7.** {*;}
можно (а точнее НУЖНО) также исключить другие библиотеки (редактируем файл proguard-rules):
-dontwarn org.apache.http.**
-dontwarn android.net.http.AndroidHttpClient
-dontwarn com.google.android.gms.**
-dontwarn com.android.volley.toolbox.**
... ну и так далее, в зависимости от того, какие библиотеки использовали в проекте.
обратите также внимание, что строки тут комментируют знаком "#", так как это не JAVA:
Код: Выделить всё
# Add any project specific keep options here...
Равно также нарвётесь на такую же ошибку и в самих ресурсах, даже если они лежат в разных папках:
Пример:
Есть файл dimens.xml в нём ресурс:
Код: Выделить всё
<bool name="makaka">true</bool>
Код: Выделить всё
<string name="makaka">makaka</string>
НО!!! Proguard попытается сжать эти ресурсы и произойдёт коллапс. имена то у них одинаковые.
Для дешифрации конечного продукта можно использовать соответствующую утилитку и сам файлик proguard-android.txt. без него дешифровать очень сложно.
Для редактирования и дебажирования проекта снимаем галку minify - можно прямо в билдере заменить "minifyEnabled true" на "minifyEnabled false".