Obfuscate Android proyecto de prueba, así como el proyecto (prueba en ejecución en la versión ofuscada y la versión)
Digamos que tengo un proyecto de aplicación de Android con pruebas.
¿Hay alguna manera de que podamos ejecutar nuestra suite de pruebas (en un proyecto de prueba separado) en contra de la versión de lanzamiento?
- ¿Cómo detengo la locura del mono?
- Cómo seleccionar el primer elemento de un spinner en una prueba
- ¿Cómo puedo probar un clic en una determinada coordenada x, y?
- Utilice Robolectric para probar el inicio de un servicio con extras de intención?
- Al probar la interfaz de usuario de Android, ¿cuál es la forma correcta de esperar que la interfaz de usuario esté lista?
- VerifyError en las herramientas de compilación del proyecto de prueba android v17
- Uso de una aplicación personalizada con InstrumentationTestCase
- Android Base64 codificar y decodificar return null en Unit Test
- ¿Es posible establecer pruebas para ejecutar continuamente en Android Studio?
- Android: Espresso no espera hasta que se muestre fragmento o actividad para que cada prueba fallara
- Prueba de unidad Android, getString del recurso
- Mocking Intent Extras en Espresso Tests
- Monitoreo de la entrega de Android GCM
Después de leer el comentario de la recompensa, me di cuenta OP realmente pedir algo más que una simple respuesta Sí / No, así que voy a extender mi comentario a una respuesta. Hablando en términos generales, una adecuada proguard.cfg diseñada y la estructura del proyecto es suficiente para evitar este dilema.
Una configuración típica de proguard (ver sección 7. Una sección completa de aplicaciones de Android en este enlace ) garantiza que todas las cosas relacionadas con Android como Actividad, Vista y etc. se conservan durante la ofuscación. No tiene ningún sentido alterar la configuración por ejemplo, para ofuscar el método Acticity.onCreate (), ya que obviamente arruinará la aplicación en tiempo de ejecución. En otra palabra, un diseño de pozo proguard.cfg protegerá toda la interfaz pública al marco de tiempo de ejecución subyacente y los mantendrá sin cambios.
... ... -keep public class * extends android.app.Activity -keep public class * extends android.app.Application -keep public class * extends android.app.Service -keep public class * extends android.content.BroadcastReceiver -keep public class * extends android.content.ContentProvider -keep public class * extends android.view.View { public <init>(android.content.Context); public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); public void set*(...); } ... ...
Por otro lado, el proyecto de prueba de Android debe centrarse en la prueba de componente de Android (intencionalmente preservado durante la ofuscación), es decir, una vista es proerly prestados, un clic de botón realizar la tarea correcta, y debe evitar la escritura de pruebas para POJO clase que no se basa en ningún API de Android, tenga en cuenta que estos POJO son lo que obfuscate por lo general. Es mejor escribir pruebas junit puras para estos POJO en la aplicación o proyecto java referenciado para que estas pruebas junit estén involucradas en la fase de prueba de maven antes de crear la versión final (ofuscada, firmada y zipaligned). Además, un buen diseño OO protegerá estas dependencias POJO intermedias y las hará transparentes hacia el exterior, es decir, el marco de tiempo de ejecución.
app/ src/main/java/ src/test/java/ <-- intermediate POJO tests put here. AndroidManifest.xml ... ... app-test/ src/main/java <-- Android component tests put here. AndroidManifest.xml ... ...
Sin embargo, si todavía desea mantener la capacidad de ejecutar el proyecto de prueba contra apk apfuscated, es necesario ajustar el proyecto de la aplicación proguard.cfg correctamente y preservar la clase POJO durante la ofuscación en Para ajustarse al código de prueba.
Puede instruir a proguard para que escriba el mapeo que crea en un archivo usando la -printmapping <filename>
. La estructura de ese archivo es obvia y puede ser analizada en un Hashtable. Entonces escribiría un script que aplicara esas conversiones a sus pruebas (haciendo copias de ellas). La ofuscación simplemente significa reemplazar los nombres de clases y métodos de algo (legible por el hombre y) válido en términos de la Especificación de Bytecode de Java a algo diferente (corto y no legible por el hombre pero) también válido, por lo que debería funcionar. Compilar las pruebas adaptadas contra el proyecto ofuscado y ejecutarlas.
¿Tiene sus pruebas y la fuente en un proyecto? Si es así, creo que maven android eliminará el código de prueba cuando realice una liberación.
Para solucionar esto, necesitará mover las pruebas a un proyecto separado que se conecte a su aplicación real (suponiendo que confíe en el código / activos de su proyecto actual), entonces el proyecto separado seguirá siendo capaz de instrumentar contra una versión de lanzamiento de su aplicación (Suponiendo que estén firmados por la misma clave).
- Error Ningún recurso encontrado que coincida con el nombre dado (en 'src' con el valor '@ drawable / button1')
- Class.getResource (className) que me da NullPointerException