Keine der vorhandenen Antworten befriedigte mich, aber Liberty war nah dran. So mache ich das also. Zunächst arbeite ich im Moment mit:
- Android Studio Beta 0.8.2
- Gradle Plugin 0.12. +
- Gradle 1.12
Mein Ziel ist es, die Debug
Version zusammen mit der Release
Version auf demselben Gerät mit demselben auszuführen ContentProvider
.
In build.gradle Ihres App-Set-Suffixes für Debug-Build:
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
In AndroidManifest.xml Dateiset android:authorities
Eigenschaft Ihres ContentProvider
:
<provider
android:name="com.example.app.YourProvider"
android:authorities="${applicationId}.provider"
android:enabled="true"
android:exported="false" >
</provider>
In Ihrer Code- Set- AUTHORITY
Eigenschaft, die überall dort verwendet werden kann, wo sie in Ihrer Implementierung benötigt wird:
public static final String AUTHORITY = BuildConfig.APPLICATION_ID + ".provider";
Tipp: VorherBuildConfig.PACKAGE_NAME
Das ist es! Es wird wie ein Zauber wirken. Lesen Sie weiter, wenn Sie SyncAdapter verwenden!
Update für SyncAdapter (14.11.2014)
Ich werde noch einmal mit meinem aktuellen Setup beginnen:
- Android Studio Beta 0.9.2
- Gradle Plugin 0.14.1
- Gradle 2.1
Wenn Sie einige Werte für verschiedene Builds anpassen müssen, können Sie dies grundsätzlich über die Datei build.gradle tun:
- Verwenden Sie buildConfigField , um von der
BuildConfig.java
Klasse aus darauf zuzugreifen
- Verwenden Sie resValue , um von Ressourcen aus darauf zuzugreifen, z. B. @ string / your_value
Als Alternative für Ressourcen können Sie separate BuildType- oder Flavour-Verzeichnisse erstellen und darin enthaltene XMLs oder Werte überschreiben. Ich werde es jedoch im folgenden Beispiel nicht verwenden.
Beispiel
In build.gradle Datei fügen Sie die folgende:
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"'
}
}
Sie sehen Ergebnisse in der BuildConfig.java- Klasse
public static final String ACCOUNT_TYPE = "your.syncadapter.type.debug";
und in 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>
In Ihrer authenticator.xml Ressourcennutzung angegeben in build.gradle Datei
<?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"
/>
In Ihrem syncadapter.xml die gleiche Ressource wieder verwenden und @ Zeichenfolge / Behörden zu
<?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"
/>
Tipp: Die automatische Vervollständigung (Strg + Leertaste) funktioniert für diese generierten Ressourcen nicht. Sie müssen sie daher manuell eingeben