0

/data/data/com.android.providers.telephony/databases/mmssms.dbにあるファイルをSDカード上の場所/sdcard/ test/mmssmsにコピーするだけのAndroidアプリケーションを自分で作成しようとしています。 db

デバイスはルート化され、アプリケーションにはスーパーユーザーアクセスが許可されていますが、ファイルが実際にコピーされることはありません。宛先ディレクトリは存在し、アプリケーションのSDKは1.5です。以下は、バックアップの実行に使用されるコマンドです。

Runtime.getRuntime().exec("su");

Runtime.getRuntime().exec("mount -o rw,remount -t yaffs2 /data/data/com.android.providers.telephony/databases /data");

Runtime.getRuntime().exec("chmod -R 777 /data/data/com.android.providers.telephony/databases");

Runtime.getRuntime().exec("cp /data/data/com.android.providers.telephony/databases/mmssms.db /sdcard/test/mmssms.db");

マニフェストxmlでは次の権限が使用されます。

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

そのファイルと他のファイルを/data/ディレクトリにコピーできるようにするために何ができるか知りたいだけです。御時間ありがとうございます。

4

1 に答える 1

0

私はまったく同じ問題を抱えています。これをアプリで動作させることができないようです。ただし、コード スニペットに関するいくつかの役立つメモ:

  • これらのコマンドを Runtime.getRuntime().exec() の個別の呼び出しとして実行しても意味がありません。exec を呼び出すたびに、アプリと同じ権限を持つ新しい子プロセスが開始されるからです。exec("su") を実行しても、後続のコマンド (mount、chmod など) は新しいプロセスであるため、root 権限は付与されません。代わりに exec("su -c 'command'") を実行する必要があります

  • 「mount -o rw....」を実行する必要はありません。このパーティションから読み取るだけであり、書き込みは行わないためです。

誰かがこれを解決したかどうかを知りたいです。ES ファイル エクスプローラー (ルート アクセスを使用) を使用してファイルをコピーすると、問題なく動作します。USB 経由で PC からルート ADB シェルを使用してファイルをコピーすることもできます。私のアプリには、Manifest.xml で設定された WRITE_EXTERNAL_STORAGE アクセス許可もあります。

于 2012-12-04T23:07:49.847 に答える