2012-05-16 75 views
12

由於this annoying Android limitation我需要用戶重新安裝我的應用程序,以便其他應用程序檢測到清單權限。以編程方式重新安裝應用程序apk而不下載

這對用戶來說已經是令人沮喪的事了,但是除此之外,我無法看到從存儲在/ data/app的apk中重新安裝我的應用程序的方式,因此我必須將相同的版本下載到存儲卡在發射通常的安裝意圖之前。

我急切地等待有人告訴我我錯過了一些明顯的東西!我畫了一張空白...

在此先感謝。

如果您希望看到問題解決,請對問題進行解答!乾杯。


編輯:隨着@hackbod記的意見,你可以使用下面的代碼來啓動安裝對話框。

Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(new File(this.getApplicationInfo().sourceDir)), 
"application/vnd.android.package-archive"); 
startActivity(intent); 

在我的果凍豆設備,這提供了兩個選項:包安裝驗證和安裝。我不知道如果是後者將處理的問題:

  • 安裝您的應用程序這種方式可能會從Play商店

我的應用程序是免費刪除其所有權,所以我無法測試的支付問題:然而

  • 注意如果您的應用程序是向前鎖定(這是不可避免的開始JB,由於應用程序加密所有付費應用程序),那麼這將無法工作becau SE您的應用程序的可執行文件是不會被別人讀取

雖然hackbod結束與這表明,如果你是通過你自己的代碼執行此,爲你自己的應用程序,它是可讀的「別人讀」?如果你能測試這個,請糾正我,我錯了。

+1

您可以將其從/ data/app複製到存儲卡。儘管無法瀏覽該目錄,但它所包含的文件通常是可讀的 - 儘管這並不能保證(並且這並不總是安裝位置)。另一種選擇可能是不使用權限系統,但嘗試對請求的包進行自己的認證。 –

+0

謝謝克里斯 - 我的應用程序需要安裝在設備上,否則它將無法正常工作,所以我對用戶安裝位置的最小擔心。我認爲這是你所指的唯一考慮因素?另外,由於/ data/app是可讀的,我可以檢查apk是否位於其他位置之前。從我的搜索中,我無法找到一種方法來從該位置傳輸apk,除非使用根函數......想知道是否有方法...我不確定您的「自己的身份驗證」是什麼意思?乾杯。 – brandall

+0

如果它是可讀的(就像它通常那樣),則不需要root將其複製到允許寫入的地方(例如具有適當清單許可的sdcard)。但是,/ data/app並不總是被安裝的地方。有時apk文件名在安裝過程中發生變化。您可以從/data/system/packages.xml中確定位置和安裝的名稱,但此時您對私有內部功能的相當深入,這可能不是未來的證明。真的,重新下載可能是您最好的選擇 - 至少,將其作爲後備選項。 –

回答

3

可以想象,您可以通過Context.getApplicationInfo()。sourceDir獲取.apk路徑,然後使用該路徑啓動應用程序安裝程序。但是,如果您的應用程序被向前鎖定(由於應用程序加密,這對於以JB開頭的所有付費應用程序來說是不可避免的),那麼這不起作用,因爲您的應用程序可執行文件無法被其他人閱讀。在這種情況下,您需要將.apk複製到世界可讀的地方(例如在外部存儲器中)並從那裏安裝。

不管你做什麼,在這裏,雖然,這有一些不可避免的非常消極的後果:

  • 做任何形式從您的應用程序安裝的唯一辦法是要經過側載UI,這(a)對於用戶而言將是非常可怕的體驗,並且(b)將要求用戶開啓側載以能夠繼續。
  • 以這種方式安裝您的應用程序可能會從Play商店中刪除它的所有權(因爲它不再是安裝它的所有者)。這可能意味着用戶不能再通過Play商店向您報告崩潰或ANR,或其他負面後果。我不確定到底會發生什麼問題,但我真的不會認爲這樣會好起來的。

最終,我只是非常不會建議這樣做。你需要什麼權限才能迫使你這樣做?出於許多原因,我不會建議第三方應用程序在大多數情況下聲明自己的權限,因爲權限周圍存在很多不好的用戶體驗,只有在需要它們之後才能知道。

+0

感謝您的回答。這個問題的一個很好的例子是Tasker應用程序,它需要net.dinglisch.android.tasker.PERMISSION_RUN_TASKS。正如我確信你知道的那樣,Tasker可以做一些主要的設備更改,所以開發人員爲什麼要把這個引入安裝我的應用程序的用戶的注意是可以理解的。如果我向我的用戶建議他們安裝Tasker以獲取其兼容功能,那麼會出現這種情況,即未檢測到我的清單中的權限。我不確定是否可以將您的答案標記爲「正確」,因爲看起來似乎沒有解決方案? – brandall

相關問題