Tengo el siguiente código en mi aplicación para acceder a 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);
}

Después de actualizar a las últimas cosas de Android (Developer Preview 7), mi aplicación ahora está lanzando a 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[...]

Este código funcionaba antes, ¿por qué comenzó a suceder después de la actualización?

5
Devunwired 7 mar. 2018 a las 02:20

3 respuestas

La mejor respuesta

A partir de la Vista previa 7, los servicios de la API de Android Things no se crean como nuevos instancias. En su lugar, se accede a ellos como singletons a través de getInstance() para ser más en línea con los paradigmas de la API de Android. Algunas de las clases, como PeripheralManagerService también fueron renombrados.

Asegúrese de actualizar su aplicación para usar el SDK de Vista previa 7:

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

Luego modifique su código para acceder a PeripheralManager en su lugar:

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);
}

Revise las referencia de API de Android Things para verificar si alguna de las otras API a las que llama ha cambiado.

13
Devunwired 6 mar. 2018 a las 23:20

En lugar de usar PeripheralManagerService service = new PeripheralManagerService(); usar

PeripheralManager peripheralManager=PeripheralManager.getInstance();
0
Koustuv Ganguly 11 may. 2018 a las 08:48

Me encontré con el mismo problema, pero la solución anterior no me funcionó. Intenté crear un proyecto de visualización alfanumérico eligiendo new-> project y eligiendo Android Things. El archivo de compilación de gradle generado se ve a continuación. Tenga en cuenta que el controlador para ht16k33 tiene la versión 0.3. Esto causó el problema. Una vez que lo cambié a 1.0, el problema de ClassNotFound desapareció.

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:+'

}

0
Mir3 6 ago. 2018 a las 05:06