【问题标题】:Android Flavors - Cannot resolve symbol RAndroid Flavors - 无法解析符号 R
【发布时间】:2016-06-29 03:24:47
【问题描述】:

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

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

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.. 我猜这与包有关由于我的构建风格设置,名称不正确。

有什么想法吗?

【问题讨论】:

    标签: java android android-productflavors android-build-flavors


    【解决方案1】:

    好的,既然我的挑剔已经完成,这是我实际尝试的答案:

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

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

    【讨论】:

    • 我会试一试,很快就会回复你!感谢您到目前为止的帮助:)
    • 没问题。我仔细研究了您的问题,我认为您还必须在移动风味资源后将内容从 res/main 弹出到 res 中。 (不要忘记在那之后更新 build.gradle)。此外,您必须将基础应用程序的 java 文件(之前在 src 中的文件)移动到 src/main/java 中。这篇 SO 帖子在解释如何根据口味构建文件方面比我做得更好:stackoverflow.com/a/20345749/6526330
    • 啊,现在说得通了!这是我在口味方面的第一天,所以我仍然习惯于如何设置它。感谢您的帮助,我现在走在正确的轨道上!
    • 哇!我很高兴听到它。很高兴我在此过程中获得了一个昵称。
    【解决方案2】:

    大部分时间是由于 XML 文件错误造成的。 XML 文件可以是布局文件、值文件或清单文件。

    1) 检查您的 xml 文件。

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

    3) 清理项目并重建

    【讨论】:

    • 自从我在添加风味之前构建以来,XML 文件没有改变,我会尝试你的 R 导入并清理和重建,看看是否有效。
    • 尝试以这种方式导入import com.au.testapp.R;
    • 那行不通。 R.仍然有问题。我的构建中没有flavorone或flavortwo->生成->源-> r
    • 我投了赞成票,因为我知道 xml 文件中的错误可能会导致 R 出现问题。这不是我要寻找的答案,但可能对其他人有帮助
    【解决方案3】:

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

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

    【讨论】:

    • 啊,你忍了我
    • 哈哈,我是为挑毛病而活
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 2016-08-23
    • 1970-01-01
    • 2023-03-03
    相关资源
    最近更新 更多