gradle - संपत्ति फ़ोल्डर में एंड्रॉइड स्टूडियो के साथ कॉपी कार्य कैसे चलाएं




android-studio prebuild (5)

अब तक मैंने अपने "build.gradle" के अंत में निम्नलिखित जोड़ा है

task copyFiles(type: Copy)

copyFiles {
    description = 'Copies html5 files from the common library...'
    from '../../www'
    into 'assets/www'
    include('**/*')
}

अब मुझे एंड्रॉइड स्रोत को संकलित करने से पहले इस कार्य को हर बार निष्पादित करने के तरीके पर कुछ मदद चाहिए। मैं कमांड लाइन से कॉपी कार्य को मैन्युअल रूप से चला सकता हूं, लेकिन जब मैं एंड्रॉइड स्टूडियो में "रन" पर क्लिक करता हूं तो आईडी इसे चलाने की तरह है।

नीचे दिए गए सुझाव की सहायता से, मैंने जोड़ा है

clean.dependsOn copyFiles
clean.mustRunAfter copyFiles

और इस अतिरिक्त के साथ मैं अपने प्रतिलिपि कार्य को पुनर्निर्माण -> रन करके चलाने के लिए प्राप्त कर सकता हूं। यह कुछ भी नहीं है लेकिन पुनर्निर्माण चरण को छोड़ना अच्छा होगा।

यहां संपूर्ण बिल्ड है। ग्रेडल जो एंड्रॉइड स्टूडियो के साथ उपयोग कर रहा हूं।

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}


apply plugin: 'android'

dependencies {
    compile files('/libs/acra-4.3.0.jar')
}

android {
    compileSdkVersion 17
    buildToolsVersion "17"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 17
    }
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src','libs']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        instrumentTest.setRoot('tests')
    }
}


task copyFiles(type: Copy)

copyFiles {
    description = 'Copies html5 files from the common library...'
    from '../../www'
    into 'assets/www'
    include('**/*')
}

clean.dependsOn copyFiles
clean.mustRunAfter copyFiles

इस तरह मैं अपने एंड्रॉइड-ग्रेडल बिल्ड सिस्टम में फ़ाइल संपत्तियों की कस्टम प्रतिलिपि करता हूं

preBuild.dependsOn copyFiles

इस लाइन को अपनी build.gradle फ़ाइल में जोड़ें:

assemble.dependsOn copyFiles
assemble.mustRunAfter copyFiles

जहां assemble कोई कार्य हो सकता है।

संपादित करें: मैंने यह सुनिश्चित करने के लिए mustRunAfter बिट जोड़ा है कि कॉपीफाइल कार्य किसी अन्य एकत्रित निर्भरताओं से पहले चलाया जाता है।


मुझे आपकी बहुत ही समस्या थी और मैं इसे हल करने में सक्षम था:

android.buildTypes.all{ buildType ->    
    task "${buildType.name}CopyFiles" (type: Copy)
    "${buildType.name}CopyFiles" {
        description = 'Copies html5 files from the common library...'
        from '../../www'
        into 'assets/www'
        include('**/*')
    }

    tasks.getByPath(":${project.name}:assemble${buildType.name.capitalize()}").dependsOn "${buildType.name}CopyFiles"
}

समस्या यह है कि एंड्रॉइड स्टूडियो एक विशिष्ट इकट्ठा कार्य को कॉल करता है जैसे कि जब आप रन पर क्लिक करते हैं तो डिबग इकट्ठा करते हैं, यही कारण है कि आपको सभी एकत्रित कार्यों को अपने प्रतिलिपि कार्य पर निर्भर करना सुनिश्चित करना है।


मैं स्ट्रिंग को दूसरी निर्देशिका में कॉपी करने के लिए अपने प्रोजेक्ट में निम्न प्रति कार्य कार्य का उपयोग करता हूं:

task copyStringsUniversal(type: Copy) {
    from 'src/main/res/values'
    include 'strings.xml'
    include 'array.xml'
    into 'src/universal/res/values'
}
build.dependsOn copyStringsUniversal

task myCopyToAssets(type: Copy) {
    def toDir = rootProject.file('app/assets')
    from (rootProject.file('app/usb')) {
        include 'libhotplug.so'
    }
    into toDir
}



tasks.whenTaskAdded { task ->
    //println task.getName()
    if (task.name == 'assembleDebug' || task.name == 'assembleRelease') {
        println 'myCopy'
        myCopyToLibs.execute()
        myCopyToAssets.execute()
    }
}






build.gradle