2009-05-20 8 views
3

我對我的應用程序做了很多更改:數據庫方案,圖形,代碼等。最大的是我重命名爲完全不同的程序包名稱。 applicatgio在manifeste.xml文件中獲得了相同的名稱和Id,並且apk獲得了相同的名稱,並具有相同的數字簽名。爲什麼更新一個android應用可以讓它顯示兩次?

儘管如此,當使用./adb install -r myapp.apk時,myapp會在菜單中出現兩次。當然,由於數據庫被存儲在使用包名稱作爲名稱的目錄中,因此用戶覺得數據丟失了。

我該如何防止這種情況發生,如果我不能,我該如何自動化他的遷移?

我有幾個線索:提示卸載舊的應用程序,複製從舊文件到新的數據庫,用戶等

回答

3

的直接答案是應用程序出現兩次由於Android Market和Android操作系統將兩個不同的包視爲兩個不同的應用程序代碼可以相同,但如果包裝不同,則應用程序是完全不同的

Android Market通過其包名識別應用程序。我懷疑這是因爲操作系統通過軟件包跟蹤程序......有道理的是,您不想要兩個安裝完全相同名稱的軟件包,操作系統如何知道要調用哪個軟件包?因此,如果您安裝的軟件包與已安裝的軟件包名稱相同,則操作系統會將其視爲軟件包升級並讓新程序訪問舊用戶數據。

您聲明包共享相同的ID,我假設這是用戶ID。這使您可以在軟件包之間共享數據。更多信息是在這裏:

http://developer.android.com/guide/topics/security/security.html#userid

建議:放開小的提升你的老包提供任何膠水是需要讓它與你的新軟件包共享的數據。然後用代碼釋放新包以從舊包中導入用戶數據(需要相同的UserId和簽名)。轉換對用戶來說是無縫的(無需手動備份和導入)。

+1

唯一不整潔的部分是現在你有一個用戶卸載程序...我希望他們卸載正確的一個。編程卸載,我的下一個SO問題。 – Will 2009-05-21 02:16:17

1

應用程序簽名必須相同。如果您在另一個Eclipse中導入項目,構建它並上傳到市場,您將看到2個獨立的應用程序。

相關問題