如何获取安卓设备自身的ProductID(PID)和VendorID(VID)
Android 获取设备自身USB VID/PID 实现方案
你需要获取的是安卓设备作为USB从设备(比如连接电脑时被识别到的VID/PID),系统没有公开的专门API直接返回该数值,可通过以下两种路径实现:
方案1:读取系统内置属性(无需权限,兼容性最好)
安卓系统会默认将设备自身的USB VID/PID存储在系统属性中,不同厂商的属性key会略有差异,常用的读取代码如下:
import android.os.Build; import android.text.TextUtils; import java.lang.reflect.Method; // 读取设备VID public static String getDeviceVid() { try { Method getPropMethod = Build.class.getMethod("get", String.class, String.class); // 优先读取通用key,取不到可根据自身机型适配ro.product.vid、ro.config.usb_vid等其他key String vid = (String) getPropMethod.invoke(null, "ro.usb.vid", ""); if (TextUtils.isEmpty(vid)) { vid = (String) getPropMethod.invoke(null, "ro.product.vid", ""); } return vid; } catch (Exception e) { return ""; } } // 读取设备PID public static String getDevicePid() { try { Method getPropMethod = Build.class.getMethod("get", String.class, String.class); // 优先读取通用key,取不到可根据自身机型适配ro.product.pid、ro.config.usb_pid等其他key String pid = (String) getPropMethod.invoke(null, "ro.usb.pid", ""); if (TextUtils.isEmpty(pid)) { pid = (String) getPropMethod.invoke(null, "ro.product.pid", ""); } return pid; } catch (Exception e) { return ""; } }
调试场景下可直接在adb shell执行getprop | grep usb即可快速查看当前设备的VID/PID对应的属性key和数值。
方案2:读取sysfs节点(部分机型需要root权限)
部分设备会把USB配置信息存在sysfs路径下,直接读取对应节点内容即可获取数值,通用路径如下:
- VID节点:
/sys/class/android_usb/android0/idVendor - PID节点:
/sys/class/android_usb/android0/idProduct
注意:不同设备的sysfs路径可能存在差异,该方案通用性不如读取系统属性的方案,仅作为备选。另外如果设备当前开启了USB调试、MTP、PTP等不同的USB功能,PID可能会动态变化,需要固定PID的场景要提前确认设备的USB功能配置是否固定。
内容的提问来源于stack exchange,提问作者Mohammad Elsayed
相关产品推荐
相关产品推荐

