工欲善其事,必先利其器。 --《論語·魏靈公》前端
DoraemonKit,簡稱 DoKit,中文名哆啦 A 夢,是滴滴開源的一款功能齊全的客戶端( iOS 、Android )研發助手。今天,Dokit 3.0 版本正式發佈,開發者朋友能夠選擇更新、試用,本文是 DoKit 團隊對本次更新的技術解讀。android
首先我要表明團隊對於你們一直以來對DoKit的支持表示感謝,DoKit的今天離不開你們共同的努力和貢獻。因此爲了更好的回饋社區,咱們近期一直在努力的升級內部架構,同時咱們還結合實際業務場景新增了兩個重磅的功能:接口mock 和 健康體檢,配合平臺端dokit.cn一塊兒使用,讓DoKit的能力獲得延伸。當前,dokit 3.0.0版本已經發布,在這裏很是歡迎你們的升級使用。同時也很但願你們能將使用過程當中遇到的各類問題經過各類渠道(github issues、QQ羣等等)反饋給咱們,讓咱們你們一塊兒努力把DoKit的生態創建的更加完善。git
在這以前你們想起DoKit第一印象是什麼?好像只是一個端上的工具,包括Android、iOS、小程序。功能豐富、好用,確實也大大得提升了你們的研發效率,同時也得到了社區包括咱們滴滴內部業務的一致好評。可是咱們團隊在討論DoKit的定位以及將來規劃的時候在想:那在咱們本身的心目中DoKit應該是什麼樣的? 簡單的工具集合確定不是咱們想要的,咱們但願將DoKit打形成一個平臺,一個可以知足泛前端開發、測試、設計等等需求的功能豐富的通用型平臺。這樣當之後你們再想起或者向別人介紹DoKit的時候會說,DoKit是一個通用的研發平臺,而不只僅只是一個工具。爲此咱們推出了DoKit3.0,這也是咱們實現目標的第一步。github
1)DoKit 3.0相比於上一個版本一共解決了github上的issues 70多個,合併PR 30多個。數據庫
2)內部架構升級,其中性能和代碼的健壯性都獲得了顯著的提高小程序
3)工具優化用戶體驗優化後端
Android瀏覽器
Android端主要優化了網絡攔截、懸浮窗、位置模擬、Aop解決方案等等bash
1)網絡攔截統一了okhttp、urlconnection。網絡
2)懸浮窗新增了普通模式,再也不須要系統懸浮窗權限。
3)位置模擬現已支持百度、騰訊、高德、系統原生。
4)AOP的代碼插裝方案也由一開始的Aspectj改爲了ASM方案,兼容性和性能也都有了明顯的提高。
iOS
iOS端主要優化了多個工具的用戶體驗、加速代碼安裝速度、減小對於業務方的影響等等
1)NSLog監控、子線程UI、CocoaLumberjack日誌日誌監控等功能不須要從新啓動App便可進行開關
2)pod 倉庫多地備份(github、gitee、gitlab),解決pod install緩慢的問題
3)解決DoKit的window影響UIMenuController的嗎,致使業務方在某些機型彈不出來的問題
4)減小代碼hook對於全局的影響
5)全局支持中英文切換
如下新增的大部分Kit在Android和iOS兩端是對齊的,有些平臺特有的功能我會進行標註
提供一套基於App網絡攔截的接口Mock方案,無需修改代碼便可完成對於接口數據的Mock。
一鍵式操做,整合DoKit多項工具,數據可視化,快速準肯定位問題,讓你對app的性能瞭如指掌。
主要能幫咱們將db等本地數據在瀏覽器中進行操做,十分方便。 DBView和本地沙盒的主要區別在於本地數據庫在端上的體驗效果並非很好,由於受限於屏幕的大小,因此咱們引入這DBView,能夠將咱們的本地數據庫和瀏覽器打通,在瀏覽器上進行增刪改查等等操做,提高咱們的效率。
android直接接入的Android-Debug-Database方案;
iOS是由社區同窗y500提供的iOSDebugDatabase, 感謝該同窗的貢獻。
Android:函數耗時主要經過ASM代碼插裝的方式,會在指定的包名下進行代碼插裝,統計每一個函數的耗時,默認狀況下會在控制檯中將執行時間大於200微妙的函數調用棧打印出來。後續咱們計劃將函數耗時和平臺端打通,記錄下每個函數耗時操做。
iOS:iOS採用的額是Hook objc_msgSend, 會以樹形結構打印出某一段操做中具體的函數耗時,比Xcode的TimeProfiler更加直觀。
Android端效果圖
快速跳轉到應用設置 : 避免手動去設置裏面尋找App的麻煩;
NSUserDefalult(iOS) : 對於NSUserDefalult的數據方便進行增刪改查;
UI層級檢查 : 檢查每個UI界面的層級,層級太深的話,會影響必定的性能;
啓動耗時 : 檢查每一次啓動消耗的時間;
UI結構(IOS) :能夠動態改變每個UI元素的屬性,感謝社區HDB-Li提供;
用戶能夠自行更新體驗。
爲了讓Dokit的端上能力得延伸和擴展,同時也是爲了更好的服務好咱們的每個業務方,讓DoKit成爲一個可以知足泛前端開發、測試、設計等等各方都須要的功能豐富的通用型平臺。咱們組內通過討論決定推出dokit.cn。 平臺端主要包含如下幾項內容:
1)用戶登陸
2)使用中心
4)控制檯: 主要提供產品管理、用戶管理、數據Mock、健康體檢等功能。必須登陸之後才能訪問,你能夠建立的每個產品。而後須要將你的ProductId集成到Android和iOS中去。詳細介紹
第一步: 前往dokit.cn平臺進行帳號註冊並登陸,而後在控制檯中進行產品建立,並將產品Id集成到安卓和iOS中。具體參考上文安卓和iOS集成。
第二步: 在平臺端的數據Mock模塊中進行相應的接口Mock建立。
第三步: 每次進入SDK的數據Mock頁面,會加載在DoKit平臺添加的Mock接口列表並和本地數據進行合併。
第四步: 打開攔截接口開關並選中相應的場景或者打開接口模板開關(攔截模塊和模板模塊相互獨立),等待真實的網絡請求命中咱們的攔截規則。
攔截規則: 假如命中攔截規則咱們會將http重定向到咱們的DoKit後臺並返回Mock數據。
模板規則: 假如命中模板規則,咱們會將真實的接口數據保存,用戶能夠進入模板頁面,找到指定的模板項並將模板數據上傳到咱們的DoKit後臺並用於建立場景。
接口攔截效果圖
接口模板效果圖
想象如下如下幾種情形:
一: 之前咱們要在移動端要進行接口Mock的常規操做,基本上都是先拿到一個定義好的mock接口而後在代碼中修改url,而後等待編譯、完成之後運行一下好像沒什麼問題而後又改回去編譯。重複這樣的操做。
二: 通常來講咱們泛前端都是須要依賴後端的接口進行開發的,這個操做沒法同時進行,因此當多條業務需求同時開發的時候就容易因爲資源不足和安排不當形成進度阻塞。
三: 關於測試用例。通常來講咱們在需求評審完成之後咱們的測試人員就開始編寫測試用例了,可是這樣的用例每每都是文檔化的,咱們研發要進行用例測試邊界狀況的時候每每是經過修改代碼來完成的。測試用例大部分用例也是依賴接口的。
固然不止以上幾種狀況,咱們都知道接口聯調和測試在咱們研發中佔的比重是很大的,同時也是須要咱們反覆的修改代碼來進行測試和適配,這每每消耗着咱們絕大部分的精力。
那咱們dokit的操做是怎麼解決這個問題的呢?
咱們dokit區別於其餘接口Mock方案,由於咱們具備端上的優點,咱們依賴端上的本地抓包功能,經過攔截全部的網絡請求,根據path和query字段(跟域名無關)去匹配咱們在平臺端建立的mock接口。而後上傳真實接口模板並支持各類場景切換。由於同一個接口每每具備不一樣的場景,好比驗證碼驗證成功或者失敗等等。 測試也能夠在咱們平臺端提早編寫好測試用例接口以及各類邊界狀況。開發在研發階段就能參與到測試用例的驗證。也能夠預想整理好整個鏈路的mock接口,讓咱們在測試過程當中按照本身制定各類case往下走。
因此咱們DoKit解決方案的最大優點就是:無需進行任何業務代碼的修改的狀況下去完成絕大部分的接口Mock需求。
健康體檢部分主要咱們整合了DoKit端上的的各項工具,好比網絡、cpu、fps、內存等9個性能指標。於此同時爲了讓整個流程更加的符合測試人員的操做習慣,咱們化繁爲簡,將整個流程分爲如下三步:
1)啓動
2)正常的操做頁面而後在每一個頁面根據倒計時提醒停留10s左右,完成每一個頁面的性能數據採集工做。
3)點擊上傳,填寫用例的名稱和測試人員名稱,等待數據上傳完成。
咱們的每一次性能測試結果都將在咱們的後臺中進行記錄。咱們平臺端記錄的數據十分全面,基本上涵蓋了咱們的大部分需求,而且咱們在後端會針對性能數據進行精準的分析並給出分析結果。還有就是咱們針對性能數據進行了圖表化的展現,使得每一次的性能測試更加直觀。這樣咱們在整理的時候也不須要本身再根據數據去導出各類報表了,直接截圖就能夠用了。在這一塊仍是比較貼心的。
如下爲健康體檢的數據展示示例:
pod 'DoraemonKit/Core', :git => "https://github.com/didi/DoraemonKit.git", :tag => '3.0.0', :configurations => ['Debug']//必選
pod 'DoraemonKit/WithLogger', :git => "https://github.com/didi/DoraemonKit.git", :tag => '3.0.0', :configurations => ['Debug']//可選
pod 'DoraemonKit/WithGPS', :git => "https://github.com/didi/DoraemonKit.git", :tag => '3.0.0', :configurations => ['Debug']//可選
pod 'DoraemonKit/WithLoad', :git => "https://github.com/didi/DoraemonKit.git", :tag => '3.0.0', :configurations => ['Debug']//可選
pod 'DoraemonKit/WithDatabase', :git => "https://github.com/didi/DoraemonKit.git", :tag => '3.0.0', :configurations => ['Debug']//可選
pod 'DoraemonKit/WithMLeaksFinder', :git => "https://github.com/didi/DoraemonKit.git", :tag => '3.0.0', :configurations => ['Debug']//可選
pod 'DoraemonKit/WithWeex', :git => "https://github.com/didi/DoraemonKit.git", :tag => '3.0.0', :configurations => ['Debug']//可選
複製代碼
#ifdef DEBUG
#import <DoraemonKit/DoraemonManager.h>
#endif
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
#ifdef DEBUG
[[DoraemonManager shareInstance] installWithPid:@"productId"];//productId爲在"平臺端操做指南"中申請的產品id
#endif
}
複製代碼
# 添加倉庫
buildscript {
apply from: "config.gradle"
repositories {
google()
jcenter()
maven { url 'https://www.jitpack.io' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.1'
classpath 'com.didichuxing.doraemonkit:doraemonkit-plugin:3.0.0'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
複製代碼
# 項目app module的build.gradle中
apply plugin: 'com.didi.dokit'
複製代碼
debugImplementation "com.didichuxing.doraemonkit:doraemonkit:3.0.0"
releaseImplementation "com.didichuxing.doraemonkit:doraemonkit-no-op:3.0.0"
複製代碼
public class App extends Application {
private static final String TAG = "App";
public static Activity leakActivity;
@Override
public void onCreate() {
super.onCreate();
//productId爲在"平臺端操做指南"中申請的產品id
DoraemonKit.install(this, null, "productId");
}
}
複製代碼
其餘更多細節的介紹和用戶指南,請移至www.dokit.cn/的使用中心
爲了DoKit可以更好的服務開發者,同時也是爲了完善社區生態讓你們第一時間瞭解DoKit平臺的最新信息,咱們推出了DoKit開源社區官方公衆號:
DoKit開源社區公衆號將會第一時間發佈有關DoKit的最新消息,包括一些隱藏福利和重磅功能提早體驗。
DoKit社區活動:提PR、贏記念T恤(2020)
各位社區的朋友您們好:
爲了鼓勵更多的開發者參與到Dokit開源項目的共建中來,咱們準備發起一個長期有效的激勵活動,只要給咱們提交PR,並被咱們採納的話,就有機會得到相應的獎品。
活動規則:每個月爲一次獲獎週期,咱們會統一評審本月全部被咱們採納的PR,挑選出前3名的貢獻者,便可得到咱們提供的獎品;
活動時間:2020-04-01 ~ 2020-12-31;
活動獎品:每月前5的貢獻者將會得到DoKit記念T恤一件,而且能夠加入到咱們首頁的外部貢獻者名單中
提交的PR能夠包含:
(1)如今一些未解決的issues的處理
(2)對於現有功能的一些優化
(3)提供單獨的工具集成到DoKit中
(4)其餘有利於DoKit發展的任何事項
獲獎名單每月都在這個issues和咱們「DoKit開源社區」的公衆號裏面同步,獲獎同窗聯繫QQ用戶羣 @didi_iOS_易翔 或者 @didi_Android_金臺 領獎。
活動詳情參考
最後仍是要感謝一下社區一直以來的支持,是大家的積極響應和反饋讓DoKit變得更好,DoKit所取得的全部成績都來至於你們共同的努力。將來,DoKit還有很長的路要走,我但願接下來走的每一步都有你的陪伴。
附上github地址:
github.com/didi/Doraem… 留下你的小星星。