我建立了minSDK 8和targetSDK 11java.lang.VerifyError的2.2.2而不是2.3.3
<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.2.2,一個運行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()將這些多個靜態數組連接成一個。
我試過將minSDK級別降到7,但問題是一樣的。
它在運行2.2.2的模擬器中也失敗。
看來,Android 2.2沒有一些方法。如果您可以爲2.2編寫解決方法 - 您可以檢查版本並運行不同的方法。 – vorrtex
@vorrtex但是項目SDK被設置爲8.任何缺少的方法都會導致編譯時錯誤嗎?我也已經將SDK下降到了7,並且仍然崩潰。 – Simon
arrayCopy方法應該適用於任何API。嘗試找到'init'方法的哪一行失敗。檢查所有線路是否有效,然後取消註釋某些線路並再次檢查,經過幾次迭代後,您會發現錯誤的線路。 – vorrtex