Приложение для Android, не запущенное на более поздней версии

#java #android #dalvik

#java #Android #dalvik

Вопрос:

Приложение работает нормально в эмуляторе (5.1) и на моем телефоне (4.1.2), но при открытии оно вылетает с сообщением «к сожалению, приложение остановлено» в bluestacks (4.4.2) и на реальных телефонах выше 4.1

Я получаю эту ошибку ниже при запуске в Bluestacks. Пытался изменить версию minsdk и параметры appcompact.

     10-21 22:27:22.551 12147-12147/player.kri.com.saranplayer I/dalvikvm: Could not find method android.content.Context.getSystemService, referenced from method com.androidhive.musicplayer.MusicPlayerMainActivity.access$super
10-21 22:27:22.551 12147-12147/player.kri.com.saranplayer W/dalvikvm: VFY: unable to resolve virtual method 524: Landroid/content/Context;.getSystemService (Ljava/lang/Class;)Ljava/lang/Object;
10-21 22:27:22.551 12147-12147/player.kri.com.saranplayer D/dalvikvm: VFY: replacing opcode 0x6f at 0x004b
10-21 22:27:22.551 12147-12147/player.kri.com.saranplayer I/dalvikvm: Could not find method android.app.Activity.stopLockTask, referenced from method com.androidhive.musicplayer.MusicPlayerMainActivity.access$super
10-21 22:27:22.551 12147-12147/player.kri.com.saranplayer W/dalvikvm: VFY: unable to resolve virtual method 279: Landroid/app/Activity;.stopLockTask ()V
10-21 22:27:22.551 12147-12147/player.kri.com.saranplayer D/dalvikvm: VFY: replacing opcode 0x6f at 0x00b9
10-21 22:27:22.551 12147-12147/player.kri.com.saranplayer I/dalvikvm: Could not find method android.app.Activity.isInMultiWindowMode, referenced from method com.androidhive.musicplayer.MusicPlayerMainActivity.access$super
10-21 22:27:22.551 12147-12147/player.kri.com.saranplayer W/dalvikvm: VFY: unable to resolve virtual method 102: Landroid/app/Activity;.isInMultiWindowMode ()Z
10-21 22:27:22.551 12147-12147/player.kri.com.saranplayer D/dalvikvm: VFY: replacing opcode 0x6f at 0x00eb
10-21 22:27:22.551 12147-12147/player.kri.com.saranplayer E/dalvikvm: Could not find class 'android.os.PersistableBundle', referenced from method com.androidhive.musicplayer.MusicPlayerMainActivity.access$super
10-21 22:27:22.551 12147-12147/player.kri.com.saranplayer W/dalvikvm: VFY: unable to resolve check-cast 234 (Landroid/os/PersistableBundle;) in Lcom/androidhive/musicplayer/MusicPlayerMainActivity;
10-21 22:27:22.551 12147-12147/player.kri.com.saranplayer D/dalvikvm: VFY: replacing opcode 0x1f at 0x00fc
10-21 22:27:22.551 12147-12147/player.kri.com.saranplayer I/dalvikvm: Could not find method android.content.Context.getColorStateList, referenced from method com.androidhive.musicplayer.MusicPlayerMainActivity.access$super
10-21 22:27:22.551 12147-12147/player.kri.com.saranplayer W/dalvikvm: VFY: unable to resolve virtual method 505: Landroid/content/Context;.getColorStateList (I)Landroid/content/res/ColorStateList;
10-21 22:27:22.551 12147-12147/player.kri.com.saranplayer D/dalvikvm: VFY: replacing opcode 0x6f at 0x010c
10-21 22:27:22.551 12147-12147/player.kri.com.saranplayer I/dalvikvm: Could not find method android.app.Activity.onVisibleBehindCanceled, referenced from method com.androidhive.musicplayer.MusicPlayerMainActivity.access$super
10-21 22:27:22.551 12147-12147/player.kri.com.saranplayer W/dalvikvm: VFY: unable to resolve virtual method 193: Landroid/app/Activity;.onVisibleBehindCanceled ()V
10-21 22:27:22.551 12147-12147/player.kri.com.saranplayer D/dalvikvm: VFY: replacing opcode 0x6f at 0x011c
10-21 22:27:22.551 12147-12147/player.kri.com.saranplayer I/dalvikvm: Could not find method android.content.ContextWrapper.deleteSharedPreferences, referenced from method com.androidhive.musicplayer.MusicPlayerMainActivity.access$super
  

Действительно ценю вашу помощь.

Комментарии:

1. Пожалуйста, опубликуйте код, в котором ваше приложение закрывается, это упростило бы решение проблемы.

2. оно просто закрывается при открытии. в logcat нет исключений

3. пожалуйста, проверьте метод onCreate вашего MusicPlayerMainActivity класса, проверьте, где super вызывается, это должна быть первая строка непосредственно в этом методе

4. да, это первая строка

5. какую минимальную версию sdk поддерживает ваше приложение? Кроме того, если вы используете код с какого-либо веб-сайта, пожалуйста, укажите его URL, чтобы я мог его проверить

Ответ №1:

по словам инженеров Google Android, это нормально.

Обратитесь к https://code.google.com/p/android/issues/detail?id=198567

Это происходит, когда вы компилируете с более высоким уровнем api, чем уровень API развернутого устройства. Журналы указывают на то, что некоторые методы недоступны, и виртуальная машина собирается заменить их альтернативной реализацией.

Это просто означает, что у вас есть ссылка на метод, который недоступен на той платформе, на которой в данный момент выполняется ваш код.

Чтобы решить вашу проблему, напишите runtime switch:

 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    // You can use here an API which was added in Lollipop.
}
  

Комментарии:

1. да, я уже пробовал эту ссылку. Я компилирую с использованием версии 24, но как это могло не сработать в эмуляторе и на моем устройстве (4.1.2). Пожалуйста, помогите