問題は、stackoverflowに関する以前の質問(http://stackoverflow.com/questions/14190692/how-to-debug-dalvikvm-rejecting-opcode)と非常によく似ていました。
Androidは多くのローカル変数を処理できないため、メソッドの外部でそれらを定義することが解決策です。私の前の質問では、dalvikvmはメソッドを拒否していました。この場合、それは異なっていました、このコードはここにあります:
ss = 78.0 / radiusearthkm + 1.0;
radiuseathkmがデバッガーで数行前に設定されていたときにssを1.0に設定していましたが、値は6378.135であるはずのときに0.0であるため、ssは1.0122292801892716になります。その後、そのエラーは次の数百の計算に伝播し、問題が発生します。
だから私はこれを変更しました:
public static boolean sgp4init(
Gravconsttype whichconst, char opsmode, final int satn, final double epoch,
final double xbstar, final double xecco, final double xargpo,
final double xinclo, final double xmo, final double xno,
final double xnodeo, SGP4SatData satrec)
{
/* --------------------- local variables ------------------------ */
double ao, ainv, con42, cosio, sinio, cosio2, eccsq,
omeosq, posq, rp, rteosq,
cnodm, snodm, cosim, sinim, cosomm, sinomm, cc1sq,
cc2, cc3, coef, coef1, cosio4, day, dndt,
em, emsq, eeta, etasq, gam, argpm, nodem,
inclm, mm, nm, perige, pinvsq, psisq, qzms24,
rtemsq, s1, s2, s3, s4, s5, s6,
s7, sfour, ss1, ss2, ss3, ss4, ss5,
ss6, ss7, sz1, sz2, sz3, sz11, sz12,
sz13, sz21, sz22, sz23, sz31, sz32, sz33,
tc, temp, temp1, temp2, temp3, tsi, xpidot,
xhdot1, z1, z2, z3, z11, z12, z13,
z21, z22, z23, z31, z32, z33,
qzms2t, ss, j2, j3oj2, j4, x2o3, //r[3], v[3],
tumin, mu, radiusearthkm, xke, j3;
double[] r = new double[3];
double[] v = new double[3];
これに:
static double radiusearthkm, ao, ainv, con42, cosio, sinio, cosio2, eccsq,
omeosq, posq, rp, rteosq,
cnodm, snodm, cosim, sinim, cosomm, sinomm, cc1sq,
cc2, cc3, coef, coef1, cosio4, day, dndt,
em, emsq, eeta, etasq, gam, argpm, nodem,
inclm, mm, nm, perige, pinvsq, psisq, qzms24,
rtemsq, s1, s2, s3, s4, s5, s6,
s7, sfour, ss1, ss2, ss3, ss4, ss5,
ss6, ss7, sz1, sz2, sz3, sz11, sz12,
sz13, sz21, sz22, sz23, sz31, sz32, sz33,
tc, temp, temp1, temp2, temp3, tsi, xpidot,
xhdot1, z1, z2, z3, z11, z12, z13,
z21, z22, z23, z31, z32, z33,
qzms2t, ss, j2, j3oj2, j4, x2o3, //r[3], v[3],
tumin, mu, xke, j3;
public static boolean sgp4init(
SGP4unit_a.Gravconsttype whichconst, char opsmode, final int satn, final double epoch,
final double xbstar, final double xecco, final double xargpo,
final double xinclo, final double xmo, final double xno,
final double xnodeo, SGP4SatData satrec)
{
double[] r = new double[3];
double[] v = new double[3];
そして、すべてが正しく機能しています。