Ofusca y optimiza tus apps con Proguard y R8
Para comenzar a usar ProGuard en tu proyecto Android, debes configurar el archivo build.gradle.kts
. Asegúrate de habilitar las siguientes opciones en el bloque buildTypes
para la configuración de release
:
buildTypes {
release {
isMinifyEnabled = true // Habilita la ofuscación del código
isShrinkResources = true // Reduce el tamaño de los recursos eliminando los no utilizados
}
}
Protección de Clases Específicas
Para evitar que ciertas clases se minimicen durante el proceso de construcción, puedes usar la anotación @Keep
en clases específicas. Por ejemplo:
import androidx.annotation.Keep
@Keep
data class PostAPIResponseElement(
val id: String,
val title: String
)
Esta solución es válida si solo tienes unas pocas clases. Sin embargo, si tu proyecto tiene muchas clases que deben mantenerse, lo ideal es definir las reglas directamente en el archivo proguard-rules.pro
.
Definición de Reglas en proguard-rules.pro
Para proteger todas las clases dentro de un paquete, puedes agregar la siguiente regla:
-keep class es.rlujancreations.loquesea.data.network.response.** { *; }
Esta regla mantiene intactas todas las clases y métodos dentro del paquete especificado.
Solución de Errores Comunes
Durante la generación de una build release
, podrías encontrarte con el siguiente error:
Missing classes detected while running R8.
Para solucionarlo, revisa el archivo generado en:
/kotlin/LoQueSea/app/build/outputs/mapping/release/missing_rules.txt
Añade las reglas necesarias al archivo proguard-rules.pro
. Un ejemplo de reglas adicionales podría ser:
-keep class es.rlujancreations.loquesea.data.network.response.** { *; }
-dontwarn org.conscrypt.Conscrypt$Version
-dontwarn org.conscrypt.Conscrypt
-dontwarn org.conscrypt.ConscryptHostnameVerifier
-dontwarn org.openjsse.javax.net.ssl.SSLParameters
-dontwarn org.openjsse.javax.net.ssl.SSLSocket
-dontwarn org.openjsse.net.ssl.OpenJSSE
Estas reglas indican a ProGuard que ignore advertencias sobre las clases especificadas.
Archivo mapping.txt
Al generar la build release
, ProGuard creará un archivo llamado mapping.txt
que contiene la relación entre el código original y el ofuscado. Este archivo se encuentra en:
/kotlin/LoQueSea/app/build/outputs/mapping/release/mapping.txt
Este archivo es importante para depurar errores en entornos de producción y debe ser almacenado de manera segura.
Buenas Prácticas
- Revisar y optimizar las reglas: Mantén el archivo
proguard-rules.pro
lo más limpio posible. - Pruebas exhaustivas: Realiza pruebas detalladas para asegurar que las funcionalidades no se vean afectadas por la ofuscación.
- Documentación de las reglas: Documenta por qué ciertas clases deben mantenerse.
- Mantener el archivo
mapping.txt
: Este archivo es clave para depurar problemas en producción.
Con esta configuración y buenas prácticas, estarás optimizando y protegiendo tu aplicación de manera eficiente con ProGuard y R8.
Comentarios