La pila se complica con la participación de lambda (tenga en cuenta que el número de línea se pierde debido a la obstrucción). ¿Qué significa realmente "acceso $ lambda $ 12" y hay alguna manera de ubicar esto en el código sin conocer el número de línea real?

at com.group.RKGroup.com.my.MyClass access$lambda$12(com.group.RKGroup,int,com.my.PType) (RKGroup.java:43324)

El número de línea es inútil porque este seguimiento de pila se ocultó con Proguard.

4
user1615898 22 feb. 2018 a las 17:04

2 respuestas

La mejor respuesta

Parece lambda dentro de un método, pero ...

javac no genera tales nombres (cerca de eso, pero no de eso). javac (incluso si esto nunca se especifica) los genera como

lambda$<method-name-where-used>$<incremental-number>

O si tienes algo como esto:

List<Integer> r = Stream.of(1).map(x -> x).collect(Collectors.toList());
lambda$new$<incremental-number> 

Observe que, en su caso, el nombre del método (access) es lo primero, por lo que se parece mucho a retro-lambda para android. IIRC generan código como este, que nuevamente no está especificado, pero lo que realmente significa que hay una expresión lambda en su método access, específicamente la 12ª lambda en ese método. Nuevamente, IIRC, retro-lambda usa la misma denominación incremental por método.

1
Eugene 22 feb. 2018 a las 20:23

En circunstancias normales, eso denotaría una lambda declarada en un método llamado access. Posiblemente la 12ª lambda del método ... aunque no lo juraría.

Tenga en cuenta que el número de línea se pierde debido a la ofuscación.

Bien, eso explica cómo obtuviste void [sic] como nombre de clase. Pero también significa que el nombre del método también podría ser falso.

Lo único que va a estar seguro de a qué se refiere esta línea es intentar aplicar ingeniería inversa a los códigos de bytes.

En este punto, le recomendaría que envíe el stacktrace al proveedor de este software y que lo ayude. Si no pueden o no quieren, solicite acceso al código fuente. Si no pueden o no quieren darle acceso, busque un nuevo producto. Depurar el código ofuscado de otra persona es una pesadilla.

3
Stephen C 22 feb. 2018 a las 14:14