Мое приложение зависит от библиотеки поддержки 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 в библиотеке поддержки.