自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

移動開發(fā)
費勁千辛萬苦寫完程序的代碼你以為就結束了?當你終于發(fā)現要面對數不清的安卓平臺的時候,你才真的進了門。有沒有什么問題是你在此時會遇見的?又該怎么辦?

除了crash問題,Android平臺的碎片化越來越受到移動開發(fā)的關注,且不談支持Android系統(tǒng)的移動設備早已過萬款,屏幕、品牌以及傳感器等方面的碎片化問題也困擾著開發(fā)者。

初級Android的開發(fā)人員經常關心的問題就是開發(fā)的應用能不能在需求的設備上正常運行。為什么我沒有說所有設備呢?長期盤踞各Android設備市場份額或市場關注度榜單前十位,被大家熟知的品牌,它們ROM的個性化都足以讓人眼花繚亂了,更何況在如今“亂世”里那些七零八落的機型了。想要做更全面的自動化機型測試,破解兼容問題,騰訊優(yōu)測是很好的選擇。

最近筆者在做Launcher上圖標的清理,接到這個需求的時候,內心是感到輕松的,感覺查詢需要刪除的圖標然后刪除不就OK了。但事實證明,我還真是很年輕呢。

Launcher個性化

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

為了探究一下不同機型的Launcher應用,我分別查看了五部手機,結果如下:

 

型號

系統(tǒng)版本

Launcher包名

1

三星I9082

4.1.2

com.sec.android.app.launcher

2

華為G606

4.0.3

com.huawei.android.launcher

3

HTC T328W

4.0.3

com.htc.launcher

4

努比亞Z9 Mini

5.0.2

cn.nubia.launcher

5

錘子 T1

4.4.2

com.android.launcher3

除了錘子使用了原生的Launcher外,其他四個機型都經過了個性化再開發(fā)。在實際操作中也可以發(fā)現,對圖標上的操作響應也不盡相同。

對于點擊Home鍵后有“應用”圖標的Launcher,長按應用并拖動可在桌面上創(chuàng)建快捷方式。而沒有“應用”圖標的Launcher,長按加拖動則只能實現應用圖標的移動。

應用要創(chuàng)建和刪除自己的快捷方式圖標只需發(fā)送如下兩個Intent即可:

  1. com.android.launcher.action.INSTALL_SHORTCUT 
  2. com.android.launcher.action.UNINSTALL_SHORTCUT 

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

  1. android:name="com.android.launcher.permission.INSTALL_SHORTCUT 
  2. android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT 

而第三方應用要對Launcher上其他應用的快捷方式圖標進行刪除,最簡單粗暴的方式是直接從數據庫里刪除,當然我們并不推薦,即便發(fā)送刪除的Intent也需要獲知該圖標在Launcher保存信息的數據庫launcher.db中的一條具有獨特性的信息。

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

數據庫個性化

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

圖1-1 努比亞launcher.db數據

圖1-2 三星I9082 launcher.db數據

權限個性化

一旦要對Launcher數據庫有訪問,至少需要有對數據庫的讀權限,而要進行操作,權限要求會更高(寫數據庫的權限安全等級一般都是signatureOrSystem)。據不完全統(tǒng)計,要適配市場上大部分的設備,如下所列出的一大長串權限是免不了的,而且肯定還有不少漏網之魚。

  1. android:name="com.android.launcher.permission.READ_SETTINGS"      
  2. android:name="com.android.launcher.permission.WRITE_SETTINGS"     
  3. android:name="com.android.launcher2.permission.READ_SETTINGS"    
  4. android:name="com.android.launcher2.permission.WRITE_SETTINGS"     
  5. android:name="com.android.launcher3.permission.READ_SETTINGS"    
  6. android:name="com.android.launcher3.permission.WRITE_SETTINGS"    
  7. android:name="cn.nubia.launcher.permission.READ_SETTINGS"     
  8. android:name="cn.nubia.launcher.permission.WRITE_SETTINGS"     
  9. android:name="org.adw.launcher.permission.READ_SETTINGS" 
  10. android:name="org.adw.launcher.permission.WRITE_SETTINGS" 
  11. android:name="com.htc.launcher.permission.READ_SETTINGS" 
  12. android:name="com.htc.launcher.permission.WRITE_SETTINGS" 
  13. android:name="com.qihoo360.launcher.permission.READ_SETTINGS" 
  14. android:name="com.qihoo360.launcher.permission.WRITE_SETTINGS" 
  15. android:name="com.lge.launcher.permission.READ_SETTINGS" 
  16. android:name="com.lge.launcher.permission.WRITE_SETTINGS" 
  17. android:name="net.qihoo.launcher.permission.READ_SETTINGS" 
  18. android:name="net.qihoo.launcher.permission.WRITE_SETTINGS" 
  19. android:name="org.adwfreak.launcher.permission.READ_SETTINGS" 
  20. android:name="org.adwfreak.launcher.permission.WRITE_SETTINGS" 
  21. android:name="org.adw.launcher_donut.permission.READ_SETTINGS" 
  22. android:name="org.adw.launcher_donut.permission.WRITE_SETTINGS" 
  23. android:name="com.huawei.launcher3.permission.READ_SETTINGS" 
  24. android:name="com.huawei.launcher3.permission.WRITE_SETTINGS" 
  25. android:name="com.fede.launcher.permission.READ_SETTINGS" 
  26. android:name="com.fede.launcher.permission.WRITE_SETTINGS" 
  27. android:name="com.sec.android.app.twlauncher.settings.READ_SETTINGS" 
  28. android:name="com.sec.android.app.twlauncher.settings.WRITE_SETTINGS" 
  29. android:name="com.anddoes.launcher.permission.READ_SETTINGS" 
  30. android:name="com.anddoes.launcher.permission.WRITE_SETTINGS" 
  31. android:name="com.tencent.qqlauncher.permission.READ_SETTINGS" 
  32. android:name="com.tencent.qqlauncher.permission.WRITE_SETTINGS" 
  33. android:name="com.huawei.launcher2.permission.READ_SETTINGS" 
  34. android:name="com.huawei.launcher2.permission.WRITE_SETTINGS" 
  35. android:name="com.android.mylauncher.permission.READ_SETTINGS" 
  36. android:name="com.android.mylauncher.permission.WRITE_SETTINGS" 
  37. android:name="com.ebproductions.android.launcher.permission.READ_SETTINGS"  
  38. android:name="com.ebproductions.android.launcher.permission.WRITE_SETTINGS"  
  39. android:name="com.oppo.launcher.permission.READ_SETTINGS" 
  40. android:name="com.oppo.launcher.permission.WRITE_SETTINGS" 
  41. android:name="com.huawei.android.launcher.permission.READ_SETTINGS" 
  42. android:name="com.huawei.android.launcher.permission.WRITE_SETTINGS" 
  43. android:name="telecom.mdesk.permission.READ_SETTINGS" 
  44. android:name="telecom.mdesk.permission.WRITE_SETTINGS" 

僅一個Launcher就這么任性,千千萬萬的Android開發(fā)人員,多少次問自己:

愛卓,我怕了嗎? 

眼淚,我忘了嗎?

產品催,機型差

應用怎么開發(fā)???

不管是創(chuàng)業(yè)公司還是具備一定規(guī)模的企業(yè),為了開發(fā)和測試自己的應用,采購覆蓋Android市場80%甚至更高的機型,是一件既不現實也不容易更不合理的事。想要為開發(fā)者壓縮時間成本,為公司節(jié)省采購和管理成本,不妨嘗試一下騰訊優(yōu)測,會讓你得到意想不到的效果哦,這可是程序員MM發(fā)自內心地吶喊~

責任編輯:倪明 來源: 騰訊優(yōu)測
相關推薦

2017-08-21 16:24:27

小紅點APP運營

2015-06-16 10:31:36

程序員

2015-06-08 10:48:39

程序員程序員自白

2011-10-31 09:14:35

程序員

2013-08-01 10:38:50

安卓碎片化

2014-07-10 10:58:36

安卓碎片化

2014-06-30 16:08:29

2012-06-08 03:24:38

程序員

2013-08-20 09:33:59

程序員

2013-09-27 09:51:03

Android安卓激活量碎片化

2013-03-29 09:59:05

2011-05-13 14:34:02

程序員

2017-11-14 21:30:15

2012-11-22 14:00:26

程序員

2012-03-06 09:22:46

程序員

2013-04-15 10:55:09

程序員

2012-11-08 09:49:30

C++Java程序員

2012-06-23 17:21:18

程序員

2009-12-14 09:29:00

程序員

2010-08-27 10:34:51

程序員
點贊
收藏

51CTO技術棧公眾號