如何將自定義task在gradle系統task運行前後執行?

在使用gradle構建android應用的過程中,build tools提供的標準gradle task有時沒法滿足自己的要求(比如上傳、自動構建),或者有些問題需要一些自定義task纔可以解決(比如使用自定義task動態修改一些文件),這個時候就需要自定義task並結合標準task一起在構建版本的過程中達到自己的目的,那麼如何讓自己寫的task能放在指定標準task後運行呢?(或者說hack)

以我最近解決的問題爲例,因爲公司的產品使用了百川的jar包和so文件,但在使用build tools2.2.0的過程中,發現要打包的so文件被構建系統修改了(官方bug,詢問無果,暫無解),導致了阿里雲推送無法正常工作,於是我編寫了一個task,在即將打包時,把正常的so文件替換掉損壞的so文件,實現如下:

    //開始--》移動正常的so文件到打包目錄中
    task moveLibToTrip(type: Copy) {
        from "bctrouble/armeabi/libsecuritysdk-3.1.27.so"
        into "$buildDir/intermediates/transforms/stripDebugSymbol/CouponSimpleChinese/debug/folders/2000/1f" +
                "/main/lib/armeabi/"
    }

    task moveLibToTrip2(type: Copy) {
        from "bctrouble/x86/libsecuritysdk-3.1.27.so"
        into "$buildDir/intermediates/transforms/stripDebugSymbol/CouponSimpleChinese/debug/folders/2000/1f" +
                "/main/lib/x86/"
    }

    afterEvaluate {
        tasks.matching {
            it.name.startsWith('process') && (it.name.endsWith('ReleaseJavaRes') || it.name.endsWith
                    ('DebugJavaRes'))
        }.each { tk ->
            tk.dependsOn(moveLibToTrip,moveLibToTrip2)
        }
    }
    //結束

可以看到,這裏實現了task moveLibToTrip,moveLibToTrip2先於以process開頭以ReleaseJavaRes或DebugJavaRes結尾的標準task執行(當然還可以寫成it.name.equals(***),語法類似Java)。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章