2012-08-03 58 views
1

我試圖實現this great technique跨兩個不同的應用程序共享首選項,同時仍MODE_PRIVATE。在同一個APK中可能有兩個包?

我的問題是第一個應用程序不能假設第一個應用程序安裝(反之亦然)等:

Context c = createPackageContext("com.app.first", MODE_PRIVATE); 

必須替換爲:

Context c = createPackageContext("com.app.shared", MODE_PRIVATE); 

但是,任務增加那com.app.shared是真的,它轉換成第二個APK?

換句話說,有只有一個AndroidManifest.xml每APK和只有一個<manifest package= >每清單文件。因此,每個APK只有一個實際包裝?

我不希望每個應用程序有2個APK,我只希望每個應用程序有一個APK。

有沒有辦法做到這一點?

回答

2

我試圖實現這種跨兩個不同的應用程序共享首選項,同時仍然MODE_PRIVATE的偉大技術。

其實,這是一個反偉大的技術,我剛剛刪除了我的答案。使用android:sharedUserId是有風險的,對於已經部署的應用程序來說完全不可能。自從我在那裏發佈我的答案後的兩年中,我瞭解到我的方式錯誤。

此外,該技術無法可靠運行,因爲您無法控制用戶安裝哪些應用程序並卸載。如果應用程序A和應用程序B通過使用應用程序A的副本共享偏好,則當用戶卸載應用程序A時,應用程序B被洗掉。

因此,每個APK只有一個實際包?

正確。

我不希望每個應用程序有2個APK,我只希望每個應用程序有一個APK。

對於兩個應用程序,您有兩個APK文件,每個文件都有自己的包名稱。

+0

謝謝你救了我一個災難性的方法。我現在意識到,儘管「共享」偏好的「廣告」可用性,但它需要很多解決方法和技巧,因此這必定有些不安全。我現在認爲,通過[內容提供商](http://developer.android.com/guide/topics/providers/content-providers.html),在應用程序之間共享任何內容的正確方法。我在正確的方向嗎? – ef2011 2012-08-03 23:06:04

+2

@ ef2011:在應用程序之間共享信息的方式有很多 - 「ContentProvider」是一種可能性。就個人而言,在這種情況下,當應用程序的首選項發生更改時,我會發送許可保護的廣播,以便由其他應用程序獲取並應用於其自己的副本。這樣,通過兩個應用程序鏡像設置,您就不必擔心一個應用程序被卸載,並且同時使用這兩個應用程序的設置。此外,你不關心哪個應用程序首先安裝。而且,作爲一個附帶的好處,它可以無縫地擴展到三個或更多的應用程序,如果需要的話。 – CommonsWare 2012-08-03 23:22:44

+0

不幸的是,由於[INSTALL_FAILED_CONFLICTING_PROVIDER](http://stackoverflow.com/q/6273592/722603)限制(即兩個不同的包不能共享相同的內容提供者),ContentProvider甚至不可能。所以,看起來**唯一的方法就是你建議的「許可保護廣播」。任何可以瞭解更多信息的鏈接? – ef2011 2012-08-07 18:08:20

相關問題