0

同じコードベースに 2 つのアプリがあります。これらは同じ Java ファイルを使用し、res ファイルを保存します。ただし、ファイルとファイル名は同じですが、内容が異なる値と描画可能なフォルダーを除きます。

私が抱えている問題は、Gradle のビルド時に、RI を使用するすべての場所でエラーが発生するため、問題が発生することです。

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でビルドするとエラーは発生しませんが、プロジェクトをビルドすると、Rが見つからないため、Javaファイル全体にエラーが発生します..パッケージ名が存在しないことに関係していると推測しています私のビルドフレーバー設定により正しいです。

何か案は?

4

3 に答える 3

1

さて、これで私の細かな問題が完了したので、これが私の実際の答えの試みです:

問題は、res/ 内に各フレーバーのリソース ディレクトリがあるという事実にあると思います。この投稿を見ると、フレーバー固有のリソースは、持っている res/flavorname ではなく、src/flavorName/res ディレクトリに配置する必要があることがわかります。

あなたがそれをしている間に、先に進んでソースセットクロージャーからフレーバークロージャーを削除してください。ディレクトリ名がフレーバー名と一致し、フォルダーの標準的な編成に従っている限り、フレーバーのソース セットを定義する必要はありません。

于 2016-06-29T04:13:59.810 に答える
0

私はコメントするのに十分な評判を持っていないので、答えなければなりません。

build.gradleで使用しているディレクトリ名は「flavorone」と呼ばれていますが、resのディレクトリは実際には「flavor1」と呼ばれていますか? あなたの投稿で気づいたのですが、実際にあなたのプロジェクトに当てはまるかどうかはわかりません。もしそうなら、それが問題を引き起こしている可能性があります。

于 2016-06-29T03:52:51.140 に答える