0

現在、data/appおよびsystem/appディレクトリに含まれるすべてのファイルで構成される文字列配列に基づいてListViewを作成することにより、電話にインストールされているすべてのアプリの概要をすばやく把握しようとしています。

私のコードは次のとおりです。

public void onCreate(Bundle icicle) {
super.onCreate(icicle);

Process p;
try {
   // Preform su to get root privledges
   p = Runtime.getRuntime().exec("su"); 

   // Attempt to write a file to a root-only
   DataOutputStream os = new DataOutputStream(p.getOutputStream());
   os.writeBytes("echo \"Do I have root?\" >/system/sd/temporary.txt\n");

   // Close the terminal
   os.writeBytes("exit\n");
   os.flush();
   try {
      p.waitFor();
           if (p.exitValue() != 255) {
                File dir = new File("./system/app");
                File dir2 = new File("./data/app");
                String[] values = this.both(dir.list(), dir2.list());
                ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_1, values);
                setListAdapter(adapter);
           }
           else {
               Toast.makeText(this, "not root", Toast.LENGTH_LONG).show();
           }
   } catch (InterruptedException e) {
       Toast.makeText(this, "not root", Toast.LENGTH_LONG).show();
   }
} catch (IOException e) {
    Toast.makeText(this, "not root", Toast.LENGTH_LONG).show();
}

}

http://www.stealthcopter.com/blog/2010/01/android-requesting-root-access-in-your-app/から取得)

どちらの方法も次のようになります。

  private String[] both(String[] first, String[] second) {
    List<String> both = new ArrayList<String>(first.length + second.length);
    Collections.addAll(both, first);
    Collections.addAll(both, second);
    return both.toArray(new String[both.size()]);
  }

しかし、私のアプリケーションはクラッシュし続けます。コードのそれぞれの部分を削除することで、その理由が確かに「new File( "./ data / app");」であることがわかりました。部。

4

1 に答える 1

1

走ることで

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

root アクセス権を持つ新しいプロセスを作成しています。ただし、アプリケーションは別のプロセスで実行されます。したがって、アプリケーションにはルート アクセス権がありません。

1 つの方法は、/data/app で chmod を使用してアプリに許可を与え、dir.list() が終了した後に元の状態に戻すことです。

os.writeBytes("chmod 744 \data\app \n");
os.flush();
于 2012-08-16T22:35:36.583 に答える