我如何理解这些错误?这就是所有与错误相关的log cat。所有其他消息都是GC类型的消息。
01-07 19:14:08.536: W/dalvikvm(5780): VFY: register2 v4-5 values 6,24
01-07 19:14:08.536: W/dalvikvm(5780): VFY: rejecting opcode 0xce at 0x004a
01-07 19:14:08.536: W/dalvikvm(5780): VFY: rejected Lnz/co/great_ape/headsup/sat_track/SGP4unit_sgp4;.sgp4 (Lnz/co/great_ape/headsup/sat_track/SGP4SatData;D[D[D)Z
01-07 19:14:08.536: W/dalvikvm(5780): Verifier rejected class Lnz/co/great_ape/headsup/sat_track/SGP4unit_sgp4;我知道代码,大约有400行sgp4 satellite tracking software (不是我的代码)。
当我创建这个类的一个实例(它是很长的400+行)时,这个问题就会被触发,我已经通过简单地注释掉所有代码,然后取消注释部分,直到错误返回,来跟踪到这段代码。
这里所有的变量都是双精度的。那么,为什么安卓拒绝使用像OP_DIV_DOUBLE和OP_DIV_DOUBLE_2ADDR这样的操作码呢?
无论如何,下面是代码的一部分。
/* -------------- update for short period periodics ------------ */
if(satrec.method == 'd')
{
cosisq = cosip * cosip;
satrec.con41 = 3.0 * cosisq - 1.0;
satrec.x1mth2 = 1.0 - cosisq;
satrec.x7thm1 = 7.0 * cosisq - 1.0;
}
mrt = rl * (1.0 - 1.5 * temp2 * betal * satrec.con41) +
0.5 * temp1 * satrec.x1mth2 * cos2u;
su = su - 0.25 * temp2 * satrec.x7thm1 * sin2u;
xnode = nodep + 1.5 * temp2 * cosip * sin2u;
xinc = xincp + 1.5 * temp2 * cosip * sinip * cos2u;
mvt = rdotl - nm * temp1 * satrec.x1mth2 * sin2u / xke;
rvdot = rvdotl + nm * temp1 * (satrec.x1mth2 * cos2u +
1.5 * satrec.con41) / xke;发布于 2013-01-08 12:11:34
好的。看起来代码本身从来没有任何问题,只是方法的长度和变量的数量。在方法之外声明它们解决了这个问题。
你可以在这里获得更多信息:
https://groups.google.com/forum/?fromgroups=#!topic/android-developers/lxiTkNzOvZY
https://stackoverflow.com/questions/14190692
复制相似问题