Cómo retener las dependencias jar después de ofuscarse con ProGuard

Tengo una colección de archivos jar con dependencias en un patrón de diamante:

          base.jar
         / \
dep1.jar dep2.jar
         \ /
         dep3.jar

Me gustaría ofuscarlos con ProGuard para conservar sus dependencias, de modo que, por ejemplo, las versiones ofuscadas de base.jar y dep2.jar puedan ejecutarse de forma aislada, sin las versiones ofuscadas de dep1.jar y dep3.jar (tal como pueden, no ofuscados). Hay clases distribuidas entre los frascos con los mismos nombres de paquete, y métodos en los frascos dependientes que llaman a métodos (en varias clases) que quiero ofuscar , en los frascos de los que dependen.

Cuando trato de ofuscar todos los frascos a la vez, ProGuard no "comprende" sus dependencias; y toma un método estático de una clase en base.jar y lo mueve a una clase ofuscada en dep1.jar. El código en la versión ofuscada de dep2.jar que "espera" ese método en base.jar, falla en tiempo de ejecución si dep1.jar no está en el classpath.

How can I insure the dependencies in the obfuscated jars is retained?

La documentación sugiere el uso de una ofuscación incremental, pero el -applymappingcambio que parece requerir solo puede tomar un argumento que indique a los métodos dependientes los nombres ofuscados que se deben usar para llamar a los frascos de los que dependen , que se ofuscan primero. La ofuscación de dep1.jar puede producir uno de esos argumentos de archivo de mapeo, y el de dep2.jar puede producir otro, pero la ofuscación de dep3.jar necesita ambos archivos de mapeo (más el de base.jar?) En su -applymappingargumento. dep1.jar y dep2.jar no pueden ofuscarse juntos (¿ o sí? ), sin embargo, para producir un solo archivo de mapeo, porque el código podría reubicarse de uno a otro. ¿Debo fusionar los archivos de mapeo yo mismo?

Respuesta 1

La solución más fácil (aunque subóptima) es procesarlos todos a la vez, sin optimización (-dontoptimizar).

Respuesta: 2

Estoy usando seam para intentar hacer una aplicación web y estoy tratando de hacer un cuadro desplegable que muestre los vehículos que están almacenados en una base de datos y le permite al usuario seleccionar varios. Todo funciona ...

Estoy comenzando un nuevo proyecto usando Spring 3.1, Hibernate 4 y hay un requisito para rastrear cualquier actividad en la aplicación. ejemplo de seguimiento de actividad ¿quién cambió qué? de que a que y en ...

Tengo un gran archivo txt (1.5 Mb) como recurso privado en mi aplicación de Android. El archivo está estructurado así: "A1 | A2 | A3 | A4 # B1 | B2 | B3 | B4 # C1 | C2 | C3 | C4 # ..." donde A1, A2, A3, B1 ... son alfanuméricos. ..

Soy un principiante, así que tengan paciencia conmigo. He creado una aplicación con una ruleta que controla la visibilidad de Editar textos. Cuando ejecuto esta aplicación, una instrucción catch detecta una excepción de punto nulo ...