2012-10-05 102 views
5

我正在開發一個需要連接到USB設備的android應用程序。爲Android編寫USB驅動程序

我在Windows上開發了一個類似的應用程序,我用c寫的驅動程序。

我想爲我的android應用程序開發USB驅動程序。 我想知道什麼是必要的開發Android的USB驅動程序。

我可以重複使用ndk編寫的代碼。

感謝,

回答

6

首先,Android是實際上只是Linux的,所以如果你是在談論「編寫USB驅動程序我的Android應用程序」你倒是應該說「寫爲您的特定設備的Linux USB驅動程序」。

接下來,您將不得不以某種方式訪問​​您的設備。當您爲Linux編寫USB驅動程序時,您會得到什麼,可能是/ dev /中的某個文件節點。我猜你想爲非標準USB設備(如鼠標/操縱桿/大容量存儲器)創建驅動程序,而Android不提供良好的JAVA API?在這種情況下,您將不得不編寫一個本地庫(可能基於您已有的c代碼)並使用NDK進行編譯。您將從中獲得的.so文件可以打包在您的Android應用程序中,然後可以使用它來與您的USB設備通話。

所以總結起來:

USB設備驅動程序 - >創建一個內核模塊或嵌入驅動程序到你的Linux內核:這是Linux的USB驅動程序的東西,你應該能夠找到足夠的指南針對在網上。如果你真的創建了一個Windows USB驅動程序,你應該能夠重用你的C代碼的一部分。

用於訪問設備的原生包裝庫(.so文件或用於Windows術語的.dll) - >創建NDK項目,打開正確的設備節點並正確讀取/寫入設備。

android app - >包含.so文件並通過jni訪問其本機(c)方法。您可以使用javah或swig等工具從庫的頭文件中生成jni代碼。

3

上一個答案假定您具有對設備的根訪問權限,並且不適合大規模部署。由於api version 12 android提供了一個usb接口,允許您使用低級控制通道和usb請求緩衝區與某些設備進行交互。

有兩種類型的設備支持 USB主機設備 USB(機器人)的附屬設備

主機模式通常只能在平板電腦支持不好,手機可以做支持,但他們的ablity維持主機模式以下,非常依賴於問題deviec的電壓需求

附件模式爲奇數時,因爲它延伸USB標準添加標識的附件作爲「機器人」附件

額外交換如果上述模式的您可以重新使用它們,那麼,除非您完全控制將安裝的所有設備,否則它們是使用低級別c驅動程序的更好選擇。

這些都是java apis,可以在usb下的google android文檔站點找到。

+0

NDK應用程序是否需要root訪問? –

+1

不,你不知道。本地代碼可以在沒有root的情況下構建開發和部署,但是訪問系統擁有的資源(如設備)將需要root權限。一個非USB的例子就是使用標準的linux sshd,比如dropbear,這是合理的,你可以在play store上找到它們,但是爲了在standrard端口上運行它們需要以root身份運行。 – Neil