Thứ nhất, Android là thực sự chỉ Linux, vì vậy nếu bạn đang nói về "viết một trình điều khiển USB cho các ứng dụng Android của tôi" bạn chứ không nên nói "viết một trình điều khiển USB linux cho thiết bị cụ thể của bạn".
Tiếp theo, bạn sẽ phải truy cập thiết bị của mình theo một cách nào đó. Những gì bạn sẽ nhận được khi bạn đã viết trình điều khiển USB cho Linux có lẽ là một số nút tập tin trong/dev /. Tôi đoán bạn muốn tạo ra một trình điều khiển cho một thiết bị USB không chuẩn (như một con chuột/phím điều khiển/lưu trữ khối lượng) mà Android không cung cấp một api JAVA tốt đẹp? Trong trường hợp đó, bạn sẽ phải viết một thư viện riêng (có thể dựa trên mã c bạn đã có) và biên dịch nó với NDK. Các tập tin .so bạn sẽ nhận được ra khỏi nó có thể được đóng gói trong ứng dụng Android của bạn, mà sau đó có thể sử dụng nó để nói chuyện với thiết bị USB của bạn.
Vì vậy, để tóm tắt: điều khiển thiết bị
usb -> tạo ra một mô-đun hạt nhân hoặc nhúng một tài xế vào hạt nhân Linux của bạn: đây là usb linux thứ lập trình điều khiển, mà bạn sẽ có thể tìm thấy đủ hướng dẫn trên web. Bạn sẽ có thể tái sử dụng các phần của mã c của bạn nếu bạn thực sự tạo ra một trình điều khiển usb cửa sổ.
thư viện trình bao bọc gốc để truy cập thiết bị của bạn (.so tệp hoặc .dll nếu bạn quen với thuật ngữ cửa sổ) -> tạo dự án NDK mở nút thiết bị phù hợp và đọc/ghi chính xác thiết bị của bạn.
ứng dụng android -> bao gồm tệp .so và truy cập các phương thức gốc (c) của nó thông qua jni. Bạn có thể sử dụng các công cụ như javah hoặc swig để tạo mã jni từ các tệp tiêu đề của thư viện của bạn.
Ứng dụng NDK có yêu cầu quyền truy cập root không? –
Không, bạn không. Mã nguồn gốc có thể được xây dựng và triển khai không có gốc nhưng truy cập vào các tài nguyên do hệ thống sở hữu như các thiết bị sẽ yêu cầu root. Một ví dụ không phải USB sẽ sử dụng một sshd linux chuẩn như dropbear, điều này là hợp lý bạn có thể tìm thấy chúng trên cửa hàng play tuy nhiên để chạy trên các cổng standrard, chúng sẽ cần phải được chạy dưới dạng root. – Neil