现有的答案都没有让我满意,但是 Liberty 已经很接近了。所以这就是我的做法。首先,目前我正在使用:
- Android Studio 测试版 0.8.2
- Gradle 插件 0.12.+
- 摇篮 1.12
我的目标是在Debug
同一Release
设备上使用相同的ContentProvider
.
在您的应用程序集后缀的build.gradle中为 Debug 构建:
buildTypes {
debug {
applicationIdSuffix ".debug"
}
}
在您的AndroidManifest.xml文件中设置android: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 测试版 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>
在您的authenticationator.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中再次使用相同的资源和@string/ authorities
<?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)不适用于这些生成的资源,因此您必须手动键入它们