1

我的應用程序依賴於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最常見的原因之一。

回答

1

問題是使用invalidateOptionsMenu()而不是supportInvalidateOptionsMenu()。