0

バックグラウンド

  • アプリが実行されるハードウェア デバイスを構築および制御します。
  • (編集) Android OS のカスタム バージョンもすぐにビルドします。
  • 私たちは、「常時オン」であることが期待されるアプリを構築しています。
  • 私たちは、アプリが市場に依存せずに自己更新できるようにしたいと考えています。したがって、クライアント アプリが更新を定期的にポーリングし、apk をダウンロードしてからインストールするサービスをホストしています。そこには...

問題

ユーザーに通常のアクセス許可と更新プロンプトを与えることなく、ダウンロードしたアプリの更新プログラムを UpdateService にインストールさせたいと考えています。結局のところ、ハードウェアとソフトウェアは私たちが制御します。そのためには、アプリにスーパーユーザーのアクセス許可を与える必要があると思います (他の方法があれば、私の質問はまったく別のものになります)。しかし、私はそれを行う方法を理解できません。

インストールできるスーパーユーザー アプリについて読んだことありますが、これは自分の電話をルート化したいユーザー向けのユーザー ソリューションのようです。または、スーパーユーザーを必要とするアプリを配布したいが、ユーザーがインストールするデバイスを管理していない開発者向けのソリューションです。

suを持つべきアプリまたはユーザーをリストするAndroid OSのどこかにファイルがありますか? もしそうなら、それは問題ありません。私たちはすべてをコントロールします。

4

2 に答える 2

1

最初にダウンロードしてから、アンインストールとインストールを実行します(システムはルート化されています)

private void uninstall() {

        try {
            Process p = Runtime.getRuntime().exec("su");
            InputStream es = p.getErrorStream();
            DataOutputStream os = new DataOutputStream(p.getOutputStream());

            os.writeBytes("pm uninstall  com.example.app\n");

            os.writeBytes("exit\n");
            os.flush();
            int read;
            byte[] buffer = new byte[4096];
            String output = new String();
            while ((read = es.read(buffer)) > 0) {
                output += new String(buffer, 0, read);
            }
            p.waitFor();
        } catch (Exception e) {
        }
    }

    private void install() {
        try {
            // Do the magic
            Process p = Runtime.getRuntime().exec("su");
            InputStream es = p.getErrorStream();
            DataOutputStream os = new DataOutputStream(p.getOutputStream());

            os.writeBytes("pm install /mnt/sdcard/exampple/app.apk\n");

            os.writeBytes("exit\n");
            os.flush();
            int read;
            byte[] buffer = new byte[4096];
            String output = new String();
            while ((read = es.read(buffer)) > 0) {
                output += new String(buffer, 0, read);
            }
            p.waitFor();

        } catch (IOException e) {
            Log.d("catch silant", "1");
        } catch (InterruptedException e) {
            Log.d("catch silant", "2");
        }
    }
于 2014-06-19T16:20:20.440 に答える
0

この外観: https://code.google.com/p/auto-update-apk-client/downloads/detail?name=auto-update-apk-client_2012-10-04.tgz&can=2&q=

私はそれがあなたを助けることができると思います.私も今それをやろうとしています.

于 2013-04-10T07:44:54.850 に答える