Construya androide con gradle, substituya la cadena cada sabor del producto
Antes de que yo construya el proyecto de androide a dos diversa aplicación pagada y libre.
Cambié todos los valores y cadenas de manera que ayer cometí un gran error.
- AS obligar a utilizar android SDK Build Tools 25.0.0 SDK herramientas de compilación revisión (23.0.3) es demasiado bajo para el proyecto
- Error de sincronización gradle de estudio de android
- Versión de Android 24.0.0 y Excepción de gradle de Espresso 2.0
- ¿Cómo uso el procesador de anotación Java personalizado en Gradle?
- Gradle, define una colección de propiedades
Por lo tanto, estoy laerning cómo utilizar gradle para construir mi aplicación.
Mi aplicación tiene algunas diferencias.
-
Nombre de la aplicación (solo agrega el sufijo '-Free') -> values / string.xml
-
Cambio de bandera en mi * .java
// signedConfigs es ommited.
productFlavors{ free{ packageName "my.app.free" versionCode 20 signingConfig signingConfigs.freeConfing copy{ from('/res'){ include '**/*.xml' } into 'build/res/' filter{ String line -> line.replaceAll("android:label=\"@string/app_name\"", "android:label=\"@string/app_name_free\"") } } copy{ from('/src'){ include '**/*.java' } into 'build/src/' filter{ String line -> line.replaceAll("public static final Boolean IS_FULL_VER = true;", "public static final Boolean IS_FULL_VER = false;") } } } paid{ packageName "my.app.paid" versionCode 20 signingConfig signingConfigs.paidConfing } }
Pero, la aplicación construida no cambió nada en absoluto.
Lo que extrañé
- Android Studio no puede resolver el error ': app: preDexDebug'
- Wear App y con tipo de compilación personalizado con applicationIdSuffix
- Error de ADT que exporta con Gradle
- FindBugs Android Gradle No hay clases configuradas error
- Error en la instalación con Android Studio, APK no firmado
- Uso de Gradle con un proyecto Android existente
- ¿Cómo aplicar el plugin a un solo sabor en gradle?
- ¿Puede Android Studio convertir la secuencia de comandos de construcción de hormigas en la secuencia de comandos de gradle build?
Consulte la documentación sobre los product flavors
:
http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Product-flavors
En su build.gradle
, en cada sabor, puede definir indicadores que se generarán en su archivo BuildConfig.java
:
productFlavors { free { packageName "com.company.appfree" buildConfig "public final static com.company.common.MonetizationType monetizationType = com.company.common.MonetizationType.FREE;" } paid { packageName "com.company.apppaid" buildConfig "public final static com.company.common.MonetizationType monetizationType = com.company.common.MonetizationType.PAID;" } }
Este ejemplo utiliza un enum (que debe definirse en algún lugar de su código java):
public enum MonetizationType { PAID, FREE }
Ahora puede utilizar esto en cualquier lugar como este:
if (BuildConfig.monetizationType == MonetizationType.FREE) { ... }
Para sobreescribir recursos, puede crear diferentes archivos de recursos en las carpetas de origen para cada sabor:
Utilice la siguiente estructura
app/build.gradle app/ [.. some other files...] app/src/main/ app/src/main/java app/src/main/res app/src/main/assets app/src/main/AndroidManifest.xml app/src/free/res/values/apptitle.xml app/src/paid/res/values/apptitle.xml
Apptitle.xml sería un archivo de recursos de cadena (al igual que strings.xml), pero con sólo una cadena: la que desea ser diferente dependiendo del sabor. (No es necesario tener un apptitle.xml en el directorio main / res).
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:tools="http://schemas.android.com/tools"> <string name="app_title">App Title (or whatever you want)</string> </resources>
Es posible que pueda anular las cadenas de diferentes maneras, pero me gusta mantener las cadenas anuladas separadas del resto para mayor claridad.
La respuesta aceptada no está funcionando con las versiones más recientes de Gradle. Necesita reemplazar buildConfig
con buildConfigField
para obtener el mismo resultado:
productFlavors { free { packageName "com.company.appfree" buildConfigField "com.company.common.MonetizationType", "MONETIZATION_TYPE", "company.common.MonetizationType.FREE" } paid { packageName "com.company.apppaid" buildConfigField "com.company.common.MonetizationType", "MONETIZATION_TYPE", "company.common.MonetizationType.PAID" }
}
TreesAreEverywhere's answer (así como nombre de usuario) está bien. Pero también es muy valioso saber que Android Studio simplificará en gran medida el proceso de crear archivos de recursos específicos de sabor o atributo.
En la ventana del proyecto AS, haga clic con el botón derecho en la carpeta res / values y seleccione Nuevo> Valores del archivo de recursos. A continuación, el nombre (por ejemplo, "cadenas"), seleccione el conjunto de origen si no es el valor predeterminado, y seleccione cualquier cualificadores deseados (por ejemplo, ancho de pantalla = 800). Esta es la forma más sencilla de asegurarse de que está poniendo las anulaciones de recursos donde el compilador las quiere.
Así es como lo hice en mi proyecto. He creado múltiples tipos de construcción en lugar de sabores. Esta solución agregará un prefijo al nombre del paquete basado en el tipo de compilación que intenta ensamblar. Por ejemplo, para dev el nombre del paquete será com.sample.myapp.dev y de forma similar para el nombre del paquete beta se cambiará a com.sample.myapp.release. Puede ajustarlo para obtener prefijos gratuitos y pagados. Espero que ayude.
buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.production applicationIdSuffix '.release' versionNameSuffix '-RELEASE' } dev { signingConfig signingConfigs.debug applicationIdSuffix '.dev' versionNameSuffix '-DEV' } beta { signingConfig signingConfigs.debug applicationIdSuffix '.beta' versionNameSuffix '-BETA' } debug { signingConfig signingConfigs.debug applicationIdSuffix '.debug' versionNameSuffix '-DEBUG' debuggable true } }
- Simular el asesinato de la actividad en el emulador
- Android.support.v7.widget.Toolbar icon problema de alineación