Múltiples sabores de creación con y sin anuncios (nueva política de desarrolladores de Google)

He publicado una aplicación con 2 Build Flavors: una versión "normal" que incluye anuncios y una versión sin anuncios.

En la consola de Google Play para desarrolladores, ahora tienes que marcar tu aplicación si utiliza anuncios. Esto está bien para la versión normal, pero la versión sin anuncios utiliza las mismas dependencias que la versión profesional (especialmente los servicios de Google Play). Así que obtengo una advertencia cuando establezco esta versión en ad-free porque se encontraron ad-libs.

¿Es posible cambiar las dependencias dependiendo del sabor de la construcción del gradle?

Build.gradle:

android { (...) productFlavors { lite { signingConfig signingConfigs.Release versionCode 14 versionName '1.1.5' buildConfigField "boolean", "IS_PRO", "false" } pro { applicationId 'com.example.exampleadfree' signingConfig signingConfigs.Release targetSdkVersion 21 versionCode 14 versionName '1.1.5' buildConfigField "boolean", "IS_PRO", "true" } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:support-v4:21.0.3' compile 'com.android.support:appcompat-v7:21.0.3' compile 'com.android.support:cardview-v7:21.0.2' compile 'com.google.android.gms:play-services:6.1.+' compile project(':libraries:SharedItems') compile 'com.android.support:recyclerview-v7:21.0.2' } 

    Tu puedes cambiar

     compile 'com.google.android.gms:play-services:6.1.+' 

    a

     liteCompile 'com.google.android.gms:play-services:6.1.+' 

    Y que incluirá los servicios de juego lib con su versión lite solamente.

    Pero no has terminado, porque ahora el código de tu aplicación que crea AdView y clases relacionadas de la biblioteca de servicios de reproducción no se compilará cuando crees la versión profesional.

    Mi solución en una situación similar (con la biblioteca de facturación) era mover todo el código que se refiere a la biblioteca excluida y clases relacionadas a un archivo de origen que también sólo se construye con el sabor lite, y luego proporcionar una aplicación ficticia para el pro Versión que no se refiere a la biblioteca.

    Por ejemplo, cree dos directorios src específicos de sabor con la misma clase de java en cada uno:

     src/lite/java/com/example/myapp/util/AdUtil.java src/pro/java/com/example/myapp/util/AdUtil.java 

    En la versión lite de AdUtil, puede realizar llamadas a los servicios de Google Play y obtener un AdView para devolverlo:

     View getAdView(...) { View adView = new AdView(...); adView.setAdSize(...); adView.setAdUnitId(...); ... return adView; } 

    Y en la versión pro de esa clase, sólo puede poner una implementación ficticia que no se refiere a los servicios de juego lib:

     View getAdView(...) { return null; } 

    A continuación, en el código de la aplicación principal, al llamar a AdUtil.getAdView (), obtendrá una vista en la versión lite que puede colocar en la pantalla. En la versión pro obtendrá un valor nulo por lo que omita agregar la vista (pero es probable que ya verifique si usted es pro o lite antes de intentar crear el anuncio en primer lugar).

    Cuando un proyecto declara Product Flavors, esto amplía la configuración principal.

    Desde aquí . Así que los sabores del producto agregan con eficacia nuevas configuraciones para cada sabor su declaración. En gradle es posible añadir dependencias que son específicas de una configuración. Por ejemplo,

     dependencies { <configname> <dependency> } 

    Si desea listar todas las configuraciones que su proyecto ha agregado:

     configurations.findAll().each{println "$it.name"} 

    En el caso de que su proyecto que verá configuraciones que se denominan los mismos que sus sabores de producto. Así como @cwbowron comentó, para agregar una dependencia de tiempo de compilación para el sabor lite :

     dependencies { liteCompile <dependency> } 

    Desde la charla de asistencia de Google Play, me dijeron que "No" en Google Play Console, a pesar de la detección. Así que no debería haber ningún problema en la inclusión de las librerías de Google.

    Por otro lado, la respuesta de Doug es elegante.

    Saludos,

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.