java कमरा-स्कीमा निर्यात निर्देशिका एनोटेशन प्रोसेसर को प्रदान नहीं की जाती है, इसलिए हम स्कीमा को निर्यात नहीं कर सकते हैं




android database (4)

Kotlin? ये रहा:

android {

    // ... (compileSdkVersion, buildToolsVersion, etc)

    defaultConfig {

     // ... (applicationId, miSdkVersion, etc)

        kapt {
            arguments {
                arg("room.schemaLocation", "$projectDir/schemas".toString())
            }
        }
    }

    buildTypes {
    // ... (buildTypes, compileOptions, etc)
    }
}

//...

प्लगइन के बारे में मत भूलना:

apply plugin: 'kotlin-kapt'

कोटलिन एनोटेशन प्रोसेसर के बारे में अधिक जानकारी के लिए कृपया देखें: कोटलिन डॉक्स

मैं Android डेटाबेस घटक कक्ष का उपयोग कर रहा हूं

मैंने सब कुछ कॉन्फ़िगर किया है, लेकिन जब मैं संकलन करता हूं, तो एंड्रॉइड स्टूडियो मुझे यह चेतावनी देता है:

स्कीमा निर्यात निर्देशिका एनोटेशन प्रोसेसर को प्रदान नहीं की जाती है, इसलिए हम स्कीमा को निर्यात नहीं कर सकते हैं। आप या तो room.schemaLocation एनोटेशन प्रोसेसर तर्क प्रदान कर सकते हैं या ExportSchema को गलत पर सेट कर सकते हैं।

जैसा कि मैं समझता हूं कि यह वह स्थान है जहां DB फाइल स्थित होगी

यह मेरे ऐप को कैसे प्रभावित कर सकता है? यहाँ सबसे अच्छा अभ्यास क्या है? क्या मुझे डिफ़ॉल्ट स्थान ( false मान) का उपयोग करना चाहिए?


अपने एप्लिकेशन मॉड्यूल के लिए build.gradle फ़ाइल में, इसे defaultConfig अनुभाग ( android अनुभाग के तहत) में जोड़ें। यह स्कीमा को आपके प्रोजेक्ट फ़ोल्डर के schemas सबफ़ोल्डर में लिख देगा।

javaCompileOptions {
    annotationProcessorOptions {
        arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
    }
}

ऐशे ही:

// ...

android {

    // ... (compileSdkVersion, buildToolsVersion, etc)

    defaultConfig {

        // ... (applicationId, miSdkVersion, etc)

        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
            }
        }
    }

    // ... (buildTypes, compileOptions, etc)

}

// ...

@mikejonesguy answer एकदम सही है, अगर आप कमरे के माइग्रेशन (अनुशंसित) का परीक्षण करने की योजना बनाते हैं, तो स्रोत सेट में स्कीमा स्थान जोड़ें।

अपनी build.gradle फ़ाइल में आप इन जेनरेट की गई स्कीमा JSON फ़ाइलों को रखने के लिए एक फ़ोल्डर निर्दिष्ट करते हैं। जैसे ही आप अपना स्कीमा अपडेट करते हैं, आप कई JSON फ़ाइलों के साथ समाप्त हो जाएंगे, हर संस्करण के लिए एक। सुनिश्चित करें कि आप हर जेनरेट की गई फ़ाइल को स्रोत नियंत्रण में रखें। अगली बार जब आप अपना संस्करण संख्या फिर से बढ़ाएँगे, तो कक्ष परीक्षण के लिए JSON फ़ाइल का उपयोग करने में सक्षम होगा।

  • फ्लोरिना मुंटेंस्कु ( source )

build.gradle

android {

    // [...]

    defaultConfig {

        // [...]

        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
            }
        }
    }

    // add the schema location to the source sets
    // used by Room, to test migrations
    sourceSets {
        androidTest.assets.srcDirs += files("$projectDir/schemas".toString())
    }

    // [...]
}

उपरोक्त उत्तर सही हैं। इस संस्करण का पालन करना आसान है:

क्योंकि "स्कीमा निर्यात निर्देशिका एनोटेशन प्रोसेसर को प्रदान नहीं की जाती है", इसलिए हमें स्कीमा निर्यात के लिए निर्देशिका प्रदान करने की आवश्यकता है:

चरण [१] आपकी फाइल में जो रूमडैबस को बढ़ाती है, लाइन को इसमें बदलें:

`@Database(entities = ???.class,version = 1, exportSchema = true)`

या

`@Database(entities = ???.class,version = 1)` 

(क्योंकि डिफ़ॉल्ट मान हमेशा सत्य होता है)

चरण [2] अपने बिल्ड.ग्रेडल (प्रोजेक्ट: ????) फ़ाइल में, डिफ़ॉल्ट कॉन्फिग {} (जो कि एंड्रॉइड {} बड़े सेक्शन के अंदर है) के अंदर, javaCompileOptions {} सेक्शन जोड़ें, यह इस तरह होगा:

         android{
                defaultConfig{
                      //javaComplieOptions SECTION
                      javaCompileOptions {
                            annotationProcessorOptions {
                                     arguments = ["room.schemaLocation":"$projectDir/schemas".toString()]
                            }
                       }
                      //Other SECTION
                      ...
                }
         }

$ ProjectDir : एक चर नाम है, आप इसे बदल नहीं सकते। इसे आपकी खुद की प्रोजेक्ट डायरेक्टरी मिलेगी

स्कीमा : एक स्ट्रिंग है, आप इसे अपनी पसंद के किसी भी व्यक्ति में बदल सकते हैं। उदाहरण के लिए: "$projectDir/MyOwnSchemas".toString()





android-room