Vâng, tôi đã lặn trong vùng nước u ám của chương trình Android cấp thấp (bản địa C/C++ bằng cách sử dụng chuỗi công cụ CodeSourcery). Tôi đã thử thực thi trên một trình mô phỏng và nó hoạt động. Tôi muốn thử nó trên một thiết bị thực sự. Vì vậy, tôi cắm vào mối quan hệ của tôi và đẩy các tập tin vào hệ thống tập tin. Sau đó, tôi đã cố gắng để thực hiện nhị phân, và tôi nhận được một lỗi cho phép. Nó thực sự không quan trọng làm thế nào tôi gắn kết nó, hoặc nơi tôi gửi nó, tôi không phải gốc và nó không cho phép tôi thực hiện nó. Có cách nào để chạy một chương trình như thế này trên một điện thoại không bắt nguồn từ?Có thể chạy bản nhị phân cánh tay gốc trên điện thoại Android không bắt nguồn từ không?
Trả lời
Sau khi sử dụng chuỗi công cụ được bao gồm trong NDK của Android để biên dịch các tệp nhị phân của bạn, bạn có thể đóng gói chúng bằng ứng dụng Android thông thường và khiến chúng xuất hiện dưới dạng các quy trình con.
Bạn sẽ phải bao gồm tất cả các tệp cần thiết trong thư mục nội dung của ứng dụng. Để chạy chúng, bạn cần phải có chương trình sao chép chúng từ thư mục nội dung đến một vị trí Runnable như: /data/data/com.yourdomain.yourapp/nativeFolder
Bạn có thể làm điều này như sau:
private static void copyFile(String assetPath, String localPath, Context context) {
try {
InputStream in = context.getAssets().open(assetPath);
FileOutputStream out = new FileOutputStream(localPath);
int read;
byte[] buffer = new byte[4096];
while ((read = in.read(buffer)) > 0) {
out.write(buffer, 0, read);
}
out.close();
in.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
Hãy nhớ rằng assetPath không tuyệt đối nhưng đối với nội dung /.
IE: "tài sản/nativeFolder" chỉ là "nativeFolder"
Để sau đó chạy ứng dụng của bạn và đọc sản lượng của nó bạn có thể làm một cái gì đó như thế này:
Process nativeApp = Runtime.getRuntime().exec("/data/data/com.yourdomain.yourapp/nativeFolder/application");
BufferedReader reader = new BufferedReader(new InputStreamReader(nativeApp.getInputStream()));
int read;
char[] buffer = new char[4096];
StringBuffer output = new StringBuffer();
while ((read = reader.read(buffer)) > 0) {
output.append(buffer, 0, read);
}
reader.close();
// Waits for the command to finish.
nativeApp.waitFor();
String nativeOutput = output.toString();
Xin cảm ơn! Điều này làm việc hoàn hảo! – AnimatedRNG
Rất vui được trợ giúp. Rất thích nhìn thấy google làm cho bên không JNI của NDK dễ sử dụng hơn một chút. – sarwar
Cảm ơn vì điều này, làm cho cuộc sống của tôi dễ dàng hơn nhiều! –
- 1. Không thể chạy 'adb root' trên điện thoại Android bắt nguồn
- 2. không thể chạy node.js trên điện thoại Android?
- 3. Tôi có thể trộn tay-eabi với cánh tay không?
- 4. Fancybox: không thể di chuyển trên điện thoại Android
- 5. Ứng dụng Android không được chạy trên các thiết bị bắt nguồn từ
- 6. Thêm một nhị phân dựng sẵn trong nguồn Android
- 7. Bản chạy Android có thể chạy trên GPU không?
- 8. Chạy ứng dụng Python trên điện thoại Android thực
- 9. onCreateOptionsMenu không được gọi trên FragmentActivity khi chạy trên phiên bản điện thoại
- 10. Android Eclipse DDMS - Không thể kéo tệp từ thiết bị được bắt nguồn từ
- 11. Xây dựng thư viện gốc với cánh tay android toolchain độc lập
- 12. Có đáng mua điện thoại Google Android Dev không?
- 13. Android AppWidget không hiển thị trên một số điện thoại
- 14. Android Studio không thể tìm thấy điện thoại của tôi
- 15. Tôi có thể ngăn điện thoại ngủ trên trang web
- 16. Máy chủ không nhận ra cookie từ điện thoại Android
- 17. Tính Pi trên điện thoại Android
- 18. Android AlarmManager không đánh thức điện thoại
- 19. Python trên cánh tay, Hướng dẫn bất hợp pháp
- 20. Python: Bắt giá trị baseclass từ lớp có nguồn gốc
- 21. Gmail Sync trên điện thoại Android
- 22. Kết nối Bluetooth giữa Android và điện thoại khác trên hồ sơ Rảnh tay
- 23. Số điện thoại có cần được bản địa hóa không?
- 24. Có thể cho Encog hoặc Neuroph chạy trên Android không?
- 25. Phát triển trên điện thoại Android của tôi có gây ra sự cố không?
- 26. pthread_cancel hoạt động khác trên cánh tay và ppc?
- 27. Trình điều khiển hệ thống tệp người dùng Android trên thiết bị không bắt nguồn từ?
- 28. Hình động và Điện thoại không hoạt động trên điện thoại di động
- 29. Bắt các loại ngoại lệ có nguồn gốc không thành công trên Clang/MacOS X
- 30. Bạn có thể nhận được một dòng lệnh trên điện thoại G1 không?
Bạn gần như chắc chắn sẽ cần root. Làm thế nào bạn thậm chí có được nó trên điện thoại nếu điện thoại của bạn không bắt nguồn từ? – Falmarri
Bạn đã đặt nhị phân ở đâu? Bạn không thể đặt nó trên sdcard vì nó được gắn với tùy chọn "noexec" (trừ khi bắt nguồn từ). –
Chính xác, đó là lý do tại sao nó không hoạt động trên sdcard. Tôi đã có thể đặt nó vào/data (nhưng nó sẽ không thực hiện hoặc thậm chí cho tôi chmod nó). Về cách đặt tệp thi hành vào hệ thống tệp: "adb push". – AnimatedRNG