Tidak ada jawaban yang memuaskan saya, namun Liberty dekat. Jadi begini cara saya melakukannya. Pertama-tama saat saya bekerja dengan:
- Android Studio Beta 0.8.2
- Plugin Gradle 0.12. +
- Gradle 1.12
Tujuan saya adalah menjalankan Debug
versi bersama dengan Release
versi pada perangkat yang sama menggunakan yang sama ContentProvider
.
Dalam build.gradle akhiran set aplikasi Anda untuk build Debug:
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
Dalam file AndroidManifest.xml set android:authorities
properti Anda ContentProvider
:
<provider
android:name="com.example.app.YourProvider"
android:authorities="${applicationId}.provider"
android:enabled="true"
android:exported="false" >
</provider>
Di properti kumpulan kodeAUTHORITY
yang dapat digunakan di mana pun diperlukan dalam implementasi Anda:
public static final String AUTHORITY = BuildConfig.APPLICATION_ID + ".provider";
Tip: SebelumnyaBuildConfig.PACKAGE_NAME
Itu dia! Ini akan bekerja seperti pesona. Teruskan membaca jika Anda menggunakan SyncAdapter!
Pembaruan untuk SyncAdapter (14.11.2014)
Sekali lagi saya akan mulai dengan pengaturan saya saat ini:
- Android Studio Beta 0.9.2
- Plugin Gradle 0.14.1
- Gradle 2.1
Pada dasarnya, jika Anda perlu menyesuaikan beberapa nilai untuk berbagai build, Anda dapat melakukannya dari file build.gradle:
- gunakan buildConfigField untuk mengaksesnya dari
BuildConfig.java
kelas
- gunakan resValue untuk mengaksesnya dari sumber daya misalnya @ string / your_value
Sebagai alternatif sumber daya, Anda bisa membuat direktori buildType atau ragam terpisah dan mengganti XML atau nilai di dalamnya. Namun, saya tidak akan menggunakannya dalam contoh di bawah ini.
Contoh
Dalam file build.gradle tambahkan yang berikut ini:
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"'
}
}
Anda akan melihat hasil di kelas BuildConfig.java
public static final String ACCOUNT_TYPE = "your.syncadapter.type.debug";
dan di 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>
Di authenticator.xml Anda menggunakan sumber daya yang ditentukan dalam file 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"
/>
Di syncadapter.xml Anda, gunakan sumber daya yang sama lagi dan @ string / otoritas juga
<?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"
/>
Kiat: pelengkapan otomatis (Ctrl + Spasi) tidak berfungsi untuk sumber daya yang dihasilkan ini sehingga Anda harus mengetiknya secara manual