2011-11-23 15 views
5

Necesito presentar ProGuard recientemente en Android debido a problemas con Scala en Android. Necesito ProGuard por su función de reducción, que elimina las clases que se presumen no utilizadas. Estoy muy preocupado por el impacto de eliminar clases sobre la capacidad de prueba.Con ProGuard, ¿cuál es el impacto en la estrategia de prueba?

Tal como está, escribo pruebas unitarias que se ejecutan en el host y las pruebas de aceptación que ejecutan la aplicación totalmente integrada en la plataforma Android.

Normalmente, me sentiría cómodo con una cobertura de prueba de unidad relativamente completa y cobertura de prueba de aceptación irregular. Sin embargo, dado que en mi código utilizo fuertemente la inyección de dependencia Guice, hasta ahora, según mi experiencia, ProGuard elimina el código de una manera que es difícil de predecir. Debido a esto, es muy probable que me haga introducir errores.

Esto me lleva a creer que necesito escribir pruebas de aceptación/plataforma que alcancen una cobertura completa porque en cualquier punto, puede haber una clase faltante.

¿Otros tienen esta experiencia? Si es así, ¿cuál ha sido su estrategia de prueba? O con la experiencia, ¿tiene más confianza de que las clases que ProGuard está eliminando son realmente innecesarias?

Respuesta

2

ProGuard no romperá su aplicación hasta que se intenta utilizar la reflexión o Clase # forName en clases eliminados y/o miembros ofuscado.

Desde mi experiencia (con Scala ofuscado en Android también) es muy fácil detectar los problemas causados ​​por ProGuard en su aplicación de Android usando las simples pruebas de humo. Usted sabe qué bibliotecas incluye en su proyecto. Si alguno de ellos usa reflection o Class # forName, realiza una prueba de humo en ellos. Luego excluya las clases/miembros necesarios de la configuración de ProGuard.

Recuerde también que puede automatizar las pruebas de su proyecto ofuscado mediante ActivityInstrumentationTestCase2 y emulador. Si planea utilizar ProGuard en su proyecto, realice siempre pruebas de instrumentación en APK ofuscado.

En conclusión, no temas. Los problemas relacionados con ProGuard son relatividad fácil de detectar.

+0

esto es generalmente cierto, pero tenga cuidado con las incoherencias extrañas cuando use bibliotecas de mierda, como Facebook SDK SDK y cosas por el estilo. Por lo general, rompe las cosas. –

2

Hemos estado realizando pruebas unitarias y probando "completamente" nuestra aplicación ProGuard-ed desde hace bastante tiempo, y no hemos tenido problemas "reales". Los únicos problemas que encontramos es cuando utilizamos algunos métodos de biblioteca en nuestras pruebas que no se usan en la aplicación principal; en estos casos, ProGuard eliminará el código de las bibliotecas y tendríamos que agregar manualmente los métodos específicos al proguard.cfg.

Ah, y también utilizamos Guice :)

+0

Por lo que he visto, muchos clientes de Roboguice no usan explícitamente Guice. ¿Estás utilizando principalmente las inyecciones de recursos de Android de Roboguice, o estás haciendo consolidaciones extensas con un módulo Guice no trivial? –

+1

Hacemos un poco de inyección de cosas que no son de roboguice. No estoy seguro si eso calificaría como "consolidaciones extensas" y "no triviales" sin embargo. Mi impresión general es que realmente no debería preocuparse, ProGuard hace su trabajo bastante bien. – dmon

Cuestiones relacionadas