堆栈很复杂,涉及到lambda(注意由于遮蔽而丢失了行号)。 “访问$ lambda $ 12”实际上是什么意思,有没有办法在不知道实际行号的情况下在代码中找到它?
at com.group.RKGroup.com.my.MyClass access$lambda$12(com.group.RKGroup,int,com.my.PType) (RKGroup.java:43324)
行号没用,因为这个堆栈跟踪被Proguard阻止了。
答案 0 :(得分:3)
在正常情况下,这表示在名为void
的方法中声明的lambda。可能是方法中的第12个lambda ......虽然我不会发誓。
请注意,由于混淆,行号会丢失。
好的,这解释了你如何将<api context="/foreach" name="foreach" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="GET">
<inSequence>
<payloadFactory media-type="json">
<format>[
{"id": "1",
"type": "object",
"name": "first",
"bounds":"[[-0.256,51.531],[-0.102,51.656]]",
"displayName": "first record"},
{"id": "2",
"type": "object",
"name": "second",
"bounds":"[[-0.256,51.531],[-0.102,51.656]]",
"displayName": "second record"},
{"id": "4",
"type": "object",
"name": "tercero",
"bounds":"[[-0.256,51.531],[-0.102,51.656]]",
"displayName": "tercer record"}
]
</format>
<args/>
</payloadFactory>
<log level="full">
</log>
<foreach expression="//jsonArray/jsonElement">
<sequence>
<payloadFactory media-type="xml">
<format>
<result xmlns="">
<name>$1</name>
<bounds>$2</bounds>
</result>
</format>
<args>
<arg evaluator="json" expression="$.displayName"/>
<arg evaluator="json" expression="$.bounds"/>
</args>
</payloadFactory>
</sequence>
</foreach>
<property name="messageType" scope="axis2" type="STRING" value="application/json"/>
<log level="full"/>
<respond/>
</inSequence>
<outSequence>
<send/>
</outSequence>
<faultSequence/>
</resource>
</api>
[sic]作为一个班级名称。但这也意味着方法名称也可能是假的。
唯一可以确定此行所指的是尝试对字节码进行反向工程。
此时,我建议您将堆栈跟踪发送给此软件的供应商,并让他们帮助您。如果他们不能或不会,请求访问源代码。如果他们不能或不会给您访问权限,请寻找新产品。调试别人的混淆代码是一场噩梦。
答案 1 :(得分:1)
在方法中看起来像lambda
但是......
javac
不生成这样的名称(接近于此,但不是那样)。 javac
(即使从未指定过)将其生成为
lambda$<method-name-where-used>$<incremental-number>
或者如果你有这样的东西:
List<Integer> r = Stream.of(1).map(x -> x).collect(Collectors.toList());
lambda$new$<incremental-number>
请注意,在您的情况下,方法名称(access
)首先出现,因此这与retro-lambda
的{{1}}非常相似。 IIRC他们生成这样的代码,这又是未指定的,但它真正意味着你的android
方法中有一个lambda表达式,特别是该方法中的第12个lambda。同样,IIRC,retro-lambda使用相同的增量方法命名。