Ninguna de las respuestas existentes me satisfizo, sin embargo, Liberty estaba cerca. Así es como lo estoy haciendo. En primer lugar, en este momento estoy trabajando con:
- Android Studio Beta 0.8.2
- Complemento Gradle 0.12. +
- Gradle 1.12
Mi objetivo es ejecutar la Debugversión junto con la Releaseversión en el mismo dispositivo usando el mismo ContentProvider.
En build.gradle del sufijo del conjunto de aplicaciones para la compilación de depuración:
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
En la propiedad de conjunto de archivos AndroidManifest.xmlandroid:authorities de su ContentProvider:
<provider
android:name="com.example.app.YourProvider"
android:authorities="${applicationId}.provider"
android:enabled="true"
android:exported="false" >
</provider>
En su propiedad de conjunto de códigosAUTHORITY que se puede usar donde sea necesario en su implementación:
public static final String AUTHORITY = BuildConfig.APPLICATION_ID + ".provider";
Consejo: Antes eraBuildConfig.PACKAGE_NAME
¡Eso es! Funcionará como un encanto. ¡Sigue leyendo si usas SyncAdapter!
Actualización para SyncAdapter (14.11.2014)
Una vez más, comenzaré con mi configuración actual:
- Android Studio Beta 0.9.2
- Complemento Gradle 0.14.1
- Gradle 2.1
Básicamente, si necesita personalizar algunos valores para diferentes compilaciones, puede hacerlo desde el archivo build.gradle:
- use buildConfigField para acceder desde la
BuildConfig.javaclase
- use resValue para acceder a él desde recursos, por ejemplo, @ string / your_value
Como alternativa para los recursos, puede crear directorios buildType o de sabor separados y anular XML o valores dentro de ellos. Sin embargo, no lo voy a usar en el siguiente ejemplo.
Ejemplo
En el archivo build.gradle agregue lo siguiente:
defaultConfig {
resValue "string", "your_authorities", applicationId + '.provider'
resValue "string", "account_type", "your.syncadapter.type"
buildConfigField "String", "ACCOUNT_TYPE", '"your.syncadapter.type"'
}
buildTypes {
debug {
applicationIdSuffix ".debug"
resValue "string", "your_authorities", defaultConfig.applicationId + '.debug.provider'
resValue "string", "account_type", "your.syncadapter.type.debug"
buildConfigField "String", "ACCOUNT_TYPE", '"your.syncadapter.type.debug"'
}
}
Verá resultados en la clase BuildConfig.java
public static final String ACCOUNT_TYPE = "your.syncadapter.type.debug";
y en build / generate / res / generate / debug / values / generate.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Automatically generated file. DO NOT MODIFY -->
<!-- Values from default config. -->
<item name="account_type" type="string">your.syncadapter.type.debug</item>
<item name="authorities" type="string">com.example.app.provider</item>
</resources>
En su authenticator.xml use el recurso especificado en el archivo build.gradle
<?xml version="1.0" encoding="utf-8"?>
<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
android:accountType="@string/account_type"
android:icon="@drawable/ic_launcher"
android:smallIcon="@drawable/ic_launcher"
android:label="@string/app_name"
/>
En su syncadapter.xml use el mismo recurso nuevamente y @ string / autoridades también
<?xml version="1.0" encoding="utf-8"?>
<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
android:contentAuthority="@string/authorities"
android:accountType="@string/account_type"
android:userVisible="true"
android:supportsUploading="false"
android:allowParallelSyncs="false"
android:isAlwaysSyncable="true"
/>
Consejo: el autocompletado (Ctrl + Espacio) no funciona para estos recursos generados, por lo que debe escribirlos manualmente