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 Debug
versión junto con la Release
versió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.java
clase
- 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