Ofuscación del código de Android y cómo determinar si un código apk está ofuscado.
El código Java se compila en un archivo de clase binario, que también se puede descompilar en el código fuente. A excepción de los comentarios, básicamente se pueden ver otros códigos. Para evitar que se filtre código importante, a menudo necesitamos ofuscar, es decir, cambiar los nombres de elementos Java, como nombres de métodos, nombres de variables, nombres de clases y nombres de paquetes. Para nombres inesperados, la estructura del código permanece sin cambios y se puede ejecutar, pero es difícil entender la estructura del código. Proguard desempeña ese papel:
Primero, puede analizar la estructura de un conjunto de clases y luego ofuscar los elementos Java en estos archivos de clase que se pueden ofuscar según la configuración del usuario.
En segundo lugar, elimine el código no válido.
En tercer lugar, optimice el código (use el apk exportado por el complemento adt y la optimización zipalign)
De forma predeterminada, proguard se confundirá. Todos los códigos, pero en los siguientes casos, el nombre del elemento java no se puede cambiar; de lo contrario, se producirá un error en el programa.
Primero, dónde se usa la reflexión (las API en Android a menudo son comentadas por @hide, y los desarrolladores necesitan usar la reflexión al llamar a los métodos correspondientes)
En segundo lugar, cuando la aplicación Cuando el código depende de la interfaz del sistema, como el método de devolución de llamada llamado por el código del sistema, este método es más complicado.
En tercer lugar, configure el nombre del elemento java en el archivo de configuración.
Entonces, cuando usamos proguard, necesitamos tener un archivo de configuración para indicarle a proguard qué elementos de Java no se pueden confundir.
2. Configuración de proguard
-dontwarn De forma predeterminada, proguard comprobará si cada referencia es correcta, pero a menudo hay algunas clases en bibliotecas de terceros que no se utilizan y las referencias sí. incorrecto. Si no está configurado, el sistema informará un error.
Las clases y los miembros de clase especificados por -keep se conservan como entradas.
Los miembros de la clase especificados por -keepclassmembers se conservan.
Si los miembros de la clase especificados existen, mantenga la clase y los miembros de la clase especificados por -keepclasswithmembers.