Android Studio 2.3:无法在android:versionName中使用字符串资源

时间:2017-03-06 10:20:42

标签: android

我升级了Android Studio 2.2 - > 2.3今天和现在在Android Studio中构建我以前没有的应用程序时出现编译错误。

Error:No resource found that matches the given name (at 'versionName' with value '@string/BRAND_VERSION').

这是字符串资源。

<string name="BRAND_VERSION">2.0</string>

这是清单中的相关部分。

<manifest package="com.metaswitch.cp.unbrandedpackage"
      xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools"
      android:versionCode="5"
      android:versionName="@string/BRAND_VERSION">

根据Android documentation,清单或build.gradle中的versionName允许使用字符串资源。

这不是我的应用程序特有的。我可以用这个Android sample

重新制作

它为我构建和安装很好。当我将这一行更改为build.gradle中的versionName(从strings.xml中选择一个随机字符串资源)时,它会失败并出现相同的错误。

// versionName "1.0"
versionName "@string/add_task"

这是Android示例中的build.gradle(请注意我的编辑版本名称)。

apply plugin: 'com.android.application'

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion

    defaultConfig {
        applicationId "com.example.android.architecture.blueprints.todomvploaders"
    minSdkVersion rootProject.ext.minSdkVersion
    targetSdkVersion rootProject.ext.targetSdkVersion
    versionCode 1
    // I really want to use a string resource here!
    // versionName "1.0"
    versionName "@string/add_task"

    testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
}

buildTypes {
    debug {
        minifyEnabled true
        // Uses new built-in shrinker http://tools.android.com/tech-docs/new-build-system/built-in-shrinker
        useProguard false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        testProguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguardTest-rules.pro'
    }

    release {
        minifyEnabled true
        useProguard true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        testProguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguardTest-rules.pro'
    }
}

// If you need to add more flavors, consider using flavor dimensions.
productFlavors {
    mock {
        applicationIdSuffix = ".mock"
    }
    prod {

    }
}

// Remove mockRelease as it's not needed.
android.variantFilter { variant ->
    if(variant.buildType.name.equals('release')
            && variant.getFlavors().get(0).name.equals('mock')) {
        variant.setIgnore(true);
    }
}

// Always show the result of every unit test, even if it passes.
testOptions.unitTests.all {
    testLogging {
        events 'passed', 'skipped', 'failed', 'standardOut', 'standardError'
    }
}
buildToolsVersion '25.0.0'

}

/*
 Dependency versions are defined in the top level build.gradle file. This helps keeping track of
 all versions in a single place. This improves readability and helps managing project complexity.
 */
dependencies {
    // App's dependencies, including test
    compile "com.android.support:appcompat-v7:$rootProject.supportLibraryVersion"
    compile "com.android.support:cardview-v7:$rootProject.supportLibraryVersion"
    compile "com.android.support:design:$rootProject.supportLibraryVersion"
    compile "com.android.support:recyclerview-v7:$rootProject.supportLibraryVersion"
    compile "com.android.support:support-v4:$rootProject.supportLibraryVersion"
    compile "com.android.support.test.espresso:espresso-idling-resource:$rootProject.espressoVersion"
    compile "com.google.guava:guava:$rootProject.guavaVersion"
// Dependencies for local unit tests
testCompile "junit:junit:$rootProject.ext.junitVersion"
testCompile "org.mockito:mockito-all:$rootProject.ext.mockitoVersion"
testCompile "org.hamcrest:hamcrest-all:$rootProject.ext.hamcrestVersion"

// Android Testing Support Library's runner and rules
androidTestCompile "com.android.support.test:runner:$rootProject.ext.runnerVersion"
androidTestCompile "com.android.support.test:rules:$rootProject.ext.runnerVersion"

// Dependencies for Android unit tests
androidTestCompile "junit:junit:$rootProject.ext.junitVersion"
androidTestCompile "org.mockito:mockito-core:$rootProject.ext.mockitoVersion"
androidTestCompile 'com.google.dexmaker:dexmaker:1.2'
androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2'

// Espresso UI Testing
androidTestCompile "com.android.support.test.espresso:espresso-core:$rootProject.espressoVersion"
androidTestCompile "com.android.support.test.espresso:espresso-contrib:$rootProject.espressoVersion"
androidTestCompile "com.android.support.test.espresso:espresso-intents:$rootProject.espressoVersion"

// Resolve conflicts between main and test APK:
androidTestCompile "com.android.support:support-annotations:$rootProject.supportLibraryVersion"
androidTestCompile "com.android.support:support-v4:$rootProject.supportLibraryVersion"
androidTestCompile "com.android.support:recyclerview-v7:$rootProject.supportLibraryVersion"
androidTestCompile "com.android.support:appcompat-v7:$rootProject.supportLibraryVersion"
androidTestCompile "com.android.support:design:$rootProject.supportLibraryVersion"

}

2 个答案:

答案 0 :(得分:1)

升级Android Studio后我遇到了同样的问题。关闭首选项中的即时运行有助于应用程序再次运行。

答案 1 :(得分:0)

参考Google issue tracker,这已经修复。这适用于 Android studio 3.0.0-alpha6 build

如果问题仍然存在,请在Google issue tracker报告,然后重新审核。