Tôi đang phát triển ứng dụng Android
đầu tiên của mình và tôi rất tò mò nếu có bất kỳ cách "chuẩn" nào để thực thi các lệnh shell
đặc quyền. Tôi chỉ có thể tìm thấy một cách để thực hiện điều đó, bằng cách thực hiện su
và sau đó thêm các lệnh của tôi vào stdin
của quy trình su
.ANDROID: Cách truy cập root trong ứng dụng Android?
DataOutputStream pOut = new DataOutputStream(p.getOutputStream());
DataInputStream pIn = new DataInputStream(p.getInputStream());
String rv = "";
// su must exit before its output can be read
pOut.writeBytes(cmd + "\nexit\n");
pOut.flush();
p.waitFor();
while (pIn.available() > 0)
rv += pIn.readLine() + "\n";
Tôi đã đọc về gói đặc quyền (superuser
) gọi trong JNI
: điều này có khả thi không? Nếu vậy, làm thế nào sẽ đi về hoàn thành nó? Ngoài ra, có cách nào khác để gọi hướng dẫn đặc quyền từ Java
không?
Không thực sự có bất kỳ phương tiện nào để nâng cao đặc quyền của quy trình hiện có, chỉ có nghĩa là khởi chạy một quy trình mới chạy dưới dạng gốc. Ví dụ, trong đó su được thông qua một lệnh để thực hiện, hãy xem http://stackoverflow.com/questions/4846241/more-than-one-superuser-command-android/4846312 –
@Chris những gì về việc khởi chạy một Hoạt động/Nhiệm vụ/Ứng dụng java Android/etc? –
Điều đó sẽ yêu cầu những thay đổi lớn đối với Android. Bạn thường không tạo ra các quy trình để thực hiện java android, thay vào đó bạn yêu cầu android yêu cầu 'zygote' đến ngã ba một lần, nó hoạt động dưới id người dùng của ứng dụng đó. Nó đơn giản hơn để giữ các tác vụ gốc như các tệp thực thi gốc hoặc các kịch bản lệnh shell thực hiện những điều quan trọng thay mặt cho ứng dụng. Hoặc thêm chúng vào hệ thống thích hợp như các dịch vụ hệ thống đặc quyền. Thông thường, cách tốt nhất là tạo nhóm unix và cấp quyền truy cập cho một khả năng cụ thể (nói quyền truy cập vào tệp thiết bị) và chạy dịch vụ trong nhóm đó hoặc ghép nối với quyền android –