我如何理解这些错误?这是与错误相关的所有日志猫。所有其他都是 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 多行)时触发了这个问题,我通过简单地注释掉所有代码,然后取消注释部分直到错误返回,将问题跟踪到这部分代码,
这里的所有变量都是双精度数。那么,为什么 android 会拒绝使用 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;