web-dev-qa-db-ja.com

インストールAndroidプロンプトなしのAPK

大画面で広告を表示するAndroidアプリを作成しています。広告主が広告を選択できるバックエンドがあるため、ほとんど瞬時に更新されます。Androidボックスが実行されている(HDMI画面に接続されている)、ソフトウェアをリモートで更新できるはずです。

この場合:

メインアプリは(オフにされていない限り)継続的に実行され、ユーザーには何も表示されませんAndroid関連。アップデートをリッスンしてメインapkを削除し、新しいapkをインストールするアップデーターアプリが必要です。新しいメインAPKがインストールされて表示されるまで、「更新してください」というアクティビティが表示されます。

必要なもの:

ROOTED DEVICEのユーザーにプロンプ​​トを表示せずに更新メカニズムを実装する方法についてのヘルプが必要です。

私たちが持っているもの:

アップデータアプリはブート受信イベントにフックされ、そこでサービスが開始されます(このサービスは更新をリッスンし、すぐに同僚によって実装されます)。サービスは、更新中に更新情報を要求するアクティビティを開始できます。

アップデータアクティビティ内

 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を出力しますが、ランダムに存在しないコマンドを与えると同じようになります。

マニフェスト内

<!-- 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" />

アプリをシステムアプリとしてインストールしないと、[パッケージのインストール]と[パッケージの削除]は役に立ちません。正しいですか?

簡単に言えば、テストAPKのインストールはありません。これを解決する方法がわかりません。助けていただければ幸いです!

22
TomCB

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/

26
Palak