para moviles google fotos cuenta compartir compartida como colaborador bibliotecas biblioteca aplicaciones android performance gradle android-resources

moviles - ¿Cómo elimino los recursos no utilizados de las bibliotecas de terceros que he incluido en Android?



compartir biblioteca google photos (2)

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

Por ejemplo, incluyendo la biblioteca de servicios de Google Play, pero sin usar la funcionalidad del botón de inicio de sesión; Todos esos recursos de imagen y diseño terminan en mi versión final.

Dado que estos recursos están incluidos 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 usar minifyEnabled y shrinkResources, que se cubren con más profundidad en la página del documento oficial .

Es un problema común que las bibliotecas de terceros incluyan activos que la ruta de código de su aplicación no utiliza, y es muy 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 eliminará los 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 recursos no utilizados requiere que se establezca el indicador minifyEnabled . Este indicador (como se menciona en Eliminar código no utilizado ) activará ProGuard para eliminar rutas de código que no están siendo utilizadas por su aplicación. Este es un paso importante en la eliminación de recursos de las bibliotecas incluidas. Si las rutas de código no se eliminan, el compilador seguirá creyendo que los recursos están referenciados por una ruta de código existente y no los eliminará correctamente.

Vale la pena señalar que este es un sistema bastante extenso. Por ejemplo, buscará constantes de cadena específicas en su código, así como varios recursos res / raw en busca de cualquier URL en forma de file:///…. mantener. Incluso irá tan lejos como para analizar archivos CSS, HTML y JavaScript también.

Ahora, puede haber casos aquí de falsos positivos o falsos negativos. Es posible que los activos se corten o se mantengan cuando se desea el comportamiento opuesto. (Para ser justos, la reducción de recursos tiende a ser excesiva ...) 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 alguna razón, al menos podemos usar resConfig para eliminar idiomas que no resConfig .

defaultConfig { resConfig "en" }