¿Cómo puedo eliminar los recursos no utilizados de las bibliotecas de terceros que he incluido en Android?

Las bibliotecas de terceros que enlazo en mi aplicación a menudo incluyen archivos de recursos que no están siendo utilizados por mi aplicación y, como tal, terminan hinchando mi APK.

Por ejemplo, incluye la biblioteca de servicios de Google Play, pero no utiliza la funcionalidad del botón de inicio de sesión; Todos esos recursos de la imagen y de la disposición terminan para arriba en mi estructura final.

Dado que estos recursos se incluyen en una biblioteca compilada, ¿cómo puedo eliminarlos de mi compilación?

Esta respuesta se resume en Eliminar recursos no utilizados, que explica cómo utilizar minifyEnabled y shrinkResources, que se tratan con mayor profundidad en la página del documento oficial .

Es un problema común que las bibliotecas de terceros incluyan los recursos que su aplicación codepath no utiliza, y es sumamente importante eliminar esos activos para producir archivos APK más pequeños para sus usuarios. Afortunadamente, la última versión de Gradle y Android Studio proporciona una solución para ayudar.

Al establecer minifyEnabled y shrinkResources en true en su configuración de Gradle, el sistema saldrá eliminando recursos no utilizados de su aplicación.

android { ... buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } 

Es importante tener en cuenta que la eliminación de los recursos no utilizados requiere que se establezca el indicador minifyEnabled . Este indicador (como se menciona en Eliminar código no utilizado ) disparará a ProGuard para quitar las rutas de código que su aplicación no esté utilizando. Este es un paso importante en la eliminación de los recursos de las bibliotecas incluidas. Si las rutas de código no se eliminan, el compilador seguirá creyendo que los recursos son referenciados por un path de código existente y no los eliminará correctamente.

Vale la pena señalar que este es un sistema bastante extenso. Por ejemplo, buscará a través de constantes de cadena específicas en su código, así como varios recursos res / raw buscando cualquier URL en forma de file:///…. mantener. Incluso llegará incluso a analizar los archivos CSS, HTML y JavaScript.

Ahora, puede haber casos aquí de falsos positivos o falsos negativos. Los activos podrían ser cortados, o mantenerse, cuando se desea el comportamiento contrario. (Para ser justos, la reducción de recursos tiende a ser exagerada …) Para ajustar esto, puede agregar las herramientas: keep y tools: descartar atributos para definir el comportamiento deseado, por convención en un archivo res/raw/keep.xml .

 <resources xmlns:tools="http://schemas.android.com/tools" tools:keep= "@layout/l_used*_c, @layout/l_used_b*" tools:discard="@layout/unused2" /> 

Si no puede usar shrinkResources por algunas razones, al menos podemos usar resConfig para eliminar idiomas que no resConfig .

 defaultConfig { resConfig "en" } 
  • Android: Diferencia entre la herramienta traceview y systrace
  • ¿Cómo implementar correctamente el feed (similar a Facebook / Instagram) en Android?
  • Hilo de fondo que bloquea la interfaz de usuario durante varios segundos
  • Variables estáticas, patrón y rendimiento de Android
  • Android desplácese hacia arriba ocultar vista y desplácese hacia abajo mostrar el efecto de vista como twitter
  • ¿Cómo mterp (Dalvik VM) organiza su bucle de interpretación de bytes?
  • ¿Qué significa MediaPlayer info / warning (973, 0)?
  • Androide. Rendimiento de la animación
  • Eficiencia de findViewById
  • La mejor manera de obtener una SpannableString de un SpannableStringBuilder
  • Acceso al campo local vs campo de objeto. ¿Está mal el documento?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.