2013-02-20 115 views
18

TL:DR;版本;)自我更新的應用程序

  • 我的應用程序而無需用戶交互(自動啓動等工作)

  • 它會自動更新(通過APK)應該運行沒有任何用戶交互

  • 解鎖裝置是可能的

問題:

  • 從服務器查詢新的apk開始用的APK時,工作
  • 意圖,「安裝程序」的提示彈出,需要用戶確認
(查看?)

如何在沒有任何用戶交互的情況下解決此問題?

http://code.google.com/p/auto-update-apk-client/ 這似乎是一個解決方案,但必須有更好的方法。

我已經發現了這一點:Install Application programmatically on Android

但這並不解決我的問題。

回答

31

解決它! :D

它只是在根植設備,但完美的作品。 使用unix cmd「pm」(packageManager),可以在以root身份執行時從sdcard安裝apks。

希望這可以幫助一些人在未來。

public static void installNewApk() 
{ 
     try 
     { 
      Runtime.getRuntime().exec(new String[] {"su", "-c", "pm install -r /mnt/internal/Download/fp.apk"}); 
     } 
     catch (IOException e) 
     { 
      System.out.println(e.toString()); 
      System.out.println("no root"); 
     } 
} 

所需的權限:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+0

它給我錯誤代碼139,即分段錯誤。但我的平板電腦已經紮根。任何想法爲什麼? – jeevs 2013-07-19 14:25:40

+0

您能告訴我什麼是在根用戶平板電腦上運行此代碼所需的權限? – jeevs 2013-07-19 19:53:42

+4

如果可以的話,我會贊成這100次! – Ben 2014-05-01 15:13:50

5

我的建議是使用更新應用程序的插件機制instad。您可以從Web動態加載類,並在您的應用程序內運行它們而無需任何用戶交互。有在互聯網上傳播大量的資源:

How to load a Java class dynamically on android/dalvik?

http://android-developers.blogspot.com/2011/07/custom-class-loading-in-dalvik.html

+0

好主意,我會試試看,但是無論如何我認爲使用一個APK會更強大,不容易出錯的更新。 – Thkru 2013-02-20 14:39:00

+0

與此主要問題是,你不能添加新的活動與此... – Selvin 2013-02-20 14:56:23

+0

好點,選擇取決於非常具體的需求 – Zielony 2013-02-20 14:57:56