1. 程式人生 > >自定義gradle外掛從入門到放棄

自定義gradle外掛從入門到放棄

       最近參與基礎架構組的crashly收集專案,其中一個環節就是收集專案中使用到的公司內部的依賴庫和混淆後的mapping檔案, 然後呼叫python檔案實現檔案和資料欄位的上傳。請求網路上傳資料這塊python使用的程式碼量非常少就幾行程式碼的事情,所以我在專案中使用了兩個.gradle檔案分別掃描依賴過濾內部的依賴庫和mapping檔案,然後在.gradle檔案中的task中呼叫python檔案上傳資料,這樣工作就告一段落,然後當我找QA和負責打包的同事提交我的幾個檔案時才知道我這做法是多麼lowbee, 這個功能每個業務線的專案都分別接入我的幾個.gradle檔案和.py檔案,然後每次.gradle和.py檔案修改在提交上去,然後各個業務線需要拉去最新的程式碼,這樣的話我需要把各個業務線的專案原始碼都盪到我本地,挨個改一遍在提交,這種做法沒有做到通用性和可維護性。在同事的建議下,我又硬著頭皮開始研究自定義gradle外掛化,然後每個業務線只需要apply我的外掛就可以,這個方案不錯,然後我就gg了,經過兩天的倒騰,總算是實現了功能。

        首先說下功能吧,就是我這邊定義2個任務,其中一個任務就是掃描業務方的專案過濾出使用公司內部的依賴,然後然後生成一個檔案,連同引數一起上傳到後臺,單單使用python檔案上傳幾行程式碼的事。

        但是這裡遇到了2個問題:

       1. 在外掛module下的python檔案在外掛中是沒法訪問的,外掛中是很容易拿到業務方的目錄,如果將python檔案放在業務方的專案中,同樣是擴充套件性不好

       2. 在外掛中上傳檔案和其他引數我引入了第三方庫的依賴,執行 uploadArchives 任務將程式碼上傳到本地倉庫後,在業務方demo中報錯,無法訪問到外掛中的依賴。

        我在技術群裡問了幾遍結果都沒有人迴應,僅有的一個同行回覆是遇到類似的問題,然後他的建議是去網上下載一個有類似功能的demo,然後修改下邏輯。順著這條線索我去網上找到第四個才算是試成功了,下面將操作過程重演一遍。      

         1)  首先新建一個Library庫,刪掉裡面的檔案最後保留和新建的資料夾如下圖所示:

           2) 刪掉build.gradle中的內容,最終配置如下所示:

          3)  在groovy資料夾下新建包名並在該名下新建檔案CrashlyPlugin.groovy, 內容如下:

            4)    在gradle-plugins資料夾下新建一個檔案com.ke.crashly.plugin.properties, 內容如下:

            5)    sync一下專案,然後找到開發工具右側的Gradle下的:crashlyplugin -> Tasks -> upload -> 雙擊uploadArchives,就會在當前專案下生成一個目錄crashlyrepo, 接下來就可以在專案中使用這個外掛了;

            6)    在工程的根目錄下的build.gradle檔案下新增如下程式碼:

             7)    在工程的主module的build.gradle檔案最後新增如下程式碼:

          8)    sync一下工程,同樣是在開發工具右側的Gradle標籤下,找到:app -> Tasks -> other ->  uploadRepoNameForCrashly控制檯就會列印百度首頁網頁程式碼,也可以在Terminal下輸入命令: gradle task -q uploadRepoNameForCrashly -s.