Android 口味 - 无法解析符号 R

Android Flavors - Cannot resolve symbol R

我在同一个代码库中有两个应用程序。他们使用相同的 java 文件并保存 res 文件,除了 values 和 drawable 文件夹,它们具有相同的文件和文件名但内容不同。

我遇到的问题是,当我的 Gradle 构建时,我遇到了问题,因为我在使用 R 的任何地方都有一个 error

Cannot resolve symbol R

我的 build.gradle 文件如下所示(为简洁起见省略了一些设置):

android {
    signingConfigs {
        // left out
    }
    compileSdkVersion 23
    buildToolsVersion "23.0.1"
    useLibrary 'org.apache.http.legacy'
    lintOptions {
        disable "ResourceType"
    }
    defaultConfig {
        applicationId = "com.au.testapp"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode = 1
        buildConfigField 'String', 'app_ver_numb', '"1.00"'
        multiDexEnabled = true
    }
    sourceSets {
        main {
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            assets.srcDirs = ['assets']
            res.srcDirs = ['res/main']
            manifest.srcFile 'AndroidManifest.xml'
        }

        flavorone{
            res.srcDirs = ['res/flavorone']
        }

        flavortwo{
            res.srcDirs = ['res/flavortwo']
        }

        instrumentTest.setRoot('tests')
    }

    productFlavors {
        flavorone {
            applicationId "com.au.testapp.flavorone"
            versionName = "''"
            buildConfigField 'String', 'app_id', '"79"'
        }
        flavortwo {
            applicationId "com.au.testapp.flavortwo"
            versionName = "''"
            buildConfigField 'String', 'app_id', '"79"'
        } 
    }

    buildTypes {
        debug {
            productFlavors.flavorone.signingConfig signingConfigs.flavorone
            productFlavors.flavortwosigningConfig signingConfigs.flavortwo 
        }
        release {
            productFlavors.flavorone.signingConfig signingConfigs.flavorone
            productFlavors.flavortwo.signingConfig signingConfigs.flavortwo 

            minifyEnabled true
            shrinkResources true
            proguardFile getDefaultProguardFile('proguard-android.txt')
        }
    }
}

我的文件夹结构如下所示:

src
    com
        au
            testapp
                adapter
                utils
                db
                common
                ...
res
    main
        anim
        animator
        ...
        drawable
        layout
        values
        ...
    flavorone
        drawable
        values
    flavortwo
        drawable
        values

当我在 Gradle 中构建它时,我没有收到任何错误,但是当我构建项目时,我的 java 文件中到处都是错误,因为它们找不到 R..我猜这是因为我的构建风格设置导致包名称不正确。

有什么想法吗?

大多数情况下是由于 XML 文件错误。 XML 文件可以是布局文件、值文件或清单文件。

1) 检查您的 xml 个文件。

2) 像这样 import android.R.*; 或像这样 import com.au.testapp.R;

导入 R

3) 清理项目并重建

我没有足够的声誉来发表评论,所以我必须回答。

您在 res 中的目录实际上名为 "flavor1" 而您在 build.gradle 中使用的目录名为 "flavorone" 吗?我在您的 post 中注意到了这一点,但我不确定您的项目中是否确实如此。如果是这样,可能会导致问题。

好的,既然我的吹毛求疵已经完成,下面是我实际尝试的答案:

我认为问题在于您在 res/ 中拥有每种风格的资源目录。如果您查看 at this post,您会发现特定于风味的资源应该放在 src/flavorName/res 目录中,而不是像您拥有的那样放在 res/flavorname 中。

当你在做的时候,继续从你的源集闭包中删除风味闭包。只要目录名称与风格名称匹配并且您遵循文件夹的规范组织,就不需要为风格定义源集。