本文將結合上週在 JetBrains 開發者大會分享的《mPaaS IDEA 插件實踐》,深刻展開 mPaaS 在 IDEA 插件開發之路上踩過的坑和沉澱的思考,但願可以帶來一些參考性:程序員
開篇介紹 mPaaSapi
移動開發平臺(Mobile PaaS,簡稱 mPaaS)是源於支付寶 App 的移動開發平臺,爲移動開發、測試、運營及運維提供雲到端的一站式解決方案,能有效下降技術門檻、減小研發成本、提高開發效率,協助企業快速搭建穩定高質量的移動 App。架構
mPaaS 冷啓動時的接入成本優化框架
這是對 mPaaS 剛啓動並對外服務的時候,項目組開發資源的真實描摹。 在當時,四五個工程師須要 hold 如此龐大的框架而且支撐對外能力輸出。對於一羣熟悉 C 端業務的程序員而言,挑戰不言而喻。這個時期咱們基本面臨兩個問題:運維
接下來咱們着重圍繞「如何簡化客戶接入成本」展開討論,主要爲兩部分:maven
因此,咱們在 Android 端,選擇了 IDEA Plugin 做爲切入點。模塊化
工欲善其事,必先利其器:選擇 IDEA Plugin IDEA 做爲 Android 開發的工具平臺,提高了 Android Coding 的效率和程序員 Coding 的幸福感。 當 mPaaS 團隊開始對外提供產品服務的時候,咱們但願達成一個願景就是:simple code and simple build。 IDEA Plugin 無疑是 mPaaS 簡化 Android 接入成本的不二選擇。工具
如何克服 IDEA Plugin 開發過程當中踩過的坑組件化
在開發 IDEA Plugin 過程當中,咱們遇到兩方面的挑戰:post
API 接口穩定性
mPaaS IDEA 插件是基於 Android Studio Android Plugin 之上的一層插件封裝。 在基於 Android Studio Plugin 以及 IDEA 開發過程當中,最大的困擾來來自於 API 不穩定、修改頻繁, 例如: Gradle build 、Install apk等功能的api在Android studio 2.1x 版本和 3.x 版本實現徹底不一樣。(參見後文API變化列表)。
Code Everything and Build Everything
mPaaS 存在若干組件,組件以前的關係如圖所示
因此不能採用傳統的 maven 樹狀依賴傳遞,只能採用依賴圖的方式傳遞依賴。Gradle、Maven 等工具樹形依賴顯然不能知足要求。
解決依賴問題
如下僅是部分 API 變化,供參考:
API | 3.0.1 | 3.1.0 | 3.1.2 | 3.1.4 | 3.2 | 3.2.x |
---|---|---|---|---|---|---|
GradleRequest | 默認constuctor | 默認constuctor | 默認constuctor | constuctor with file | constuctor with file | 默認constuctor,but but classpath 不一致 |
Gradle Invoker | Gradle Build invoker | Gradle Build invoker | Gradle Build invoker | Gradle Build invoker | Gradle Build invoker | Gradle Build invoker,classpath 不一致 |
Import Gradle Project | NewProjectImportGradleSyncListener | NewProjectImportGradleSyncListener | NewProjectImportGradleSyncListener | NewProjectImportGradleSyncListener | GradleSyncListener |
2.1. 經歷過手動編寫依賴文件
這一階段,就是給一份帶有標註的文件,操做依賴文件便可
2.2. Gradle & IDEA 結合
目前咱們正處於這一階段,對每一次將要發佈的依賴,咱們寫了一個基於 Dex 產物的依賴分析器,分析 Bundle 之間的依賴關係。
這個依賴分析器可以根據實現定義好的依賴切分規則,將全部Bundle切分紅若干Bundle組。如圖所示
2.3. Looking forward
咱們但願的終極階段是:可以將用戶接入體驗儘量地提高,而且工具方面有一部分自主提示的功能。若是你們有好的思路和想法,歡迎和咱們一塊兒交流。
演示如何運用 mPaaS IDEA Plugin 建立工程
進一步瞭解 mPaaS 開發環境配置和應用建立流程,參考文檔: tech.antfin.com/docs/2/5172…
演示如何運用 mPaaS IDEA Plugin 生成無線保鏢圖片
進一步瞭解圖片加密,參考文檔: tech.antfin.com/docs/2/8583…
演示如何運用 mPaaS IDEA Plugin 接入熱修復能力
進一步瞭解 mPaaS 熱修復功能,參考文檔: tech.antfin.com/docs/2/8589…
如何優化 Code&Build 效率的思考
對於一個蓬勃興起的開源項目來講,快速迭代和 API 穩定性之間彷佛有難以彌合的矛盾。歷史包袱恰是 API 穩定性的產物,不少人眼中,Api穩定性會致使歷史包袱沉重,可是對於 IDEA Plugin 來講,不穩定的 API 帶來的是插件碎片化。這個版本能夠支持的能力,下一個小版本卻又不必定能夠。組件化,容器化盛行的今日,咱們是否是能夠將每個 Plugin 做爲一個 OSGi 的服務提供出去,保證服務的穩定性,從個人角度理解會比維持接口穩定性簡單的多。
Code 和 Build 是工程師的左右手,左手 Code,一行有一行,右手 Build 一次又一次。 IDEA 擁有 Android、Python、Go、Web 和 C/C++ 等衆多 IDE 分支,可謂是 Code Everything 的表明。 Gradle 的 Solgan 是 build ererything。 那是否 IDEA 和 Gradle 能夠有更加良好的協做方式,在 Build error and error 重重包圍下,解放程序員,讓程序員花費更多的時間在 Code 上。 讓咱們拭目以待。
往期閱讀
填寫你對移動開發的具體需求和痛點吧,幫助咱們進一步優化 mPaaS 的能力!
即日起截止 11.30 晚 18:00,填寫提交 mPaaS 開發者調研問卷,即有機會獲取限量版螞蟻 U 型枕 1 個。 咱們將在掘金平臺完成問卷填寫的用戶中抽取 5 位,贈送螞蟻公仔限量版 U 型枕。