¿Cómo excluir la carpeta res de los desarrolladores de gradle build?
Tengo un requisito de quitar una carpeta específica del res de un sabor.
sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] res.srcDirs = ['res'] aidl.srcDirs = ['src'] assets.srcDirs = ['assets'] } } productFlavors { flavor1 { sourceSets { flavor1 { resources { exclude 'res/drawable-mdpi/*' } } } } flavorDimensions "flavor" }
Pero la carpeta drawable-mdpi sigue llegando al apk.
- Error de generación de Gradle en Android Studio
- No se puede resolver el símbolo 'AndroidJUnit4'
- Integra el tejido con Libgdx
- El selector de dispositivos de Android Studio se muestra antes de completar Gradle Build
- Imprimir mensaje a Gradle Sync log desde .gradle script
Así que alguien podría especificar el error que estoy cometiendo.
Gracias Vivek
- Error: No se pudo encontrar: com.android.support:support-v4:20.0.+
- ¿Cómo generar firmado y unsigned APK usando gradle?
- Dónde colocar la directiva de complemento de aplicar Crashlytics en archivos de compilación de Gradle
- Proguard no advierte y dontnote que no toma efecto
- Cómo excluir el módulo de todas las dependencias, pero dejar la declaración explícita Gradle
- gcm_defaultSenderId no se puede resolver
- Butter Knife - Inyectar en la librería de Android
- Android Gradle 1.1 - agregando una dependencia de prueba en las pruebas de otro proyecto
Finalmente resuelto este problema!
He encontrado este enlace .
Y lo hizo:
-
Agregue un archivo xml a la carpeta res / raw. Lo llamé resources_discard.xml, aquí está:
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:tools="http://schemas.android.com/tools" tools:discard="@raw/hd/*" />
-
Este archivo se coloca en una estructura de directorio correcta para mi sabor llamado lite "scr / lite / res / raw"
De esta manera, el contenido de la carpeta res / hd no está incluido en las compilaciones de lite, reduciendo efectivamente mi tamaño lite build apk en un 50%
UPD: para excluir algunas imágenes de diferentes sabores, tienes que poner las imágenes en carpeta de activos, y en gradle declarar:
flavor { aaptOptions { ignoreAssetsPattern '/folder:*.jpg:*.png' //use : as delimiter } }
También aprendí que no se puede tener subcarpetas en carpeta / raw.
Usted podría intentar usar divisiones.
Ejemplo (Desde la página web de Android SDK):
android { ... splits { // Configures multiple APKs based on screen density. density { // Configures multiple APKs based on screen density. enable true // Specifies a list of screen densities Gradle should not create multiple APKs for. Here you should add all the densities except MDPI. exclude "ldpi", "xxhdpi", "xxxhdpi" // Specifies a list of compatible screen size settings for the manifest. compatibleScreens 'small', 'normal', 'large', 'xlarge' } } }
Si eso no funciona, puede separar su res / MDPI y el resto de las carpetas Res / Density en dos módulos independientes (llamémoslos, layoutMdpi y layoutAll). Ambos módulos necesitan tener el mismo nombre de paquete para que sus clases R sean idénticas e intercambiables (esencialmente lo mismo que sucede entre diferentes versiones del androide SDK). A continuación, cree al menos dos configuraciones de dependencia específicas para sus sabores, una para los que deberían usar MDPI y otra para aquellos que no deberían hacerlo.
configurations { mdpiCompile allCompile } dependencies { ... mdpiCompile project(':layoutMdpi') allCompile project(':layoutAll') }
Y entonces, puesto que los recursos de MDPI no están presentes en layoutAll, es bueno ir.
- Android Night Mode sin CarModeEnabled
- NullPointerException en FirebaseMessagingService.zzo (fuente desconocida)