1、背景和現狀安全
安裝包的重要性無需多提,針對安裝包質量控制愈來愈嚴格和規範,包括證書、文件大小、安裝成功率等,APP的證書及混淆是影響APP的安裝成功率及代碼安全性的很大因素,隨着功能迭代,安裝包也會隨之增大,那麼用戶下載和app激活轉化率就會越低,同時在提交及發佈渠道時的錯誤率也會提高,因此成熟的app會不按期進行安裝包瘦身實踐,經過對於代碼、資源文件等梳理將安裝包大小控制在一個合理的值。(好比有app,iOS安裝包大小控制在55M,Android安裝包大小控制在28M等)。app
目前組內針對這一塊已經造成了APP的安裝包的常規檢測,並將其加入到整個研發流程中,參與人員會包含產品、設計、開發和測試同窗。工具
二、安裝包質量目標確立測試
一、包大小控制優化
二、資源重複及大小文件檢測及新增控制spa
三、重複、廢棄及無用代碼檢測 debug
四、基本項檢查設計
3、檢測技術及度量指標日誌
一、 針對APK的整體大小orm
1.1 獲取方式:
針對IOS端:開發者證書、企業證書和發佈證書打出來的包可能大小不一樣,而且debug和release也會影響包大小,從初版本開始,建議選擇發佈證書+release版本做爲被測包。
安卓端:不存在IOS端的證書問題,建議選擇release版本打出的包做爲被測包
1.2 控制方式:
研發工做開始以前,研發負責人給出APP的預估大小值
(1)開發人員在需求評審完成就給出本版本安裝包大小的預估值,產品和測試人員會針對研發負責人給出的預估值和實際值做出比較,並針對實際值與預估值有較大差距的狀況,由開發人員給出問題緣由。
(2)在總體研發過程當中,設計人員給出的UI設計圖根據須要優先作一次無損壓縮,以後研發人員可根據項目狀況,再作一次無損壓縮,兩次壓縮以後可以下降必定量的資源文件的大小。目前安卓端通常會採用.9圖片,可以有效減小圖片等資源文件的大小。
二、針對資源文件的檢測——避免過大和重複
重複文件的檢測方式:首先根據文件頭判斷文件類型,確認文件類型是資源文件的,會經過大小和md5值進行資源文件是否重複的判斷,以後將重複文件的列表輸出,而且輸出重複文件的佔用大小。
對重複文件及大小的約定規則以下:
(1)重複文件的總佔用大小超過0.1M時會發出告警;
(2)重複文件的項數不能有增長,歷史重複須要在接下來的版本中進行不斷刪減。
(3)針對資源文件的大小的監控,須要與設計同窗一塊兒肯定指標,將資源文件分紅大中小三種級別,當出現大文件時,須要給出預警。
三、針對引入的第三方sdk的功能判斷——避免sdk自己功能模塊與非sdk有重複
在開發過程當中須要對引入的第三方sdk的功能接口熟悉,而且須要瞭解sdk及非sdk模塊是否存在功能的重複實現狀況,是則須要在APP的非sdk的代碼中作刪除。
四、對代碼的檢查及優化:
(1)包括對重複功能的代碼的檢查:有可能在歷史版本迭代積累的過程當中,在整個研發過程當中致使出現多份重複功能的代碼,或者類似功能代碼
(2)對廢棄功能的代碼檢查:這裏能夠和測試及產品同窗一塊兒,確認版本功能以及case走查,以此來達到對歷史代碼的清理。 建議檢查方式:能夠經過代碼覆蓋率的方式,在執行case的過程當中統計代碼覆蓋率,對未覆蓋到的代碼進行分析及進一步的處理。
五、對證書、log以及混淆的校驗:
(1)針對打包的證書的校驗:安卓端可經過證書的md5值進行驗證;
(2)混淆可經過smali工具進行解壓後生成的代碼,優先對資源文件作校驗,以後能夠獲取LaunchActivity的代碼,對代碼作規則斷定以驗證是否混淆;
(3)log的驗證有些apk是經過一個文件記錄開關,則可解壓文件讀取內容獲得開關便可,若不知足此要求,則可經過自動運行app獲取日誌信息作校驗。
六、持續優化:
以上幾個指標須要加入到研發管理流程中,堅持N個版本下來,必定可以有比較好的效果。
安裝包檢查結果輸出模板可見下方:
安裝包常規檢查 |
|
檢查項 |
結果數據 |
大小 / 與上一版本對比 |
23.45MB/20.34MB |
包名 |
com.xx.xx |
名稱 |
xx網 |
證書一致性 |
是 |
版本 |
7.3.0 |
內部版本號 |
160 |
min SDK |
18 |
log是否關閉 |
是 |
是否混淆 |
是 |
重複文件大小 |
80.27KB |
重複文件項數 |
53項 |
重複文件具體列表 |
|
File1 |
File2 |
res\drawable-xxhdpi-v4\xx.png |
res\drawable-xxhdpi-v4\yy.png |
res\raw\m_1.jpg |
res\raw\m_2.jpg |
res\drawable-xxhdpi-v4\a.png |
res\drawable-xxhdpi-v4\b.png |
res\drawable-hdpi-v4\bg.9.png |
res\drawable-xhdpi-v4\normal.9.png |
assets\gif\xiaolv\png\5.png |
assets\gif\xiaolv\png\icon.png |