Żadna z istniejących odpowiedzi mnie nie satysfakcjonowała, jednak Liberty była blisko. Więc tak to robię. Przede wszystkim w tej chwili pracuję z:
- Android Studio Beta 0.8.2
- Wtyczka Gradle 0.12. +
- Gradle 1.12
Moim celem jest uruchomienie Debug
wersji razem z Release
wersją na tym samym urządzeniu przy użyciu tego samego ContentProvider
.
W build.gradle sufiksu zestawu aplikacji dla kompilacji debugowania:
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
W pliku AndroidManifest.xml ustaw android:authorities
właściwość Twojego ContentProvider
:
<provider
android:name="com.example.app.YourProvider"
android:authorities="${applicationId}.provider"
android:enabled="true"
android:exported="false" >
</provider>
We właściwości zestawu kodu,AUTHORITY
której można użyć w dowolnym miejscu w implementacji:
public static final String AUTHORITY = BuildConfig.APPLICATION_ID + ".provider";
Wskazówka: wcześniejBuildConfig.PACKAGE_NAME
Otóż to! Będzie działać jak urok. Czytaj dalej, jeśli używasz SyncAdapter!
Aktualizacja dla SyncAdapter (14.11.2014)
Jeszcze raz zacznę od mojej obecnej konfiguracji:
- Android Studio Beta 0.9.2
- Wtyczka Gradle 0.14.1
- Gradle 2.1
Zasadniczo, jeśli chcesz dostosować niektóre wartości dla różnych kompilacji, możesz to zrobić z pliku build.gradle:
- użyj buildConfigField, aby uzyskać do niego dostęp z
BuildConfig.java
klasy
- użyj resValue, aby uzyskać do niego dostęp z zasobów, np. @ string / twoja_wartość
Alternatywą dla zasobów jest tworzenie osobnych katalogów buildType lub smaków i nadpisywanie zawartych w nich XML lub wartości. Jednak nie zamierzam tego używać w poniższym przykładzie.
Przykład
W pliku build.gradle dodaj:
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"'
}
}
Wyniki zobaczysz w klasie BuildConfig.java
public static final String ACCOUNT_TYPE = "your.syncadapter.type.debug";
oraz w 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>
W pliku uwierzytelniającym.xml użyj zasobu określonego w pliku 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"
/>
W swojej syncadapter.xml używać tego samego zasobu ponownie @ ŁAŃCUCH / władze zbyt
<?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"
/>
Wskazówka: autouzupełnianie (Ctrl + spacja) nie działa dla tych wygenerowanych zasobów, więc musisz wpisać je ręcznie