我有一個應用程序(讓我們稱之爲「L」),它提供了Service
其他應用程序可以綁定到。 Service
要求綁定客戶端有權限"my.permission"
。與自定義權限依賴關係的討厭問題
我有另一個應用程序(我們稱之爲「X」),它使用「L」中的Service
。在清單中爲 「X」,我有:
<uses-permission android:name="my.permission"/>
現在我在Android 4.4(奇巧)以下不同的方案:
- 用戶安裝第一應用程序 「L」,然後應用「X 」。用戶運行應用程序「X」。 「X」以「L」成功綁定到
Service
。客戶很高興。 - 用戶安裝第一個應用程序「X」,然後安裝應用程序「L」。用戶運行應用程序「X」。由於安全異常,「X」無法綁定到「L」中的
Service
。 Android宣稱應用程序「X」沒有必要的權限「my.permission」。客戶非常憤怒。
經過大量的實驗,事實證明,在第二種情況下,當用戶安裝應用程序「X」,Android將在清單的權限請求,但不知道權限"my.permission"
任何東西,所以它拒絕授予應用程序「X」此權限。解決這個問題的唯一方法是卸載應用程序「X」並重新安裝。此時,由於已經安裝了應用「L」,Android知道該許可並授予應用「X」的許可。
經過多次實驗後,我想出了一個解決問題的辦法。我添加了以下到清單的應用「X」:
<permission android:name="my.permission/>
現在,當我安裝的第一個應用「X」,那麼Android知道的權限(因爲它是在清單中聲明),並授予權限應用程序。客戶很高興。
一段時間後...
現在我已經在Android 5.0(棒棒堂)以下情況:
- 用戶安裝第一個應用程序 「L」,然後應用「X 」。由於
INSTALL_FAILED_DUPLICATE_PERMISSION
,Android拒絕安裝應用程序「X」。客戶很憤怒! - 用戶安裝第一個應用程序「X」,然後安裝應用程序「L」。由於
INSTALL_FAILED_DUPLICATE_PERMISSION
,Android拒絕安裝應用程序「L」。客戶很憤怒!
要解決此問題,我現在從應用程序「X」中刪除<permission>
聲明,然後在Android 5.0上再次嘗試安裝。我現在有和4.4一樣的問題。
我發現讓它工作的唯一方法是強制用戶在應用程序「X」之前安裝應用程序「L」。顧客不開心。
任何想法?
感謝您的快速回復。當然這裏的情況是,應用程序「L」由另一個供應商提供,而不是由我提供,因此使用相同證書籤署這兩個應用程序是不可能的。在我看來,自定義許可的東西被構建的方式是相當破碎的,因爲它打破了這種依賴關係(這很常見)。 –
@DavidWasser:是的,正如我寫的那樣,他們的設計真的是預先安裝的應用程序,沒有問題誰先安裝。其次,它們適用於來自同一供應商的應用程序套件。除此之外,他們不是很好。 – CommonsWare