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:+'
}
我的应用程序中有以下代码可以访问 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:+'
}