minSDK 8 と targetSDK 11 用にビルドしています。
<uses-sdk android:minSdkVersion="8"
android:targetSdkVersion="11"/>
私はlogcatでこれを取得します:
WARN/dalvikvm(2114): VFY: rejected Lcom/examplecompany/project/TidalStreams/Data/gTidalStreamsHourlyHW;.<clinit> ()V
WARN/dalvikvm(2114): Verifier rejected class Lcom/digitaliridium/tides/TidalStreams/Data/gTidalStreamsHourlyHW;
他のいくつかのデバイスの中でも、2 つの欲望があります。1 つは 2.2.2 を実行しており、もう 1 つは 2.3.3 を実行しています。
2.2.2 では、次のjava.lang.VerifyError
行を取得します。
public void onCreate(){
...
gTidalStreamsHourlyHW.init();
...
}
その方法がこちらinit()
。これはごく普通のクラスの唯一のメソッドです。
public static void init(){
int insertPosition;
System.arraycopy(gTidalStreamHourlyHW1, 0, gTidalStreamHourlyHW, 0, gTidalStreamHourlyHW1.length);
insertPosition = gTidalStreamHourlyHW1.length;
System.arraycopy(gTidalStreamsHourlyHW2.gTidalStreamHourlyHW1, 0, gTidalStreamHourlyHW, insertPosition, gTidalStreamsHourlyHW2.gTidalStreamHourlyHW1.length);
insertPosition += gTidalStreamsHourlyHW2.gTidalStreamHourlyHW1.length;
System.arraycopy(gTidalStreamsHourlyHW3.gTidalStreamHourlyHW1, 0, gTidalStreamHourlyHW, insertPosition, gTidalStreamsHourlyHW3.gTidalStreamHourlyHW1.length);
...
gTidalStreamsHourlyHW
約 350k の大規模なデータ配列です。Java の 64k コンパイル単位制限を回避するために、複数のファイルに分割する必要がありました。
このinit
メソッドは単に System.arraycopy() を使用して、これらの複数の静的配列を 1 つに連結します。
minSDK レベルを 7 に下げてみましたが、問題は同じです。
2.2.2 を実行しているエミュレータでも失敗します。