Aucune des réponses existantes ne m'a satisfait, cependant Liberty était proche. Alors voilà comment je fais. Tout d'abord en ce moment je travaille avec:
- Android Studio bêta 0.8.2
- Plug-in Gradle 0.12. +
- Gradle 1.12
Mon objectif est d'exécuter la Debug
version avec la Release
version sur le même appareil en utilisant le même ContentProvider
.
Dans build.gradle de votre suffixe de jeu d'application pour la build Debug:
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
Dans le jeu de fichiers AndroidManifest.xml , android:authorities
propriété de votre ContentProvider
:
<provider
android:name="com.example.app.YourProvider"
android:authorities="${applicationId}.provider"
android:enabled="true"
android:exported="false" >
</provider>
Dans votre propriété de jeu de codesAUTHORITY
qui peut être utilisée partout où cela est nécessaire dans votre implémentation:
public static final String AUTHORITY = BuildConfig.APPLICATION_ID + ".provider";
Conseil: avantBuildConfig.PACKAGE_NAME
C'est tout! Cela fonctionnera comme un charme. Continuez à lire si vous utilisez SyncAdapter!
Mise à jour pour SyncAdapter (14.11.2014)
Encore une fois, je vais commencer avec ma configuration actuelle:
- Android Studio bêta 0.9.2
- Plugin Gradle 0.14.1
- Gradle 2.1
Fondamentalement, si vous devez personnaliser certaines valeurs pour différentes versions, vous pouvez le faire à partir du fichier build.gradle:
- utilisez buildConfigField pour y accéder depuis la
BuildConfig.java
classe
- utilisez resValue pour y accéder à partir de ressources, par exemple @ string / your_value
Comme alternative aux ressources, vous pouvez créer des répertoires buildType ou flavour distincts et remplacer les XML ou les valeurs qu'ils contiennent. Cependant, je ne vais pas l'utiliser dans l'exemple ci-dessous.
Exemple
Dans le fichier build.gradle , ajoutez ce qui suit:
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"'
}
}
Vous verrez les résultats dans la classe BuildConfig.java
public static final String ACCOUNT_TYPE = "your.syncadapter.type.debug";
et dans build / generated / res / generated / debug / values / generated.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>
Dans votre authentificateur.xml, utilisez la ressource spécifiée dans le fichier 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"
/>
Dans votre syncadapter.xml, utilisez à nouveau la même ressource et @ string / autorité aussi
<?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"
/>
Astuce: la saisie semi - automatique (Ctrl + Espace) ne fonctionne pas pour ces ressources générées, vous devez donc les saisir manuellement