現在、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");」であることがわかりました。部。