usb-serial-for-androidを使用する方法をメモ。
他にFTDriverというのもある。
(2) Android Studioでプロジェクトを開く
メッセージに従って、足らないSDKをインストールしたり、Gradleをアップグレードしたりする。
このプロジェクト内には以下の2つのモジュールがある。
- usbSerialForAndroid : ライブラリ本体
- usbSerialExamples : サンプルアプリ
エラーその1
Error:Application and test application id cannot be the same: both are 'com.hoho.android.usbserial.examples' for debugAndroidTest
よく分からないが、build.gradle(Module: usbSerialExamples)をテキトーに修正する。
testApplicationId "com.hoho.android.usbserial.examples" testApplicationId "com.hoho.android.usbserial.examplestest"
(3) 必要に応じてdevice_filter.xmlにデバイスを追加
usbSerialExamples/src/main/res/xml/device_filter.xml にGR-CITRUSを追加した例。
(VID = 0x2A50 = 10832, PID = 0x0277 = 631)
<resources> <!-- 0x2A50 / 0x0277: GR-CITRUS ※追加 --> <usb-device vendor-id="10832" product-id="631" /> <!-- 0x0403 / 0x6001: FTDI FT232R UART --> <usb-device vendor-id="1027" product-id="24577" /> <!-- 0x0403 / 0x6015: FTDI FT231X --> <usb-device vendor-id="1027" product-id="24597" /> <!-- 0x2341 / Arduino --> <usb-device vendor-id="9025" /> <!-- 0x16C0 / 0x0483: Teensyduino --> <usb-device vendor-id="5824" product-id="1155" /> <!-- 0x10C4 / 0xEA60: CP210x UART Bridge --> <usb-device vendor-id="4292" product-id="60000" /> <!-- 0x067B / 0x2303: Prolific PL2303 --> <usb-device vendor-id="1659" product-id="8963" /> <!-- 0x1a86 / 0x7523: Qinheng CH340 --> <usb-device vendor-id="6790" product-id="29987" /> </resources>
(4) 必要に応じてgetDefaultProbeTable()にデバイスを追加
usbSerialForAndroid の UsbSerialProber.java にある getDefaultProbeTable() にGR-CITRUSを追加した例。
(VID = 0x2A50, PID = 631)
public static ProbeTable getDefaultProbeTable() { final ProbeTable probeTable = new ProbeTable(); probeTable.addDriver(CdcAcmSerialDriver.class); probeTable.addDriver(Cp21xxSerialDriver.class); probeTable.addDriver(FtdiSerialDriver.class); probeTable.addDriver(ProlificSerialDriver.class); probeTable.addDriver(Ch34xSerialDriver.class); // GR-CITRUSを追加 probeTable.addProduct(0x2A50, 0x0277, CdcAcmSerialDriver.class); return probeTable; }
(6) ライブラリのJARを作成
build.gradle(Module: usbSerialForAndroid)を修正する。
def JAR_NAME='usbSerialForAndroidLibrary.jar'
task clearJar(type: Delete) {
delete 'build/libs/' + JAR_NAME
}
task makeJar(type: Copy) {
from('build/intermediates/bundles/release/')
into('release/')
include('classes.jar')
rename('classes.jar', JAR_NAME)
}
makeJar.dependsOn(clearJar, build)
そして、Build > Make Module 'usbSerialForAndroid' でJARをビルドする。
(7) アプリへの組込み
JARのコピー
プロジェクトの中にあるapp/libsフォルダにusbSerialForAndroid.jarをコピーする。
Android StudioでusbSerialForAndroidLibrary.jarを右クリックし、Add As Library..する。
build.gradle(Module: app)に依存を記述
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs') // <- この一行を追加
}
res/xml/device_filter.xmlを追加
usbSerialExamples/src/main/res/xml/device_filter.xmlを
アプリのres/xmlフォルダにコピーする。
AndroidManifest.xmlに追記
<intent-filter> <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /> </intent-filter> <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/device_filter" />
(8) アプリでのライブラリの使用
サンプルアプリを参考に。
必要なimportは下記のとおり。
import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbManager; import com.hoho.android.usbserial.driver.UsbSerialDriver; import com.hoho.android.usbserial.driver.UsbSerialPort; import com.hoho.android.usbserial.driver.UsbSerialProber; import com.hoho.android.usbserial.util.HexDump;