移动测试技术问答Q&A

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 1. INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES由于APP签名冲突造成。如果设备上已经安装了其他签名的相同包名APP,再安装其他签名的就会报出此类错误。

1. INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES

由于APP签名冲突造成。如果设备上已经安装了其他签名的相同包名APP,再安装其他签名的就会报出此类错误。

解决方法:a. 更换签名文件,重新签名 b. 更改应用的包名,避免冲突。

2. INSTALL_FAILED_DEXOPT

方法数超标所导致。dx打包时限制了单个dx文件的最大方法数为65535。同时Dalvik VM限制内存中加载的方法数(方法,类定义及构造函数)不能超过65535个。

解决方法:a. 检查代码,删出无用jar包和代码,尤其是自动生成的get/set,没用的类。b. 将部分java代码封装到JNI中。

3. INSTALL_PARSE_FAILED_NO_CERTIFICATES

应用中没有签名信息。

解决方法:使用Eclipse或者Android Studio对项目重新编译打包。

4. INSTALL_FAILED_MEDIA_UNAVAILABLE

Android应用安装位置不可用。应用安装位置有两个:ROM、sdcard。如果严格指定安装到sdcard,但是设备没有sdcard时,就会报此类错误。

解决方法:AndroidManifest.xml中配置:

5. INSTALL_FAILED_OLDER_SDK

设备系统版本比应用的最低支持的系统版本低。

解决方法:AndoidManifest.xml中将系统版本降低。

6. INSTALL_FAILED_VERSION_DOWNGRADE

设备中已经安装了此APP的更高版本,无法降级安装。

解决方法:先卸载之前的版本,再安装此版本。

7. INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION

安装APP时,Android系统会对APP先进行解析。解析过程出错,就会报出此类错误,可能得原因很多。

解决方法:检查AndroidManifest.xml各项配置是否符合规范。比如sdkVersion不能用string等等。

8. INSTALL_FAILED_UID_CHANGED

应用在上次卸载时,由于应用中的native程序未被杀死而占用/data/data/{packageName}目录,导致/data/data/目录下的APP相关内容未被删除,多数情况下能在logcat中找到报错:Installer: rm -rf failed, directory is not empty。再次安装时无法覆盖,导致报出此类问题。

解决方法:如果设备Root了,则直接删除/data/data/目录下的应用包名文件夹;如果没有root,需要将手机恢复出厂设置。此外,开发者要额外注意容易出现此类问题的手机,对此类设备的用户给出提示。用户无需操心,阿里移动测试平台会帮助解决。

9. INSTALL_FAILED_NO_MATCHING_ABIS

当安装的APP包含native libraries(一般是so文件)的时候,如果没有对应机器CPU架构的库文件,就会出现这种问题。比如,你编译了一个armv7平台的APP,但是想要装在intel 架构的设备上,就会出现这个错误。

解决方法:在编译APP时,先用NDK编译出相应的CPU架构的库文件。

10. INSTALL_FAILED_CANCELLED_BY_USER

部分机型在使用adb命令安装应用时,设备会弹窗询问用户是否允许安装,假如一段时间内(一般是30s),没有点击确认弹窗,那么此类设备会阻止安装,并提示用户:INSTALL_FAILED_CANCELLED_BY_USER

解决方法:联系MQC工作人员,旺旺群:335334143;QQ群:492028798

11. INSTALL_FAILED_VERICATION_TIMEOUT

原因及解决方法同:INSTALLED_FAILED_CANCELLED_BY_USER

12. OutOfMemory问题(OOM)解决方法

每个Android应用都有一个最大内存上限。超过这个上限,就会导致内存不足(OutOfMemory)。检查内存上限的方法:
int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);  
Log.d("TAG", "Max memory is " + maxMemory + "KB");  

通常情况下,出现OOM,是由于应用中加载了大量的图片导致。鉴于此,有以下几种方式来减小应用对内存的使用:

  1. 合理压缩展示图片,比如一个100x100的控件里,如果加载一个1024x768的图片,不会让图片的展示效果更好,反而会增加OOM的风险。所以,合理的对图片进行压缩非常重要。
  2. 压缩完图片,但是应用里包含了太多的图,这种情况依然可能出现OOM。这种情况下,考虑使用内存缓存技术。根据每一屏要展示的图片数量,以及每个图片的大小,设定一个合理的缓存值,一般情况下不要超过1/8的最大内存值。如果图片不在显示区域,可以考虑将其进行回收,系统的垃圾回收器(GC)会认为这些内存不在被使用,从而对图片进行GC操作。这样会大大降低OOM的风险。
  3. 更多的OOM讨论,参见:http://blog.csdn.net/vshuang/article/details/39647167

13. iOS应用(ipa)安装失败可能的原因和解决方法

每个ipa包本质上是一个zip包,里面包含ios应用的资源和可执行文件。

  1. 如果提示“应用重签名失败”,很可能的原因是ipa是直接从itunes市场下载的正式发布包,这样的包经过苹果的加密,无法安装到任何没有购买过这个应用的用户手机上面。
  2. 如果部分的手机安装失败,请检查一下你的应用支持的最低ios SDK的版本(可以很直观的从包里面的Info.plist看到)。比如最低支持ios8.3,则ios8.2版本的手机就装不上这个应用。

14. 启动失败如何进行Debug?

很多同学遇到启动失败的问题,很难进行debug,不知道该如何入手。启动失败其实也可以找到错误栈信息,并且通过这个错误栈信息,定位到具体的问题原因。如下图:

ed57342015f8838445b184e4968c998e

这里,我们可以看到启动失败的进程pid:26981。然后,我们需要下载日志,这里的日志就是详细的logcat日志。

下载之后,我们需要通过这个PID找到真正引起crash的错误栈。这里建议,使用支持正则匹配的编辑器打开logcat日志(比如nodepad++、vim等等),打开之后,使用正则规则:“26981. E .” 进行匹配查找。可以找到如下信息:

7c0b99279866541efc5c3a97a1d20914

这样我们就能知道具体那行代码导致的错误了。

15. 常见崩溃问题,NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference**

该问题一般是由于资源加载时,引用初始化未完全的Context对象导致。

解决方法:通过增加非空检查;创建View时,使用当前组件的Context(比如ActivityXXX.this),而不用getApplicationContext()等方式。
74d764a48948b5fac5823f46ced2a95b_1_

参考资料:http://stackoverflow.com/questions/28248232/what-am-i-doing-wrong-with-my-handling-of-contex-java-android
参考资料:http://stackoverflow.com/questions/25488208/java-nullpointerexception-getting-resources**

阿里云测移动质量中心(以下简称MQC)是为广大企业客户和移动开发者提供真机测试服务的云平台,拥有大量热门机型,提供7x24全天候服务。

我们致力于提供专业、稳定、全面、高价值的自动化测试能力,以及简单易用的使用流程、贴心的技术服务,并且帮助客户以最低的成本、最高的效率发现APP中的各类隐患(APP崩溃、各类兼容性问题、功能性问题、性能问题等),减少用户流失,提高APP质量和市场竞争力。

联系我们:
 网站地址:https://mqc.aliyun.com
 开发者交流旺旺群:335334143
 开发者交流QQ群:492028798
 客服邮箱:mqc_group@service.alibaba.com;
更多精彩技术分享 欢迎关注 MQC公众号
17

目录
相关文章
|
6天前
|
存储 监控 网络协议
服务器压力测试是一种评估系统在极端条件下的表现和稳定性的技术
【10月更文挑战第11天】服务器压力测试是一种评估系统在极端条件下的表现和稳定性的技术
62 32
|
3月前
|
机器学习/深度学习 敏捷开发 人工智能
探索自动化测试的前沿技术与实践挑战
【7月更文挑战第8天】随着信息技术的飞速发展,软件测试领域正经历着前所未有的变革。自动化测试作为提升测试效率、确保软件质量的重要手段,其前沿技术与实践挑战备受关注。本文深入探讨了自动化测试的最新进展,包括人工智能在测试用例生成中的应用、持续集成/持续部署(CI/CD)流程中的自动化策略、以及云测试平台的兴起。同时,文章分析了自动化测试实施过程中遇到的主要挑战,如环境配置的复杂性、测试用例的维护问题和跨平台测试的困难,并提供了相应的解决策略。通过案例分析,展示了成功实施自动化测试的关键因素,为软件测试专业人员提供了宝贵的参考和启示。
91 2
|
21天前
|
机器学习/深度学习 存储 监控
深入解析软件测试中的自动化测试技术
本文旨在全面探讨软件测试中的自动化测试技术。通过对自动化测试的定义、优势、常见工具和实施步骤的详细阐述,帮助读者更好地理解和应用自动化测试。同时,本文还将讨论自动化测试的局限性及未来发展趋势,为软件测试人员提供有益的参考。
43 6
|
1月前
|
测试技术 持续交付 UED
软件测试的艺术与科学:平衡创新与质量的探索在软件开发的波澜壮阔中,软件测试如同灯塔,指引着产品质量的方向。本文旨在深入探讨软件测试的核心价值,通过分析其在现代软件工程中的应用,揭示其背后的艺术性与科学性,并探讨如何在追求技术创新的同时确保产品的高质量标准。
软件测试不仅仅是技术活动,它融合了创造力和方法论,是软件开发过程中不可或缺的一环。本文首先概述了软件测试的重要性及其在项目生命周期中的角色,随后详细讨论了测试用例设计的创新方法、自动化测试的策略与挑战,以及如何通过持续集成/持续部署(CI/CD)流程优化产品质量。最后,文章强调了团队间沟通在确保测试有效性中的关键作用,并通过案例分析展示了这些原则在实践中的应用。
62 1
|
2月前
|
物联网 测试技术 持续交付
软件测试的艺术与科学:探索自动化测试框架未来技术的融合与创新:探索区块链、物联网和虚拟现实的交汇点
【8月更文挑战第30天】在软件开发的海洋中,测试是确保航行安全不可或缺的灯塔。本文将带领读者揭开软件测试神秘的面纱,深入理解自动化测试框架的重要性和实现方法。通过实际案例,我们将一起探索如何构建高效、可靠的自动化测试系统,从而保障软件质量,提升开发效率。
|
2月前
|
Web App开发 JSON 测试技术
精通Postman接口测试:关联技术与自动化实践指南
这篇文章详细介绍了如何使用Postman进行接口测试,包括关联技术、自动化实践,以及如何通过环境变量和全局变量解决接口之间的关联性问题。
70 0
精通Postman接口测试:关联技术与自动化实践指南
|
2月前
|
存储 安全 测试技术
移动应用的安全测试与加固技术深度解析
【8月更文挑战第2天】随着移动互联网的发展,移动应用成为生活必需,但安全威胁也随之加剧。本文深入探讨移动应用的安全测试与加固技术,包括权限访问、数据加密、安全协议、组件安全测试及渗透测试等内容,同时覆盖源代码、运行时环境、数据传输存储及业务逻辑加固等方面,为开发者提供全面指导,以保护用户数据和企业资产安全。
173 12
|
2月前
|
机器学习/深度学习 人工智能 物联网
探索软件测试的前沿技术与未来趋势
在数字化时代的浪潮中,软件测试作为保障软件质量的重要环节,正经历着前所未有的变革。本文将深入探讨当前软件测试领域的最新技术进展,包括自动化测试、人工智能在测试中的应用、以及云测试平台的发展等。同时,文章也将对软件测试的未来发展趋势进行预测,为读者揭示一个更加智能化、高效化的软件测试新时代。
|
3月前
|
机器学习/深度学习 人工智能 算法
探索软件测试的前沿技术:AI与自动化的融合
在数字化时代的浪潮中,软件测试领域正经历着前所未有的变革。本文深入探讨了人工智能(AI)和自动化技术如何重塑软件测试的未来。通过分析最新的行业报告、案例研究和专家访谈,我们揭示了这些技术如何提升测试效率、准确性和灵活性。文章还讨论了实施这些技术的可能挑战和解决方案,为读者提供了宝贵的行业见解和实用建议。
186 6
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
探索自动化测试的前沿技术与实践
随着科技的快速发展,软件测试领域也迎来了新的变革。自动化测试作为一种提高测试效率和准确性的有效手段,正逐渐成为软件开发过程中不可或缺的一部分。本文将深入探讨自动化测试的最新技术动态,包括人工智能在测试中的应用、持续集成/持续部署(CI/CD)流程中的自动化策略,以及跨平台测试框架的创新。同时,文章还将分享一些实用的自动化测试最佳实践,帮助读者构建更加高效、可靠的自动化测试体系。让我们一起迈向自动化测试的新纪元,解锁软件质量保障的新可能。
83 2