一、準備工作
由于后端技術(shù)我熟悉的是JAVA,所以這個程序我是使用JAVA寫的。寫工具之前需要先準備以下工具:
SpringMVC:Spring MVC框架是有一個MVC框架,通過實現(xiàn)Model-View-Controller模式來很好地將數(shù)據(jù)、業(yè)務(wù)與展現(xiàn)進行分離。
Hibernate:是一個基于元數(shù)據(jù)的輕量級的ORM框架。
Mysql:用來存儲APP信息以及第三方SDK信息
APKTool:反編譯APK的利器
HttpClient:是用來提供高效的、最新的、功能豐富的支持 HTTP 協(xié)議的客戶端編程工具包,并且它支持 HTTP 協(xié)議最新的版本和建議。
HTMLparser:HTML解析工具
SAX:SAX(simple API for XML)是一種XML解析的替代方法。相比于DOM,SAX是一種速度更快,更有效的方法。
二、設(shè)計思路
以下只介紹這個工具的設(shè)計思路,沒有貼具體代碼,思路清晰以后寫代碼很簡單。
1. 數(shù)據(jù)庫設(shè)計
我們采集數(shù)據(jù)就需要設(shè)計數(shù)據(jù)庫表,這個很簡單,我設(shè)計了6個表:
tools_app_category:保存APP的分類信息
tools_app_info:保存APP基本信息
tools_app_packages:保存APP包名信息及SDK信息
tools_app_packages_relat:APP和第三方SDK關(guān)聯(lián)表
tools_app_perm:APP權(quán)限信息表
tools_app_perm_relat:APP與權(quán)限的關(guān)聯(lián)表
2. 獲取APP安裝包
各大應(yīng)用市場都有TOP xx應(yīng)用列表,這些APP一般是用戶使用比較多APP,這些APP使用的第三方SDK一般是比較成熟的SDK,值得我們是參考。
我選擇從小米應(yīng)用市場下載熱門APP作為數(shù)據(jù)分析樣本,選擇應(yīng)用排行靠前的1000余款A(yù)PK,我只選擇分析應(yīng)用類APP,把游戲類的過濾掉了。
應(yīng)用排行榜界面的url格式是這種:http://app.mi.com/topList?page=xx,使用HttpClient獲取這些頁面網(wǎng)頁源碼,再使用HTMLparser解析網(wǎng)頁源碼獲取每一個APP的詳情url地址,APP詳情地址的格式是這種:http://app.mi.com/details?id=app包名,然后在APP詳情頁面解析出APK的下載地址并下載該APK。除了APK的下載地址以外還可以通過這個界面獲取APP的其他基本信息,如有需要可以保存到數(shù)據(jù)庫,我的是存在tools_app_info表中。
3. 反編譯APK下載完APK以后要做的工作就是反編譯APK了,這里我們就要用到搶到的APKTool。這一步其實很簡單,大家知道JAVA里面可以直接運行腳本命令的,使用一下命令即可反編譯APK。
Runtime.getRuntime().exec("java -jar apktool.jar d -f"+apkPath+" -o "+outPath)
這里可能有人會問,反編譯出來的是smali文件,有什么用處呢?反編譯以后有兩部分內(nèi)容對我們有用smali為前綴的目錄以及AndroidManifest.xml。通過AndroidManifest.xml可以獲取apk的基本信息,如有需要可以使用XML解析工具解析,我這里是使用SAX計息AndroidManifest.xml并且獲取每個APP的進程數(shù)、廣播接收器的數(shù)量以及權(quán)限等信息。以smali為前綴的目錄是我們主要使用的數(shù)據(jù)。大家知道每一個SDK的包名基本上是唯一的,很少有重復(fù),而java文件的包名和目錄名是有對應(yīng)關(guān)系的,通過獲取smali文件所在的路徑即可知道這個APK的所有包名。就這樣把APK的包名全部收集起來存放到數(shù)據(jù)庫中備用。這里大家要注意的是在收集包名的時候可以做一下初步篩選,把一些沒有用的或者是APK本身的包名直接過濾,可提高采集效率并且避免采集一些垃圾數(shù)據(jù)。把這些信息存在tools_app_packages表中。
4.關(guān)聯(lián)SDK這一步真的是苦力活,是一不干著想吐的活,是這個SDK采集過程中唯一需要人工完成的。上一步我們已經(jīng)搜集了所有APP使用的包名,這一步我們需要檢查這些包名,如果是非第三方SDK則刪掉,如果是SDK則備注SDK名稱以及備注,方便后續(xù)查找。
5.前端界面后臺已經(jīng)搭建好了,大家可以根據(jù)需要稍微完善,比如我們已經(jīng)記錄了每個app的下載地址,可以定時更新。現(xiàn)在我們這里要做的就是開發(fā)一個前端界面,用于可視化操作查詢,這一部分沒什么講的,就是寫接口調(diào)接口而已,直接上效果圖:
搜索界面
聯(lián)璧港提供免費API,SDK平臺。 官網(wǎng):http://lbp.lincomb.com/
|