ofuscar - proteger codigo fuente android
¿Cómo realizar la minificación y la ofuscación con el compilador JACK? (2)
La ofuscación JACK no parece ser compatible con el último Gradle Plugin lanzado (v2.1.0).
Si habilita JACK cuando usa el último plugin v2.1.0, le dirá que
Jack requires Build Tools 24.0.0 or later
requiere que use las herramientas de vista previa.
Usando Android Gradle v2.2.0-alpha1, Build Tools-v24rc4, Platform Tools-v24rc3 y Sdk Tools-v25.1.7rc1 pude obtener la ofuscación de JACK.
Cuando se habilita dentro de
defaultConfig
se queja de que no se
Minifying the variant used for tests is not supported when using Jack.
, porque
minifyEnabled true
se configuró en la compilación de
debug
.
Entonces, creé un tipo de compilación personalizado y lo habilité allí:
buildTypes {
...
custom {
minifyEnabled true
proguardFiles ''proguard-android-JACK.txt-2.2.0-alpha1''
jackOptions {
enabled true
}
}
Hubo un problema al usar
proguardFiles getDefaultProguardFile(''proguard-android.txt'')
.
Se produjo un error con:
com.android.jack.api.v01.ConfigurationException: Error while parsing ...
,.
Entonces, simplemente eliminé las líneas de las que se quejaba y luego simplemente especifiqué manualmente mi archivo de configuración modificado.
Google ha lanzado una versión de prueba de su nuevo compilador JACK para desarrolladores de Android con Android Studio 2.1.
Mi pregunta es, ¿cómo habilitamos la ofuscación para el APK con JACK? El siguiente artículo dice que JACK realiza ofuscación de forma nativa y elimina la necesidad de Proguard:
Mientras que el siguiente artículo dice que JACK utiliza los archivos de configuración de Proguard (es decir, el archivo
.pro
) para realizar la ofuscación:
También dice que
Durante este proceso, Jack también maneja cualquier minificación de código solicitada (reducción y / u ofuscación ).
¿Qué significa esto exactamente?
¿Tenemos que usar la opción
minifyEnabled
y definir un archivo
.pro
que contenga las opciones de Proguard?
En resumen:
-
¿Cómo hacemos exactamente para habilitar la ofuscación con JACK? ¿Podemos omitir el uso de Proguard, o Proguard juega un papel de facto en el proceso de ofuscación, incluso si compilamos con JACK?
-
¿JACK admite actualmente la ofuscación o no, y está disponible en una versión estable (es decir, no beta / canaria) de Android Studio?
Nota:
Ya he referido las siguientes publicaciones:
-
Cómo habilitar Jack (Java Android Compiler Kit) en Android Studio .
-
Error: se requiere Jack para admitir las funciones de lenguaje java 8 .
Referencias adicionales:
Actualizar:
La answer de Matt Insko es útil, pero me gustaría obtener más detalles y una respuesta canónica más precisa.
Puedes echar un vistazo aquí: https://source.android.com/source/jack.html
De la documentación oficial:
(Jack) Maneja encogimiento, ofuscación, reempaquetado y multidex. Usar un paquete separado como ProGuard ya no es necesario.
Observe especialmente la sección "Reducción y ofuscación" donde se menciona que:
Jack tiene soporte de reducción y ofuscación y utiliza archivos de configuración de protección para habilitar las características de reducción y ofuscación.
Y también se presentan las opciones admitidas e ignoradas.