4

我想使用 Gradle 创建 2 个不同的 APK(发布和调试),并且我想为它们使用不同的名称('appName' 和 'appName debug')。

我找到了一些解决方案,但对我不起作用:
链接 1
链接 2

我想在设备上安装两个 apk,但出现以下错误:

 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']
    }
}

是否可以在项目的主要部分使用一个通用键(字符串、整数、维度)并在发布/调试部分覆盖它?

提前致谢。

4

2 回答 2

1

我刚刚意识到这只是一个命名问题。发布包的名称拼写错误。对不起这个愚蠢的问题。

现在合并按预期工作。

于 2013-10-21T07:47:06.027 回答
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 定义的情况下解决。

于 2016-02-25T09:05:54.053 回答