PeripheralManagerService 抛出 NoClassDefFoundError

PeripheralManagerService throws NoClassDefFoundError

我的应用程序中有以下代码可以访问 PeripheralManagerService

PeripheralManagerService service = new PeripheralManagerService();
Gpio ledGpio;
try {
    ledGpio = service.openGpio("BCM6");
    ledGpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
} catch (IOException e) {
    Log.e(TAG, "Error configuring GPIO pins", e);
}

更新到最新的 Android Things(开发者预览版 7)后,我的应用现在抛出错误 一个 NoClassDefFoundError:

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/things/pio/PeripheralManagerService;
...
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.things.pio.PeripheralManagerService" on path: DexPathList[...]

此代码之前可以正常工作,为什么更新后开始出现这种情况?

从预览版 7 开始,Android 事物 API 服务不再构建为新的 实例。它们通过 getInstance() 作为单例访问 更符合 Android API 范式。 类中的一些,比如 PeripheralManagerService 也已重命名。

请务必更新您的应用以使用 Preview 7 SDK:

dependencies {
    compileOnly 'com.google.android.things:androidthings:0.7-devpreview'
}

然后修改您的代码以访问 PeripheralManager

PeripheralManager manager = PeripheralManager.getInstance();
Gpio ledGpio;
try {
    ledGpio = manager.openGpio("BCM6");
    ledGpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
} catch (IOException e) {
    Log.e(TAG, "Error configuring GPIO pins", e);
}

回顾 Android 事情 API reference 验证您呼叫的其他 API 是否已更改。

而不是使用 PeripheralManagerService service = new PeripheralManagerService(); 使用

PeripheralManager peripheralManager=PeripheralManager.getInstance();

我 运行 遇到了同样的问题,但上述解决方案对我不起作用。我试图通过选择 new->project 并选择 Android Things 来创建一个字母数字显示项目。生成的 gradle 构建文件如下所示。请注意 ht16k33 的驱动程序版本为 0.3。这导致了问题。一旦我将其更改为 1.0,ClassNotFound 问题就消失了。

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.google.android.things.contrib:driver-ht16k33:0.3'
    implementation 'com.android.support:support-v4:28.0.0-beta01'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    compileOnly 'com.google.android.things:androidthings:+'

}