Gradle Android Plugin – agregar atributo de sabor personalizado?
¿Hay alguna manera de agregar atributos personalizados a productFlavor o buildType en el complemento android para gradle? Me gustaría tener esa flexibilidad adicional en la configuración de buildVariants, para que pueda comprobar mi propiedad personalizada al especificar tareas para buildVariants.
productFlavors { flavorGroups "drm", "storeType" googlePlay { flavorGroup "storeType" buildConfig "public static final String TARGET_STORE = \"google\";" } samsungApps { flavorGroup "storeType" buildConfig "public static final String TARGET_STORE = \"samsung\";" } platformDrm { flavorGroup "drm" } widevineAppDrm { flavorGroup "drm" minSdkVersion 9 useWidevineAppDrmLib true }
}
- Comprobación personalizada Checkstyle con gradle (estudio androide)
- Android Studio minSdkVersion no funciona
- Gradle: cómo agregar un frasco para construir pero no para exportarlo
- Error en la ejecución de la aplicación 'app: mergeDebugResources' Crunching Cruncher ... png failed
- No se puede agregar una configuración con el nombre 'testCompile' ya que una configuración con ese nombre ya existe
Así que aquí usted puede ver que he agregado el atributo de encargo "useWidevineAppDrmLib" para construir el sabor. Sería bueno ver el mismo atributo en buildVariant.mergedFlavor, para que pueda comprobar ese valor de atributo y construir tareas adicionales, como paquete de archivos adicionales .so cuando el atributo se establece en true:
android.applicationVariants.each { variant -> if(variant.mergedFlavor.useWidevineAppDrmLib ) { ... // add copy .so task } }
Tal vez hay una manera de hacer eso, pero ya no me enteré aún … comprobar nombre de la variante de construcción para substring (nombre de sabor) funciona para mí, pero se ve sucio.
Idealmente, me gustaría tener un mapa de atributos personalizados de diferentes tipos para buildType y productFlavor.
- Heredar JavaDoc desde Android SDK con Gradle
- Problema con la dimensión de sabor de Android Studio 3.0
- Error en el proyecto de construcción en Android Studio
- ¿Cómo puedo agregar un JAR en mi proyecto gradle?
- ¿Se puede implementar en un dispositivo a través de Gradle desde la línea de comandos
- Excepción intentando ejecutar la aplicación Android de Eclipse a Android Studio
- Múltiples aplicaciones de Android dependiendo de la biblioteca de Android con gradle
- No se encontró com.android.support:support-v13:19.0.0
Hay una solución alternativa que no requiere la creación de su propia clase personalizada. Puede utilizar la propiedad de extras ya existente que ya está unida a la clase 'productFlavors'. Esto fue diseñado específicamente para permitir las variables personalizadas definidas por el usuario.
android { // We can add any custom variable so long as it's prefaced with ext productFlavors { widevineAppDrm { ext.useWidevineAppDrmLib = true } } }
A continuación, puede consultar más tarde como así. Tenga en cuenta que si no agregó la variable personalizada a otros productFlavors
, deberá asegurarse de comprobar primero, de lo contrario gradle se quejará de no encontrar la propiedad.
android.applicationVariants.each { variant -> if (variant.productFlavors[0].ext.has("useWidevineAppDrmLib")) { if (variant.productFlavors.get(0).ext.useWidevineAppDrmLib) { ... } } }
Puede ampliar un objeto para agregar una propiedad dinámicamente. Así que usted podría hacerlo en el objeto de sabor cuando se agregan, utilizando algo como esto:
// First declare a class that holds a boolean class BooleanExtension { boolean value BooleanExtension(boolean value) { this.value = value } public void setValue(boolean value) { this.value = value } public boolean getValue() { return value } } android { // add the boolean extension to all flavor object when they are created. productFlavors.whenObjectAdded { flavor -> flavor.extensions.create("useWidevineAppDrmLib", BooleanExtension, false) } // then we can set the value on the extension of any flavor object productFlavors { widevineAppDrm { useWidevineAppDrmLib.value true } } }
Sin embargo, esto no se pasa a la fusión de sabor. Así que tendrías que hacer
android.applicationVariants.each { variant -> if (variant.productFlavors.get(0).useWidevineAppDrmLib.value) { ... } }
Editado para hacer que el código realmente funcione desde la retroalimentación de @ blackdigger.
- GridView con dos columnas, el primer elemento abarca ambas columnas
- Selección de un archivo de imagen de la Galería mediante FileProvider