我的應用程序依賴於Android支持庫V7 AppCompat(支持存儲庫版本2)的操作欄。 Eclipse中的這個庫項目在其libs /目錄中包含Android支持庫V4(版本18)作爲依賴項。我的應用程序的項目文件夾不包含libs /中的支持庫,據推測依賴於AppCompat來導出它。在大多數情況下,我的導航抽屜代碼類似於standard example。使用ActionBarDrawerToggle與AppCompat和ActionBarActivity上薑餅
一切適用於Android 4+很好,但在Android 2個設備(包括薑餅模擬器和DROID 2),我得到的VerifyError當活動開始:
08-18 23:50:06.538: E/AndroidRuntime(6232): java.lang.VerifyError: com.myapp.activities.MainActivity$2
08-18 23:50:06.538: E/AndroidRuntime(6232): at com.myapp.activities.MainActivity.onCreate(MainActivity.java:76)
08-18 23:50:06.538: E/AndroidRuntime(6232): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
...
原來飛機墜毀當我調用ActionBarDrawerToggle的構造函數時發生。
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;
public class MainActivity extends ActionBarActivity {
private DrawerLayout drawerLayout;
private ActionBarDrawerToggle drawerToggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
drawerView = (ListView)findViewById(R.id.left_drawer);
drawerView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView parent, View view, int position, long id) {
selectItem(position);
}
});
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) {
public void onDrawerClosed(View view) {
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
invalidateOptionsMenu();
}
};
drawerLayout.setDrawerListener(drawerToggle);
...
}
請注意,先前調用DrawerLayout不會導致VerifyError。
ADT 22,目標17 API,API分7不使用Proguard的,我的project.properties很簡單:
target=android-17
android.library.reference.1=../libraries/appcompat
我有Android的私家藏書標記爲我的構建路徑中導出的條目(在這兩個項目和AppCompat庫項目),這似乎排除了與支持庫VerifyError最常見的原因之一。