デバッグ用のapkだときちんと動くのにちゃんと署名すると動かない何かができてたみたいです。
コード的には↓こんなん。
public void init(){
class dist {
public float distance(View v, MotionEvent event) {
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
float size = FloatMath.sqrt(x * x + y * y);
return size;
}
}
if ( Integer.parseInt(android.os.Build.VERSION.SDK) >= 7)
float size = new dist().distance(v, event);
}
}
MotionEvent.getX(int) が1.6だと使えないAPIです。
なにがだめなんだ・・・おしえて・・エロイ人・・・
プロガード先生がdist.distance()を展開してくれたんじゃないかなあとか考えてますが・・・
バージョンごちゃまぜなAndroidプログラミングの難しさを感じてしまいました・・
修正版では
public float distance(View v, MotionEvent event) {
try {
Method getX ;
Method getY ;
Class<?> sgManager = Class.forName("android.view.MotionEvent");
Class<?> paramstype[] = { int.class };
getX = sgManager.getMethod("getX", paramstype);
getY = sgManager.getMethod("getY", paramstype);
float x = (Float)getX.invoke(event, 0) - (Float)getX.invoke(event, 1);
float y = (Float)getY.invoke(event, 0) - (Float)getY.invoke(event, 1);
float size = FloatMath.sqrt(x * x + y * y);
return size;
} catch (Exception o) {
Log.d("AyaComicViewer", "getXY(I) failed");
return 0;
}
}
こういうやっていいのか悪いのか微妙な感じになっています。
これなら展開されてもエラーにならないし、万が一マルチタッチ非対応のOSで
このコードを通ってしまってもExceptionで捕まえられます。。
いいのかこれ・・・
というか、上位バージョンの対応するたびにこれなのか・・
どうなんだ・・・
PR