Android - java.lang.VerifyError в SDK 2.2 - PullRequest
2 голосов
/ 30 июля 2011

Я недавно запустил свое приложение в Маркет, и я связался с пользователем, который сообщает, что когда он запускает мое приложение, оно отображает диалоговое окно Force Close / Report.Я попросил пользователя сообщить об ошибке, чтобы я мог видеть в стеке след того, что происходит, и я получаю java.lang.VerifyError.

Из того, что я прочитал, это как-то связано свнешняя библиотека или несовместимость некоторых методов в java.lang с целевой версией Android SDK.

Пользователь работает на Android 2.2.1, но в настоящее время приложение работает на многих других устройствах 2.2, поэтому япытаясь выяснить, с чего начать копать.

Вопрос: У кого-нибудь есть предложения относительно того, что было бы лучше всего начать изучать, чтобы найти проблему?Я могу предоставить код или дополнительную информацию, если необходимо, поэтому, пожалуйста, дайте мне знать.

Вот трассировка стека :

java.lang.VerifyError: com.app.myapp.MainActivity
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1429)
at android.app.Instrumentation.newActivity(Instrumentation.java:1034)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2749)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2866)
at android.app.ActivityThread.access$2300(ActivityThread.java:140)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2181)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:5097)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)

Заранее спасибо!

EDIT Добавлено по запросу Константина

MainActivity.java

package com.app.myapp;

//Imports removed

public class MainActivity extends BaseActivity implements Runnable {

private LayoutInflater mInflater;
private SharedPreferences prefs;
private SharedPreferences.Editor prefsEditor;

    ....

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    loadActivity(savedInstanceState);
}

private void loadActivity(Bundle savedInstanceState) {
    setContentView(R.layout.mainlayout);

    ActionBar actionBar = (ActionBar)findViewById(R.id.actionbar);
    actionBar.setTitle("My App");
    actionBar.setHomeAction(new IntentAction(this, null, R.drawable.ic_actionbar_home));
    actionBar.addAction(new SearchAction(this, R.drawable.ic_actionbar_search));

    weatherThread = new Thread(this);
    try {
        ....Unrelated Code....

        //****HERE WAS THE PROBLEM****//
        Gson gson = new Gson();

        ....More Unrelated Code....
    } catch (JsonSyntaxException ex) { }

    initMembers();
    initControls();

    if (savedInstanceState != null) {
        mSelectedLayout = savedInstanceState.getInt("CURRENT_TAB");
        setCurrentTab();
    }
    else
        loadMainLayout();
}

    ....Other unrelated code....

}

Ответы [ 4 ]

9 голосов
/ 13 августа 2011

Есть несколько устройств, которые используют GSON для внутреннего использования, но сделали библиотеку общедоступной, что вызывает конфликт пространства имен, когда приложение пытается ссылаться на свою упакованную версию gson. Возможный обходной путь - изменение пространства имен gson jar, который вы включили, используя jarjar.

Вот ветка о проблеме - Эта ветка содержит описание как минимум одного обходного пути, предоставленного другим разработчиком, который столкнулся с той же проблемой.

2 голосов
/ 12 августа 2011

может быть несовпадение с библиотеками, такими как Gson, которые вы скомпилировали, и библиотеками, которые используются во время выполнения.

Ссылка - Причины получения java.lang.VerifyError

1 голос
/ 01 августа 2011

Похоже, ActionBar был выпущен начиная с уровня API 11, в то время как android 2.2 несколько старше (уровень API 8). Так что попробуйте без панели действий. Я не знаю, было ли представление перенесено на платформу 2.2, но даже если это так, у вашего пользователя все еще может быть старая версия 2.2 ..

0 голосов
/ 10 августа 2011

Убедитесь, что вы компилируете против правильной версии Android SDK.Что такое minSDK в вашем AndroidManifest.xml?

...