亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

【騰訊TMQ】管中窺豹:結合NewApi實踐來了解Lint代碼掃描

2019-11-09 17:48:57
字體:
來源:轉載
供稿:網友

導讀

lint是著名的C/C++語言靜態代碼分析工具之一,Android Lint顧名思義,針對Android的靜態代碼分析工具,能夠對Android項目中潛在的bug、可優化的代碼、安全性、性能、可用性、可訪問性、國際化等進行檢查。

在Android SDK Tools 16及更高的版本中,Lint工具會自動安裝。通過對Android工程源代碼等進行掃描檢查,可發現潛在的問題,更好的提升代碼質量。Android Lint提供了命令行方式執行,也與IDE(如Eclipse、Android Studio)集成提供了IDE圖形界面,單獨輸出的xml和html結果報告可以提供更豐富的信息。

lint掃描規則初覽

1. NewApi規則說明

初步掃描手管代碼得到一份html的報告,結果分類比較清晰,但有2000+error,12000+warning,,嚇的手一抖直接關掉了。。

為了降低大家的心理門檻,我們從手管已經接入Daily的NewApi規則來看看lint是怎么工作的

最簡單的,先來看看NewApi規則說明:

可以對NewApi規則有個大致的了解,掃描App中的Android Api,對起始版本大于AndroidManifest.xml中聲明的minSdkVersion,即未加判斷調用的高版本Api進行提示。沒有判斷調用不支持的Api會怎么樣呢?低版本機器在執行到該代碼段時就會拋出NoSuchMethodException異常crash。

2. NewApi掃描結果

再來看看NewApi的掃描結果:

可以看到檢查結果中的issueid、summary、PRiority、severity、category、explanation和說明中是一致的,message中有更詳細的代碼段接口版本說明,location字段中給出了對應的代碼位置。

Issueid:規則名,唯一;

Summary:規則的簡單概述;

Priority:優先級,1~10,10為最嚴重

Severity:嚴重性,Fatal,Error,Warning,Information,Ignore

Category:類別,Correctness 正確性Security 安全性Performance 性能Usability 可用性accessibility 可達性i18n 國際化

Explanation:規則詳細描述及問題解決建議

lint規則實現原理篇

1.lint規則主要模塊

從NewApi在手管的落地實踐來看NewApi確實是解決Api版本兼容性的一大利器,lint是怎么實現這一規則的呢?lint支持的280+規則都是怎么實現的呢?

我們來看看lint規則的主要模塊:

Issue:lint規則定義,比如NewApi,lint已有規則列表維護在BuiltinIssueRegistry類中,目前lint官網提供有280+個規則,可以按需打開也可以修改各個規則的嚴重級別,已有規則配置可以見實踐篇;

Detetor:檢索項目中檢測項對應的問題,一個檢測器可以檢索多個獨立但相關的問題,比如通過一個檢測器查找多種Manifest相關的問題;

Implematation:連接檢查項和檢測器,也聲明規則的查找范圍,常用的scope包括CLASS_FILE,java_FILE,RESOURCE_FILE等;

Registry:注冊模塊,lint維護了一張所有規則的列表,檢查規則通過注冊添加到規則列表中;

2.NewApi規則注冊類

從NewApi檢查項的注冊定義可以看到,issueid、summary等均在issue注冊時傳入以便在結果報告中展示,Implematations中scope聲明了規則查找范圍,Scope.CLASS_FILE標明了NewApi檢查項針對編譯后的class字節碼進行掃描:

3.NewApi掃描核心類

再來看看NewApi掃描核心的ApiDetector:

ApiDetector檢測器繼承自ResourceXmlDetector并實現Detector.ClassScanner和Detector.JavaScanner接口,Detector類中提供了7種XXXScanner接口

Scanner也并不是直接進行代碼行查找,scanner中通過lombok.ast(Abstract Syntax Tree抽象語法樹) API來進行代碼節點的查找,有興趣的童鞋可以參照Eclipse AST介紹。

掃描規則實際上就是實現detector的過程,每個detector可以定義1個或多個不同類型的issue,像ApiDetector中會處理多個Api調用相關的規則:NewApi,InlinedApi,Override,UnusedAttribute;

繼續查看ApiDetector最主要的checkClass()可以更深入了解NewApi的掃描過程:

Api版本庫中維護了一份Android每個版本Class的類關系和成員變量,是Api兼容性檢測的前提條件

首先進行類掃描處理,如果沒有TargetApi定義的局部miniSDK則獲取AndroidManifest.xml中minSdkVersion定義,首先進行繼承類和接口類的掃描判斷,發現的問題通過report()函數輸出:

掃描結果-類兼容問題

然后開始對類節點的掃描處理,同樣判斷方法前是否有TargetApi標注定義了局部miniSdk,依次檢查類中method、field、LDC引用值,源碼中可以看到在method、field的調用判斷中,也對android常用的版本判斷格式if(Build.VERSION.SDK_INT >= XX)的分支進行判斷檢查

對應的掃描結果中message字段返回了兼容性調用問題的類型及起始版本,并將發現的問題通過report()函數輸出。

掃描結果-Field調用兼容問題:

掃描結果-method調用兼容問題:

自定義掃描規則篇

通過走讀lintNewApi的實現過程,我們也清楚了lint中的規則是如何定義并實現的,我們自己是否也可以參照這個結構來自定義規則呢?答案是肯定的,lint也支持自定義規則擴展,自定義規則通過IssueRegistry加入到規則表中和其他規則一起使用。什么場景適合自定義規則呢?比如手管UI庫的編寫規范,典型問題的修復情況,某些封裝了不建議直接使用的Api的調用等都可以通過自定義規則來規范和提醒。

自定義lint規則是以jar形式存在的,通過繼承lint的兩個類來實現規則擴展:

①繼承IssueRegistry:自定義Lint規則的主類,有且只有一個,注冊這個自定義Lint項目中有哪些自定義的issue:

②繼承Detector并實現Detector中合適的XXXScanner接口:可以根據需求實現多個自定義Detector類,在每個Detector類中實現自定義的一個或多個issue;

在eclipse中新建java工程并引用sdk/tools/lib/lint-api.jar包,手動添加導出配置MANIFEST.MF文件

export導出jar包,生成的jar包放到~/.android/lint/路徑下,此時調用命令行工具就可以看到我們自定義的規則了

總結篇

管中窺豹,走讀已有規則的實現可以讓我們對工具有更全面的了解,更好的應用到項目中,網上關于自定義規則的示例也不多,源碼中的規則實現也是一個很好的參照途徑,也需要我們更進一步分析代碼問題挖掘個中需求,才能發揮工具的更大作用。

本文簡單結合手機管家NewApi的實踐來了解Lint代碼掃描過程,期待大家一起來探討代碼掃描工具有哪些更有價值的應用場景呢?

參考資料:

[1] http://tools.android.com/tips/lint/writing-a-lint-check

[2]https://android.googlesource.com/platform/tools/base/+/master/lint/

[3]https://www.bignerdranch.com/blog/building-custom-lint-checks-in-android/

[4] Android Lint: 靜態檢查Android版本兼容性問題[5]Android Lint工作原理剖析

【TMQ新書專欄】https://weidian.com/?userid=984448577

原文鏈接:http://tmq.QQ.com/2017/02/newapi_lint/

關注我們的微信公眾號查看完整內容哦~~~~

想知道更多測試相關干貨 請關注我們的微信公眾號:騰訊移動品質中心TMQ 二維碼: 這里寫圖片描述

版權聲明:騰訊TMQ擁有內容的全部版權,任何人或單位對本貼內容進行復制、轉載時請申明原創騰訊tmq,否則將追究法律責任。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av大片在线| 欧美另类69精品久久久久9999| 久久最新资源网| 国产亚洲激情在线| 欧美极品美女视频网站在线观看免费| 国产精品久久婷婷六月丁香| 日韩女在线观看| 亚洲肉体裸体xxxx137| 26uuu久久噜噜噜噜| 国产精品黄色影片导航在线观看| 亚洲欧美精品在线| 性欧美视频videos6一9| 亚洲2020天天堂在线观看| 日韩在线视频网站| 欧美最猛性xxxxx(亚洲精品)| 日韩欧美在线一区| 欧美黑人xxxx| 韩国国内大量揄拍精品视频| 欧美精品福利视频| 国产国语刺激对白av不卡| 欧美在线观看网站| 国产91精品网站| 91精品视频播放| 亚洲欧美在线免费观看| 91国在线精品国内播放| 91免费版网站入口| 亚洲欧洲免费视频| 日韩成人av在线播放| 欧美一级黑人aaaaaaa做受| 欧美激情日韩图片| 国产日产久久高清欧美一区| 亚洲a一级视频| 亚洲美女av在线| 亚洲第一av网站| 日韩欧美精品中文字幕| 免费91麻豆精品国产自产在线观看| 青草青草久热精品视频在线网站| 国产精品99久久久久久白浆小说| 日韩欧美在线一区| 136fldh精品导航福利| 亚洲精品自在久久| 国模精品视频一区二区三区| 欧美巨猛xxxx猛交黑人97人| 最近中文字幕2019免费| 亚洲性生活视频在线观看| 成人久久久久爱| 精品国产一区二区三区久久久| 成人福利视频网| 国产精品美女av| 国产精品www色诱视频| 亚洲sss综合天堂久久| 欧美另类极品videosbest最新版本| 亚洲精品自拍第一页| 精品亚洲精品福利线在观看| 久久国产精品偷| 亚洲成人动漫在线播放| 91在线观看免费高清| 亚洲福利视频在线| 欧美一级成年大片在线观看| 亚洲国产91精品在线观看| 久久影视三级福利片| 亚洲欧美中文日韩在线v日本| 亚洲第一精品夜夜躁人人躁| 欧美怡红院视频一区二区三区| 国产精品人人做人人爽| 57pao精品| 国产成人综合一区二区三区| 国产亚洲视频在线| 国产成人在线精品| 狠狠躁夜夜躁久久躁别揉| 亚洲天堂av在线免费观看| 亚洲毛片在线观看.| 美女扒开尿口让男人操亚洲视频网站| 欧美中文字幕精品| 久久久精品在线观看| 国产丝袜一区视频在线观看| 欧美激情精品久久久久久黑人| 日韩在线欧美在线| www.国产精品一二区| 亚洲男人的天堂在线| 久久久久久国产精品久久| 久久久久久九九九| 久久福利视频网| 欧美最猛黑人xxxx黑人猛叫黄| 不卡av在线网站| 亚洲成人黄色网址| 亚洲国产另类 国产精品国产免费| 亚洲第一区第一页| 国产欧美 在线欧美| 狠狠色香婷婷久久亚洲精品| 2018国产精品视频| 成人免费观看49www在线观看| 精品国产一区二区三区久久| 欧美激情精品久久久| 国产精品网站入口| 久久国产精品偷| 久久视频这里只有精品| 日韩亚洲欧美中文在线| 欧美激情一区二区三级高清视频| 日韩av电影在线网| 日韩一区二区三区国产| 最近中文字幕mv在线一区二区三区四区| 97在线观看免费| 国产精品精品视频一区二区三区| 欧美性猛交xxxx黑人猛交| 97视频人免费观看| 欧美日韩亚洲一区二区三区| 国内精品国产三级国产在线专| 美日韩丰满少妇在线观看| 国产午夜精品全部视频在线播放| 中文字幕亚洲天堂| 欧美精品少妇videofree| 黄色成人av在线| 国语自产偷拍精品视频偷| 91精品国产高清自在线| 亚洲偷熟乱区亚洲香蕉av| 国产精品爱久久久久久久| 国产精品一二三视频| 91精品久久久久久综合乱菊| 136fldh精品导航福利| 久久精品这里热有精品| 日韩免费观看视频| 国产日韩精品在线观看| 国产成人激情小视频| 91久久综合亚洲鲁鲁五月天| 国产精品一区av| 日韩在线视频观看| 欧美日韩免费一区| 欧美成人四级hd版| 中文一区二区视频| 91老司机精品视频| 国产成人av在线| 国产日韩中文在线| 国产精品伦子伦免费视频| 亚洲国产精品电影| 一区二区三区动漫| 亚洲一区av在线播放| 国产精品久久久久久久av大片| 26uuu另类亚洲欧美日本老年| 国产精品久久久久久久久久99| 少妇高潮久久77777| 久久久久久久亚洲精品| 欧美激情亚洲一区| 国产精品色悠悠| 欧美国产日本高清在线| 国产视频精品xxxx| 久久中文字幕在线| 亚洲精品一区二区三区不| 欧美激情aaaa| 精品国产乱码久久久久久虫虫漫画| 亚洲欧美综合区自拍另类| 国产日韩欧美日韩大片| 国语自产在线不卡| 午夜精品三级视频福利| 欧美大片在线影院| 91在线观看免费高清| 国产91精品久久久| 亚洲影院色在线观看免费| 日本一区二区三区在线播放| 中文字幕精品av| 黑人巨大精品欧美一区二区| 精品久久久久久中文字幕大豆网| 国产精品网址在线| 91精品国产91久久久久久不卡|