1

Мое приложение зависит от библиотеки поддержки Android V7 AppCompat (поддержка репозитория версии 2) для панели действий. Этот проект библиотеки в Eclipse включает в себя библиотеку поддержки Android V4 (версия 18) в качестве зависимости в каталоге libs /. Папка проекта моего приложения не содержит библиотеки поддержки в libs /, предположительно полагаясь на AppCompat для экспорта. По большей части мой код ящика навигации напоминает standard example.VerifyError при использовании ActionBarDrawerToggle с AppCompat и ActionBarActivity на Gingerbread

Все отлично работает на Android 4+, но на Android 2 устройства (как Gingerbread эмулятор и 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, целевой API 17, мин API 7. Не используя Proguard, мои project.properties просто:

target=android-17 
android.library.reference.1=../libraries/appcompat 

У меня есть Android Частные библиотеки помечаются как экспортированной записи на моем пути сборки (в как проект, так и проект библиотеки AppCompat), который, как представляется, исключает одну из наиболее распространенных причин VerifyError в библиотеке поддержки.

ответ

1

Проблема заключалась в использовании invalidateOptionsMenu() вместо поддержкиInvalidateOptionsMenu().