【问题标题】:Getting java.lang.VerifyError on access of Singleton class Android Amazon Appstore在访问 Singleton 类 Android Amazon Appstore 时获取 java.lang.VerifyError
【发布时间】:2011-11-16 12:55:59
【问题描述】:

我为 Android 创建了一个应用程序,它在 android 市场上成功运行。现在我正试图让它在亚马逊应用商店上线,所以我将我的应用提交给亚马逊,他们开始审查它。一段时间后,他们说您的应用程序在 5 次中有 5 次在特定点崩溃。

这是崩溃报告:

11-16 17:47:49.460: E/AndroidRuntime(9627): FATAL EXCEPTION: main
11-16 17:47:49.460: E/AndroidRuntime(9627): java.lang.VerifyError: [package_name].manager.DestinationViewManger
11-16 17:47:49.460: E/AndroidRuntime(9627):  at [package_name].activity.SearchScreenActivity.performClickFunctionality(SearchScreenActivity.java)
11-16 17:47:49.460: E/AndroidRuntime(9627):  at [package_name].activity.SearchScreenActivity.access$0(SearchScreenActivity.java)
11-16 17:47:49.460: E/AndroidRuntime(9627):  at [package_name].activity.SearchScreenActivity$1.onClick(SearchScreenActivity.java)
11-16 17:47:49.460: E/AndroidRuntime(9627):  at android.view.View.performClick(View.java:2532)
11-16 17:47:49.460: E/AndroidRuntime(9627):  at android.view.View$PerformClick.run(View.java:9277)
11-16 17:47:49.460: E/AndroidRuntime(9627):  at android.os.Handler.handleCallback(Handler.java:587)
11-16 17:47:49.460: E/AndroidRuntime(9627):  at android.os.Handler.dispatchMessage(Handler.java:92)
11-16 17:47:49.460: E/AndroidRuntime(9627):  at android.os.Looper.loop(Looper.java:143)
11-16 17:47:49.460: E/AndroidRuntime(9627):  at android.app.ActivityThread.main(ActivityThread.java:4196)
11-16 17:47:49.460: E/AndroidRuntime(9627):  at java.lang.reflect.Method.invokeNative(Native Method)
11-16 17:47:49.460: E/AndroidRuntime(9627):  at java.lang.reflect.Method.invoke(Method.java:507)
11-16 17:47:49.460: E/AndroidRuntime(9627):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
11-16 17:47:49.460: E/AndroidRuntime(9627):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
11-16 17:47:49.460: E/AndroidRuntime(9627):  at dalvik.system.NativeStart.main(Native Method)
11-16 17:47:49.470: W/ActivityManager(1419):   Force finishing activity [package_name]/.activity.HomeScreenRepairActivity

从这个崩溃日志中,我确信 DestinationViewManger 类会出现问题并且无法解决该崩溃。

这是在DestinationViewManager 类中编写的代码:

public class DestinationViewManger {

    private static DestinationViewManger instance = null;
    private Boolean flag;

    private DestinationViewManger(){

    }

    public static DestinationViewManger getInstance() {
        if (instance == null) {
            instance = new DestinationViewManger();
        }
        return instance;
    }

    public Boolean getFlag() {
        return flag;
    }

    public void setFlag(Boolean flag) {
        this.flag = flag;
    }

}

请帮助我,我无法解决崩溃问题。任何帮助表示赞赏。

//已编辑 早些时候崩溃并没有结束,但最后我在 amazon-appstore 团队提供的二进制文件上发现了崩溃。实际上,在 amazon-appstore 上传 .apk 文件有 3 个步骤(我希望有人知道这一点)。 这些步骤是: (1) 然后上传未签名的二进制文件, (2) 从亚马逊下载处理后的二进制文件,然后, (3) 上传签名的二进制文件。

现在,当我在手机上安装已在 (3) 步骤中上传的已签名 .apk 文件时,它会崩溃。如果我签署我在 (1) 步骤中上传的二进制文件,那么它不会崩溃。这很疯狂,但它正在发生。

有人知道为什么会发生这种崩溃吗? 此崩溃是否是由于 amazon-appstore 对二进制文件的处理而发生的?

请帮帮我...

【问题讨论】:

    标签: android singleton amazon verifyerror amazon-appstore


    【解决方案1】:
    public class DestinationViewManger {
    
        private static final DestinationViewManger instance = new DestinationViewManger();
        public Boolean flag=false;
    
     // Private constructor prevents instantiation from other classes
        private DestinationViewManger(){   }
    
        public static DestinationViewManger getInstance() {
            return instance;
        } 
    }
    

    //尝试这个单例类一次。不需要getter和setter方法

    DestinationViewManger dstv;
    
    dstv=DestinationViewManger.getInstance();
    
    dstv.flag=true; //set the value for your flag
    
    boolean whatFlagboo=dstv.flag; //get your flag wherever you want
    

    【讨论】:

    • 感谢@Padma Kumar 的快速回复。但是在声明而不是在静态方法中调用构造函数有什么区别??
    • 其实我没有注意到你改变了flag的访问修饰符。是的,你是对的,我们不需要公共变量的 getter 和 setter。
    • 我想知道你在我的代码中解决了什么问题?
    • 注意 :-) 。我觉得你的单身课程没问题。我猜你的 HomeScreenRepairActivity 有问题。
    • DestinationViewManager 正在由 SearchScreenActivity 而不是由 HomeScreenRepairActivity 访问,因此它们不会是问题。
    【解决方案2】:

    我已经通过更改包名称来消除崩溃,但它对我有用。早些时候,包名是 [application_package_name].manager,我认为亚马逊人也在用相同的包名做一些事情。因此,当我只是随机做一些事情来消除崩溃并意外地将包名称从 manager 更改为 [application_package_name].searchmanager 并开始工作。我是yepeeee....

    【讨论】:

    • 我遇到了同样的问题,有一个名为 util 的包在 Amazon AppStore 上导致了 VerifyError,将其重命名为 utils,问题解决了!
    猜你喜欢
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 2014-03-03
    相关资源
    最近更新 更多