Жодна з існуючих відповідей мене не влаштовувала, проте Свобода була близькою. Так це я роблю. Перш за все в даний момент, з яким я працюю:
- Android Studio Beta 0.8.2
- Плагін Gradle 0,12. +
- Градле 1.12
Моя мета - запустити Debug
версію разом із Release
версією на одному пристрої, використовуючи той самий ContentProvider
.
У build.gradle суфіксу набору додатків для збирання налагодження:
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
В наборі файлів AndroidManifest.xmlandroid:authorities
на вашому ContentProvider
:
<provider
android:name="com.example.app.YourProvider"
android:authorities="${applicationId}.provider"
android:enabled="true"
android:exported="false" >
</provider>
У власність набору коду , AUTHORITY
яку можна використовувати, де потрібно для вашої реалізації:
public static final String AUTHORITY = BuildConfig.APPLICATION_ID + ".provider";
Порада: раніше це булоBuildConfig.PACKAGE_NAME
Це воно! Це спрацює як шарм. Продовжуйте читати, якщо ви використовуєте SyncAdapter!
Оновлення для SyncAdapter (14.11.2014)
Ще раз розпочну з моєї поточної установки:
- Android Studio Beta 0.9.2
- Плагін Gradle 0.14.1
- Градле 2.1
В основному, якщо вам потрібно налаштувати деякі значення для різних збірок, ви можете зробити це з файлу build.gradle:
- використовуйте buildConfigField для доступу до нього з
BuildConfig.java
класу
- використовуйте resValue для доступу до нього з ресурсів, наприклад @ string / your_value
Як альтернатива ресурсам, ви можете створити окремі довідки buildType або смакових характеристик та замінити XML або значення в них. Однак я не збираюсь використовувати його в прикладі нижче.
Приклад
У файл build.gradle додайте наступне:
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"'
}
}
Ви побачите результати в класі BuildConfig.java
public static final String ACCOUNT_TYPE = "your.syncadapter.type.debug";
і в 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>
У вашому authenticator.xml використання ресурсу , вказаний у файлі 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"
/>
У вашому syncadapter.xml використовувати один і той же ресурс знову і @ струнні / влади занадто
<?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"
/>
Порада: автоматичне завершення (Ctrl + Space) не працює для цих згенерованих ресурсів, тому вам доведеться вводити їх вручну