關於:INSTALL_FAILED_DUPLICATE_PERMISSION perm=android.permission.BAIDU_LOCATION_SERVICE pkg=com.exampl
如果是呼叫我們的定位SDK進行開發,在5.0系統中可以去掉這個許可權。
我們最新的官網示例中已經去掉了。http://developer.baidu.com/map/i ... d-locsdk/guide/v5-0
這個帖子將的很詳細:http://c.tieba.baidu.com/p/3237226241
自從google開放了Android L的下載後,很多人為了嚐鮮,刷入了這個並不完善的新系統.畢竟是預覽版,難免存在各種各樣的問題,如保留資料刷入導致通知欄無法下拉,按home鍵不能回到桌面,sdcard無法讀取等等.但是相比程式安裝來說這都不是問題,因為前面的可以通過wipe解決,一勞永逸,而後者卻會一直存在.
刷了Android L之後,有一部分軟體無法正常安裝,多表現為 同一家公司開發的軟體只能安裝一個或者一部分,並且基本上安裝的時候都可以在底部看到了非android自帶的許可權, 於是有人猜測是不是它們相互喚醒的原因,其實仔細一想好像也不對,看看谷歌的一堆app就知道了.
通過實驗,發現這些apk有一個或多個相同的自定義許可權,但是簽名不一致,因而無法正常安裝,
並不是什麼防止相互喚醒之類的,這應該是Android L的新規則,
碰到這類無法安裝問題的解決辦法有兩個
1 (無需root)將所有衝突的apk用相同的簽名檔案重新簽名即可正常安裝.
2 (需要root,這應該是目前大多數人在用的辦法)用rootexplorer或es檔案管理器等將apk檔案複製到/data/app/目錄下,然後重啟
順便提一下,如果Android L單純恢復efs電信3g無法正常使用的話,可以嘗試講efs和cache一起恢復.
=================================過程=====================================
下面以百度貼吧和百度輸入法為例說明(這是推測的過程,不是什麼嚴謹的證明,不用過分糾結,有些地方省略),看不懂也沒關係,知道上面的解決辦法就好了
1. 在手機端安裝什麼也看不到,只會顯示安裝失敗,為了查詢原因,我使用adb通過命令列安裝,這樣能知道問題出在哪.
首先安裝貼吧,沒什麼問題, 然後安裝輸入法,問題來了,看綠色框, 提示安裝失敗因為許可權重複(INSTALL_FAILED_DUPLICATE_PERMISSION), 具體的許可權是"com.baidu.permission.SHARE",包名是"com.baidu.tieba",也就是已經安裝的貼吧.
是不是安裝順序的問題呢,把貼吧解除安裝,先安裝輸入法,這次輪到貼吧裝不上了,
2. 看看輸入法裡定義了什麼許可權,在底下的綠色框可以看到,輸入法的確存在"com.baidu.permission.SHARE"這樣的permission
再看貼吧,說明一下,因為貼吧要求的許可權太多,沒法一次完整截圖,只截取了開始和結束的部分,
這裡同樣存在"com.baidu.permission.SHARE"
3. 到底是不是因為permission相同的原因導致只能安裝一個呢,還是弄兩個程式驗證下吧. 用android studio新建兩個專案,在兩個專案裡都定義了相同的permission,神奇的事情來了,居然兩個都安裝成功了,難道不是permission相同造成的?
這兩者的區別在哪,還有一個地方沒注意到,看每個app的最後一行資訊,那一長串字元代表的是證書指紋,這裡用的是md5, 可以看到 貼吧和輸入法的的證書指紋是不一樣的,而我建立的兩個app使用的是相同的簽名檔案,所以md5是一樣的,在這裡又可以推測: 證書指紋相同的情況下,定義了相同permission的程式可以共存
4. 最後來驗證一下上面的猜測,給貼吧和輸入法用同一個檔案重新簽名試試,這樣兩者就有了相同的簽名.
用 rar 開啟 apk檔案, 刪掉META-INF資料夾,通過命令列重新簽名,兩個都安裝成功. 這也證實了前面的推測:如果兩個apk定義了相同的permission,正常安裝的條件之一是兩者的簽名相同