14

Androidベースの製品用の小さなシンプルなアプリを書くように頼まれました。デバイスには、異なる機能を持つ2つのAndroidシステムイメージが付属しています。私が書いているアプリは、ボタンをクリックすると、リカバリシステムを使用して現在のOSを画像の1つに置き換えるという概念実証にすぎません。

デバイスはルート化され、アプリケーションはシステムアプリとして実行されます。

私が使う

RecoverySystem.installPackage(context, packageFile);

参照についてはここを参照)OSをイメージの1つに置き換えます。これにより、システムが再起動し、リカバリシステムが初期化されてイメージがインストールされます。

RecoverySystem.installPackage私が抱えている問題は、メソッドが/ cache / restorey /コマンドファイルにアクセスできないため、この呼び出しが失敗することです。再起動時にリカバリシステムを実行するためのコマンドを書き込もうとしていると思いますが、失敗します。これが私が得ている例外です:

02-27 16:44:39.463: E/BroadSign Resolution Switcher(4439): java.io.FileNotFoundException: /cache/recovery/command: open failed: EACCES (Permission denied)
02-27 16:44:39.463: E/BroadSign Resolution Switcher(4439):  at libcore.io.IoBridge.open(IoBridge.java:416)
02-27 16:44:39.463: E/BroadSign Resolution Switcher(4439):  at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
02-27 16:44:39.463: E/BroadSign Resolution Switcher(4439):  at java.io.FileOutputStream.<init>(FileOutputStream.java:73)
02-27 16:44:39.463: E/BroadSign Resolution Switcher(4439):  at java.io.FileWriter.<init>(FileWriter.java:42)
02-27 16:44:39.463: E/BroadSign Resolution Switcher(4439):  at android.os.RecoverySystem.bootCommand(RecoverySystem.java:381)
02-27 16:44:39.463: E/BroadSign Resolution Switcher(4439):  at android.os.RecoverySystem.installPackage(RecoverySystem.java:330)

したがって、このファイルにアクセスするための適切な権限がないと想定しています。マニフェストに設定した許可は次のとおりです。

<uses-permission android:name="android.permission.REBOOT" />
<uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" />
<uses-permission android:name="android.permission.DELETE_CACHE_FILES" />

のREBOOT権限が必要なことはわかっていRecoverySystemます。しかし、他の2つが関連しているかどうかはわかりません。/cacheパーティション内のファイルを作成/書き込みするために他の権限が必要かどうかさえわかりません。

誰かが私が行方不明になっている可能性があることを知っていますか?


アップデート:

まあ、それは私がそれを理解したように見えます。結局、許可は正しかった。すべてが正しかった。

apkファイルを/system/ appに移動してアプリをシステムアプリとして設定していたとき、まだすべての権限を設定していませんでした。デバイスで最新のコードを実行すると、それが/ data / appにインストールされ、システムアプリのアップデートとして認識されました。そのため、元のシステムアプリの権限のみが認識されました。

/ system / appから直接実行するように最新のコードを再設定した後、それは機能しました。

今私が抱えている唯一の問題は、再起動してもイメージがインストールされず、感嘆符が付いた緑色のロボットになってしまうことです。調査を続けます。

この投稿が同じ問題を抱えている人に役立つことを願っています。どんな質問にも喜んでお答えします。

4

5 に答える 5

2

アプリが /system/app にインストールされる前に、以下のエラーが発生していました:

07-20 10:52:46.512      933-951/? W/RecoverySystem﹕ !!! REBOOTING TO INSTALL /storage/emulated/legacy/Download/Update.zip !!!
07-20 10:52:46.512      933-951/? W/System.err﹕ java.io.FileNotFoundException: /cache/recovery/command: open failed: EACCES (Permission denied)
07-20 10:52:46.512      933-951/? W/System.err﹕ at libcore.io.IoBridge.open(IoBridge.java:409)
07-20 10:52:46.512      933-951/? W/System.err﹕ at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
07-20 10:52:46.512      933-951/? W/System.err﹕ at java.io.FileOutputStream.<init>(FileOutputStream.java:73)
07-20 10:52:46.512      933-951/? W/System.err﹕ at java.io.FileWriter.<init>(FileWriter.java:42)
07-20 10:52:46.512      933-951/? W/System.err﹕ at android.os.RecoverySystem.bootCommand(RecoverySystem.java:389)
07-20 10:52:46.522      933-951/? W/System.err﹕ at android.os.RecoverySystem.installPackage(RecoverySystem.java:337)

必要なすべての権限を試しましたが、続行できませんでした。

それで、私は4.2以上のAPIを使用していたので、アプリを入れよ/system/priv-appうとしましたが、うまくいきました。

于 2015-07-20T01:34:29.330 に答える