2014-11-14 3 views
22

대형 화면에 광고를 표시하는 Android 앱을 작성 중입니다. 광고주가 광고를 선택할 수있는 백엔드가있어 거의 즉시 업데이트됩니다. 많은 안드로이드 박스가 (HDMI 스크린에 연결되어 있기 때문에) 원격으로 소프트웨어를 업데이트 할 수 있어야합니다. (해제하지 않는 한)프롬프트없이 Android APK 설치

홈페이지 응용 프로그램이 계속 실행되고 사용자가 어떤 안드로이드와 관련된 볼 수 없습니다 :

경우입니다. 업데이트를 수신하고 기본 apk를 삭제하고 새 apk를 설치하는 업데이터 응용 프로그램이 필요합니다. 업데이트하는 동안 새 기본 apk가 설치되어 표시 될 때까지 "업데이트 중입니다. 기다려주십시오"라는 활동이 표시됩니다.

우리가 필요한 것은 :

우리는 루팅 된 기기에 사용자에게 메시지를 표시하지 않고 업데이트 메커니즘을 구현하는 방법에 대한 도움이 필요합니다.

우리가 무엇을 가지고 : 업데이터 응용 프로그램은 서비스 시작 (이 서비스가 곧 동료에 의해 구현 될 것 업데이트를 수신합니다) 부팅받은 이벤트에 중독되어

. 서비스는 업데이트하는 동안 업데이트 정보를 요구하는 활동을 시작할 수 있습니다. 매니페스트

<!-- Permission to start UpdaterService on boot --> 
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

<!-- Install/delete permissions, only granted to system apps --> 
<uses-permission android:name="android.permission.INSTALL_PACKAGES" /> 
<uses-permission android:name="android.permission.DELETE_PACKAGES" /> 

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

에서

try { 
      Process proc = Runtime.getRuntime().exec(new String[]{"su", "pm install -r /mnt/sdcard/MYFOLDER/testAPK.apk"}); 
      stringBuilder.append(String.valueOf(proc.waitFor())); 
      stringBuilder.append("\n"); 
     } catch (Exception e) { 
      if (e instanceof IOException) { 
       Log.d(TAG, "IOException"); 
      } else if (e instanceof InterruptedException) { 
       Log.d(TAG, "InterruptedException"); 
      } else { 
       e.printStackTrace(); 
      } 
     } 

모두 StringBuilder (11)을 인쇄하지만 임의 unexisting 명령을 부여하는 경우와 동일한 작업을 수행 업데이터 활성

..

내 앱을 sy로 설치하지 않으면 패키지 설치 및 패키지 삭제가 쓸모가 없다. 줄기 응용 프로그램, 내가 맞습니까?

짧은 이야기, 내 테스트 APK를 설치하지 않았으며 해결 방법을 모릅니다. 도움이 될 것입니다.

+1

을 확인/시스템/응용 프로그램에서 업데이터 응용 프로그램을 넣어/그리고 당신은 INSTALL_PACKAGES 얻을 것이다하시기 바랍니다 아래의 샘플 코드는 DELETE_PACKAGES permission – nandeesh

답변

25

간단히 adb install 명령을 사용하여 APK를 자동으로 설치/업데이트 할 수 있습니다.

public static void InstallAPK(String filename){ 
    File file = new File(filename); 
    if(file.exists()){ 
     try { 
      String command; 
      command = "adb install -r " + filename; 
      Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", command }); 
      proc.waitFor(); 
     } catch (Exception e) { 
     e.printStackTrace(); 
     } 
    } 
    } 

또는

루트 액세스 할 경우, http://paulononaka.wordpress.com/2011/07/02/how-to-install-a-application-in-background-on-android/

+0

StringUtil 클래스는 어디에 있습니까? – TomCB

+0

내 업데이트 된 답변 확인 – Palak

+7

작동합니다, "adb install"대신 "pm install"을 사용했습니다! 감사! – TomCB

관련 문제