如何在不访问硬件的情况下使用Android应用程序调试看似与硬件有关的问题?

我在Android市场上有一个开源应用程序.对于我来说,它似乎运行良好(安装了1000多个活动安装,我必须假定它对大多数人都有效).

我最近收到一个bug report,表明三星手机上的至少三个用户(Intercept和Captivate)有问题.我无法在ADP2和仿真器上重现该问题.

为了获得足够的数据来诊断问题,我首先尝试添加日志,然后要求用户通过Log Collector提交日志.每次用户尝试发送日志(尝试四次)时,日志都被截断,我做了无法获得任何有用的数据.

然后,我在项目中添加了ACRA,以获取信息,但是我似乎无法自动检测该错误以发送报告.

由于我没有三星手机,也无法在可以与调试器连接的任何设备上重现它,因此我几乎没有想法.我剩下的唯一想法是向UI添加一个按钮以生成报告.

还有其他建议的方法吗?

更新:由于人们要求提供更多细节:本质上,该应用程序从资产中读取文本文件,并将它们(经过一些预处理)放入ScrollView中的TextView中. (将数据逐步地添加到SpannableStringBuffer,然后将其传递到TextView的setText()函数.)根据选择的选项,显示的文本在15k-115k之间.在出现此问题的电话上,仅显示部分文本.截止点取决于选项,但似乎介于17k-18k之间.

ACRA会针对所有未捕获的异常发送报告,并将其放入Google表单/电子表格.我已经从仿真器和手机中获得了报告,因此我知道这样做的目的. (实际上,我经常发现从该报告中的堆栈跟踪进行调试比将调试器附加到进程要快.)

电话规格:我已经在运行1.5、1.6、2.1和2.2的模拟器上锻炼了该应用程序.我的手机是ADP2(MyTouch的开发版本),但是我安装了third-party ROM以跳到Froyo(2.2).我没有意识到专门针对Samsung OS构建的仿真器,尽管这在这里很有用.

由于预期的文本长度是恒定的,因此我应该能够检测到是否正确读取了该文本.我在文本处理结束时添加了检查,但是这些检查从未触发,这表明问题不在于读取文件.然后,我尝试将检查添加到onPostCreate和onPostResume,但这些检查均未失败.不过,似乎UI线程当时尚未实际运行.

现在,我已经完成了错误跟踪器中附加到该错误的6个私有APK版本.坦率地说,我感到惊讶的是任何用户仍在尝试使用它们.此最新版本具有一个按钮,用于强制执行错误报告-仅在UI线程布置好屏幕后才会调用.希望这将给我足够的可变信息,以使我朝正确的方向发展.

解决方法:

我们需要更多地了解问题的性质.这是崩溃吗?看起来不对吗?等等.

如果是崩溃,则可以添加一个崩溃处理程序(Thread.setUncaughtExceptionHandler,IIRC)并创建一个格式更好的日志,可以选择将其发送给您.

另外,请尝试收集有关手机规格(操作系统,分辨率等)的信息,然后在调试器中对其进行复制.那些三星手机具有Android 2.1-您的Nexus可能具有2.2?您是否尝试将模拟器设置为使用2.1?

每当遇到这些问题时,我都会礼貌地问那些写信给我的人,他们是否有兴趣帮助我-通常有几个人渴望志愿服务.我给他们发送了一个带有特殊测试版本的APK文件,该文件具有其他调试输出,这有助于我缩小问题范围.

上一篇:MySQL输入PHP给出的另一个值


下一篇:python-Android.mk调试输出