我想使用Gradle创建2个不同的APK(发布和调试),我想为它们使用不同的名称('appName'和'appName debug')。
我找到了一些解决方案,但它对我不起作用:
link 1
link 2
我想在设备上安装两个apks但是我有以下错误:
Duplicate resources:
...\src\release\res\values\config.xml:string/config_app_name,
...\src\main\res\values\config.xml:string/config_app_name
如果我从config_app_name
删除main\res\values\config.xml
密钥,则Gradle会说找不到该密钥。
我有3个清单文件:
...\src\main\AndroidManifest.xml (this uses the `android:label="@string/config_app_name"`)
...\src\release\AndroidManifest.xml
...\src\debug\AndroidManifest.xml
buildTypes {
debug {
packageNameSuffix ".debug"
versionNameSuffix "-debug"
buildConfig "public static final String PROVIDER_AUTHORITY = \"" + PROVIDER_DEBUG + "\";"
signingConfig signingConfigs.debug
}
release {
buildConfig "public static final String PROVIDER_AUTHORITY = \"" + PROVIDER_RELEASE + "\";"
signingConfig signingConfigs.release
}
}
sourceSets {
debug {
java.srcDirs = [
'src/main/java']
res.srcDirs = [
'src/main/res',
'src/debug/res']
}
release {
java.srcDirs = [
'src/main/java']
res.srcDirs = [
'src/main/res',
'src/release/res']
}
}
是否可以在项目的主要部分中使用一个公共密钥(字符串,整数,维度)并在发布/调试部分中覆盖它?
提前致谢。
答案 0 :(得分:1)
我刚才意识到这只是一个命名问题。发布包的名称拼写错误。抱歉这个愚蠢的问题。
现在合并正在按预期工作。
答案 1 :(得分:1)
请看这里:http://tools.android.com/tech-docs/new-build-system/resource-merging
您为构建类型定义了多个资源来源。在这种情况下,它们具有相同的优先级,并可能导致冲突。
如果要进行正确的合并,则需要创建单独的主要源集。它的优先级低于构建类型资源。
sourceSets {
main {
java.srcDirs = ['src/main/java']
res.srcDirs = ['src/debug/res']
}
debug {
res.srcDirs = ['src/debug/res']
}
release {
res.srcDirs = ['src/release/res']
}
}
但是使用这样的目录结构,它必须从没有sourceSets定义的框中解决。