Nenhuma das respostas existentes me satisfez, no entanto, a liberdade estava próxima. Então é assim que eu estou fazendo isso. Primeiro de tudo no momento em que estou trabalhando:
- Android Studio Beta 0.8.2
- Gradle plugin 0.12. +
- Gradle 1.12
Meu objetivo é executar a Debug
versão juntamente com a Release
versão no mesmo dispositivo, usando o mesmo ContentProvider
.
No build.gradle do seu conjunto de aplicativos, sufixo para a compilação Debug:
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
Na propriedade do conjunto de arquivos AndroidManifest.xml :android:authorities
ContentProvider
<provider
android:name="com.example.app.YourProvider"
android:authorities="${applicationId}.provider"
android:enabled="true"
android:exported="false" >
</provider>
Na propriedade do conjunto de códigosAUTHORITY
que pode ser usada sempre que necessário em sua implementação:
public static final String AUTHORITY = BuildConfig.APPLICATION_ID + ".provider";
Dica: antes de serBuildConfig.PACKAGE_NAME
É isso aí! Funcionará como um encanto. Continue lendo se você usar o SyncAdapter!
Atualização para SyncAdapter (14.11.2014)
Mais uma vez, começarei com minha configuração atual:
- Android Studio Beta 0.9.2
- Gradle plugin 0.14.1
- Gradle 2.1
Basicamente, se você precisar personalizar alguns valores para diferentes construções, poderá fazê-lo no arquivo build.gradle:
- use buildConfigField para acessá-lo a partir da
BuildConfig.java
classe
- use resValue para acessá-lo a partir de recursos, por exemplo, @ string / your_value
Como alternativa aos recursos, você pode criar diretórios buildType ou flavor separados e substituir XMLs ou valores dentro deles. No entanto, não vou usá-lo no exemplo abaixo.
Exemplo
No arquivo build.gradle, adicione o seguinte:
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"'
}
}
Você verá resultados na classe BuildConfig.java
public static final String ACCOUNT_TYPE = "your.syncadapter.type.debug";
e em build / gerados / res / gerados / depuração / valores / gerados.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>
No seu authenticator.xml, use o recurso especificado no arquivo 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"
/>
No syncadapter.xml, use o mesmo recurso novamente e @ string / autoridades também
<?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"
/>
Dica: o preenchimento automático (Ctrl + Espaço) não funciona para esses recursos gerados, portanto, você deve digitá-los manualmente