2013-05-13 3 views
0

Я получаю (от bugsense) отчетов о сбоях из моего приложения на Android версии ниже 3. Но App заявил в манифесте:Почему мое приложение устанавливает (предположительно) не поддерживаемые версии Android?

<uses-sdk 
    android:minSdkVersion="11" 
    android:targetSdkVersion="17" /> 

Таким образом, как только пользователь делает ход, приложение сбои.

Как это возможно? Я знал, что установка должна завершиться неудачей с сообщением об ошибке «отказ пакета». Должен ли я выполнить проверку версии Android в приложении? Или я пропущу что-то в манифесте?

пример:

0java.lang.NoSuchMethodError: xxx.xxx.xxx.MyActivity.getFragmentManager 
1at xxx.xxx.xxx.MyActivity.onCreate(MyActivity.java:98) 
2at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
3at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 
4at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
5at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
6at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
7at android.os.Handler.dispatchMessage(Handler.java:99) 
8at android.os.Looper.loop(Looper.java:123) 
9at android.app.ActivityThread.main(ActivityThread.java:3729) 
10at java.lang.reflect.Method.invokeNative(Native Method) 
11at java.lang.reflect.Method.invoke(Method.java:507) 
12at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:874) 
13at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:632) 
14at dalvik.system.NativeStart.main(Native Method) 

Спорим, я не SuchMethod в Android 2.3.3

Во всяком случае, общее количество ошибок только 3, на около 1k пользователей и 3,5k сеансов в день , на этой неделе. Поэтому подумайте об этом Q как о упражнении.

+0

Ну, у кого-то есть ваш код и он устанавливается через SDK, или кто-то загружает APK на устройствах со старыми версиями. Как выглядит отчет о сбое? – npace

+0

Это может быть так, потому что это открытый исходный код и, следовательно, код свободно доступен. Я редактирую вопрос, чтобы включить ошибку. – dentex

+1

В любом случае, мое приложение устанавливается только через боковое загрузку (и обновление в приложении);) – dentex

ответ

0

Если приложение установлено на устройстве, которое не соответствует указанному уровню API, оно будет сбой при выполнении кода, специфичном для определенного неподдерживаемого уровня API. Однако указание minSdkVersion должно помешать его вообще установить на устройстве, которое не соответствует этому уровню.

Однако, используя определение «uses-sdk» выше, было бы возможно, чтобы устройство, отвечающее минимальному требованию к SDK, запускало приложение, но позже сработало, когда вы использовали бы метод, специфичный для более высокого уровня целевой SDK (т. е. использование метода API уровня 17 на устройстве, которое удовлетворяет минимальному требованию уровня 11). Если бы это было так, вам пришлось бы использовать in-app проверки или аннотировать методы, используя @TargetApi или аналогичные. Однако, видя, как вы упоминаете, что вы получаете сбои от версий Android ниже минимального уровня SDK, что-то еще кажется неправильным.

Не пытайтесь быть забавным: но можете ли вы подтвердить, что все версии этого приложения (которые были доступны для общественности) включали в себя раздел «uses-sdk» -declaration, как описано в вашем сообщении? Возможно, произошла сбой старой версии приложения, и вы не читаете отчет об ошибке для новейшей доступной APK, а предыдущей версии ...

+0

То, что вы говорите в 1-ом абзаце, точно то, что я знал. Я могу подтвердить, что все версии всегда содержали выдержку из манифеста. – dentex

-2

Всякий раз, когда вы используете Android версии ниже 3. Вы должны использовать более низкую minSdkVersion до 8.

<uses-sdk android:minSdkVersion="8" 
    android:targetSdkVersion="17" /> 

Используйте это, он будет работать для всех Android версии устройств.

+0

Я не намерен поддерживать версии ниже 3. так что 11, как minSdkVersion, подходит для меня. У меня просто сбой из версий ниже 3. – dentex

Смежные вопросы