程序員MM的自白:磨人小妖精之安卓碎片化

文/騰訊優測 章婉霞android


除了crash問題,Android平臺的碎片化愈來愈受到移動開發的關注,且不談支持Android系統的移動設備早已過萬款,屏幕、品牌以及傳感器等方面的碎片化問題也困擾着開發者。程序員


初級Android的開發人員常常關心的問題就是開發的應用能不能在需求的設備上正常運行。爲何我沒有說全部設備呢?長期盤踞各Android設備市場份額或市場關注度榜單前十位,被你們熟知的品牌,它們ROM的個性化都足以讓人眼花繚亂了,更況且在現在「亂世」裏那些七零八落的機型了。想要作更全面的自動化機型測試,破解兼容問題,騰訊優測是很好的選擇。數據庫


最近筆者在作Launcher上圖標的清理,接到這個需求的時候,心裏是感到輕鬆的,感受查詢須要刪除的圖標而後刪除不就OK了。但事實證實,我還真是很年輕呢。安全


Launcher個性化微信


咱們都知道,Android源碼中有Google作的原生Launcher。在2.1及以前的版本中,使用com.android.launcher;2.2至4.3版本使用的是com.android.launcher2;4.4版本開始則使用com.android.launcher3。網絡


爲了探究一下不一樣機型的Launcher應用,我分別查看了五部手機,結果以下:app



除了錘子使用了原生的Launcher外,其餘四個機型都通過了個性化再開發。在實際操做中也能夠發現,對圖標上的操做響應也不盡相同。
工具


對於點擊Home鍵後有「應用」圖標的Launcher,長按應用並拖動可在桌面上建立快捷方式。而沒有「應用」圖標的Launcher,長按加拖動則只能實現應用圖標的移動。測試


應用要建立和刪除本身的快捷方式圖標只需發送以下兩個Intent便可:spa


com.android.launcher.action.INSTALL_SHORTCUT

com.android.launcher.action.UNINSTALL_SHORTCUT


同時須要在AndroidManifest.xml中添加以下兩個權限:


android:name="com.android.launcher.permission.INSTALL_SHORTCUT

android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT


而第三方應用要對Launcher上其餘應用的快捷方式圖標進行刪除,最簡單粗暴的方式是直接從數據庫裏刪除,固然咱們並不推薦,即使發送刪除的Intent也須要獲知該圖標在Launcher保存信息的數據庫launcher.db中的一條具備獨特性的信息。


接下來咱們看看launcher.db數據庫是否是像網絡上說的那般,favorites表中保存着圖標信息。


數據庫個性化


從導出launcher.db來看,上述表中的五部手機大部分都在favorites表中保存圖標信息,三星I9082則在favorites中只保存主桌面圖標,其餘應用圖標保存在favorites_normal表中。而各機型launcher.db中存放的數據及形式也有所區別,詳細狀況見以下兩圖:



權限個性化


一旦要對Launcher數據庫有訪問,至少須要有對數據庫的讀權限,而要進行操做,權限要求會更高(寫數據庫的權限安全等級通常都是signatureOrSystem)。據不徹底統計,要適配市場上大部分的設備,以下所列出的一大長串權限是免不了的,並且確定還有很多漏網之魚。


android:name="com.android.launcher.permission.READ_SETTINGS"     

android:name="com.android.launcher.permission.WRITE_SETTINGS"    

android:name="com.android.launcher2.permission.READ_SETTINGS"    

android:name="com.android.launcher2.permission.WRITE_SETTINGS"    

android:name="com.android.launcher3.permission.READ_SETTINGS"    

android:name="com.android.launcher3.permission.WRITE_SETTINGS"    

android:name="cn.nubia.launcher.permission.READ_SETTINGS"    

android:name="cn.nubia.launcher.permission.WRITE_SETTINGS"    

android:name="org.adw.launcher.permission.READ_SETTINGS"

android:name="org.adw.launcher.permission.WRITE_SETTINGS"

android:name="com.htc.launcher.permission.READ_SETTINGS"

android:name="com.htc.launcher.permission.WRITE_SETTINGS"

android:name="com.qihoo360.launcher.permission.READ_SETTINGS"

android:name="com.qihoo360.launcher.permission.WRITE_SETTINGS"

android:name="com.lge.launcher.permission.READ_SETTINGS"

android:name="com.lge.launcher.permission.WRITE_SETTINGS"

android:name="net.qihoo.launcher.permission.READ_SETTINGS"

android:name="net.qihoo.launcher.permission.WRITE_SETTINGS"

android:name="org.adwfreak.launcher.permission.READ_SETTINGS"

android:name="org.adwfreak.launcher.permission.WRITE_SETTINGS"

android:name="org.adw.launcher_donut.permission.READ_SETTINGS"

android:name="org.adw.launcher_donut.permission.WRITE_SETTINGS"

android:name="com.huawei.launcher3.permission.READ_SETTINGS"

android:name="com.huawei.launcher3.permission.WRITE_SETTINGS"

android:name="com.fede.launcher.permission.READ_SETTINGS"

android:name="com.fede.launcher.permission.WRITE_SETTINGS"

android:name="com.sec.android.app.twlauncher.settings.READ_SETTINGS"

android:name="com.sec.android.app.twlauncher.settings.WRITE_SETTINGS"

android:name="com.anddoes.launcher.permission.READ_SETTINGS"

android:name="com.anddoes.launcher.permission.WRITE_SETTINGS"

android:name="com.tencent.qqlauncher.permission.READ_SETTINGS"

android:name="com.tencent.qqlauncher.permission.WRITE_SETTINGS"

android:name="com.huawei.launcher2.permission.READ_SETTINGS"

android:name="com.huawei.launcher2.permission.WRITE_SETTINGS"

android:name="com.android.mylauncher.permission.READ_SETTINGS"

android:name="com.android.mylauncher.permission.WRITE_SETTINGS"

android:name="com.ebproductions.android.launcher.permission.READ_SETTINGS" 

android:name="com.ebproductions.android.launcher.permission.WRITE_SETTINGS" 

android:name="com.oppo.launcher.permission.READ_SETTINGS"

android:name="com.oppo.launcher.permission.WRITE_SETTINGS"

android:name="com.huawei.android.launcher.permission.READ_SETTINGS"

android:name="com.huawei.android.launcher.permission.WRITE_SETTINGS"

android:name="telecom.mdesk.permission.READ_SETTINGS"

android:name="telecom.mdesk.permission.WRITE_SETTINGS"


僅一個Launcher就這麼任性,千千萬萬的Android開發人員,多少次問本身:


愛卓,我怕了嗎? 

眼淚,我忘了嗎?

產品催,機型差

應用怎麼開發???


不論是創業公司仍是具有必定規模的企業,爲了開發和測試本身的應用,採購覆蓋Android市場80%甚至更高的機型,是一件既不現實也不容易更不合理的事。想要爲開發者壓縮時間成本,爲公司節省採購和管理成本,不妨嘗試一下騰訊優測,會讓你獲得意想不到的效果哦,這但是程序員MM發自心裏地吶喊~


想了解更多幹貨,歡迎關注騰訊優測微信號:優測網(wxutest)


騰訊優測:

騰訊優測是備受客戶信賴的移動雲測試平臺,爲應用、遊戲,H5混合應用的研發團隊提供產品質量檢測與問題解決服務。不只在線上平臺提供「雲手機遠程操控與調試」、「自動化全面兼容性測試」、「APK源碼級缺陷性分析」等多種質量檢測工具,更爲VIP客戶配備專家團隊提供定製化綜合測試解決方案。真機實驗室配備上千款手機,覆蓋市面98%主流機型,7*24小時在線運行,覆蓋億級用戶。

相關文章
相關標籤/搜索