首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有方法签名的保护错误

带有方法签名的保护错误
EN

Stack Overflow用户
提问于 2011-02-12 19:15:40
回答 2查看 5.2K关注 0票数 2

当我试图制作我的Android应用程序时,我遇到了一个奇怪的错误。错误是:

代码语言:javascript
运行
复制
[proguard] Optimizing...  [proguard]
Unexpected error while evaluating
instruction:  [proguard]   Class      
= [net/domain/packagename/service/ExifEditor]
[proguard]   Method      =
[setGpsLocation(DDDJ)V]  [proguard]  
Instruction = [294] aload_3 v3 
[proguard]   Exception   =
[java.lang.IllegalArgumentException]
(Value is not a reference value
[proguard.evaluation.value.UnknownDoubleValue])
[proguard] Unexpected error while
performing partial evaluation: 
[proguard]   Class       =
[net/domain/packagename/service/ExifEditor]
[proguard]   Method      =
[setGpsLocation(DDDJ)V]  [proguard]  
Exception   =
[java.lang.IllegalArgumentException]
(Value is not a reference value
[proguard.evaluation.value.UnknownDoubleValue])

BUILD FAILED
D:\sdk\google\android-sdk-windows\tools\ant\main_rules.xml:430: java.lang.IllegalArgumentException:
Value is not a reference value
[proguard.evaluation.value.UnknownDoubleValue]
        at proguard.evaluation.value.Value.referenceValue(Value.java:97)
        at proguard.evaluation.Variables.aload(Variables.java:264)
        at proguard.evaluation.Processor.visitVariableInstruction(Processor.java:677)
        at proguard.classfile.instruction.VariableInstruction.accept(VariableInstruction.java:306)
        at proguard.optimize.evaluation.PartialEvaluator.evaluateSingleInstructionBlock(PartialEvaluator.java:729)
        at proguard.optimize.evaluation.PartialEvaluator.evaluateInstructionBlock(PartialEvaluator.java:560)
        at proguard.optimize.evaluation.PartialEvaluator.evaluateInstructionBlockAndExceptionHandlers(PartialEvaluator.java:533)
...and so on...

方法"setGpsLocation“具有以下签名:

代码语言:javascript
运行
复制
public void setGpsLocation(double longitude, double latitude, double altitude, long gpsTime) throws IOException

最后,通过将方法更改为:

代码语言:javascript
运行
复制
public void setGpsLocation(Location location)

错误就消失了。虽然这让我通过了它,但我不明白第一个方法签名有什么问题。我的proguard.cfg有-optimizationpasses 2,如果我将这个值增加到3或更多,我就会发现与其他代码区域类似的错误。如果我使用3,会发生什么:

代码语言:javascript
运行
复制
[proguard] Optimizing...   [proguard]
Unexpected error while evaluating
instruction:   [proguard]   Class     
= [org/apache/commons/fileupload/util/Streams]
[proguard]   Method      =
[copy(Ljava/io/InputStream;Ljava/io/OutputStream;Z[B)J]
[proguard]   Instruction = [75]
aload_2 v2   [proguard]   Exception  
= [java.lang.IllegalArgumentException] (Value is not a reference value
[proguard.evaluation.value.UnknownIntegerValue])
[proguard] Unexpected error while
performing partial evaluation: 
[proguard]   Class       =
[org/apache/commons/fileupload/util/Streams]
[proguard]   Method      =
[copy(Ljava/io/InputStream;Ljava/io/OutputStream;Z[B)J]
[proguard]   Exception   =
[java.lang.IllegalArgumentException]
(Value is not a reference value
[proguard.evaluation.value.UnknownIntegerValue])

我很难找到这个错误意味着什么的信息。

还有其他人见过类似的东西吗?

更新

当更改签名似乎解决了这个问题时,我遇到了运行时崩溃:

代码语言:javascript
运行
复制
I/dalvikvm(30523): Could not find method a.b.a.b.d.b, referenced from method a.b.a.b.d.a
W/dalvikvm(30523): VFY: unable to resolve direct method 440: La/b/a/b/d;.b (Ljava/lang/String;[BII)La/b/a/b/a;
D/dalvikvm(30523): VFY: replacing opcode 0x70 at 0x0039
D/dalvikvm(30523): VFY: dead code 0x003c-0041 in La/b/a/b/d;.a (Ljava/lang/String;[BII)[La/b/a/b/a;
W/dalvikvm(30523): VFY: 'this' arg 'Ljava/lang/Object;' not instance of 'Ljava/io/InputStream;'
W/dalvikvm(30523): VFY:  rejecting opcode 0x6e at 0x0045
W/dalvikvm(30523): VFY:  rejected La/b/a/a/a/b;.a (La/b/a/b/a/a;La/b/a/a;)La/b/a/a/a/c;
W/dalvikvm(30523): Verifier rejected class La/b/a/a/a/b;
W/dalvikvm(30523): threadid=10: thread exiting with uncaught exception (group=0x400259f8)

我开始阅读更多的Proguard手册,通过添加-dontoptimize,构建时错误和运行时崩溃就消失了。某种程度上违背了使用Proguard的目的,不是吗?

-Kevin

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-13 12:12:23

该错误表明ProGuard的优化步骤中存在一个错误。您应该确保使用的是最新版本(ProGuard 4.5.1或4.6beta3)。如果问题仍然存在,您应该在ProGuard bug跟踪器中提交一个bug报告,并提供一个允许重现问题的小示例项目。

票数 3
EN

Stack Overflow用户

发布于 2011-02-12 19:47:16

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4980047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档