由于 APP 签名冲突造成。如果设备上已经安装了其他签名的相同包名 APP,再安装其他签名的就会报出此类错误。
解决方法:a. 更换签名文件,重新签名 b. 更改应用的包名,避免冲突。
方法数超标所导致。dx 打包时限制了单个 dx 文件的最大方法数为 65535。同时 Dalvik VM 限制内存中加载的方法数(方法,类定义及构造函数)不能超过 65535 个。
解决方法:a. 检查代码,删出无用 jar 包和代码,尤其是自动生成的 get/set,没用的类。b. 将部分 java 代码封装到 JNI 中。
应用中没有签名信息。
解决方法:使用 Eclipse 或者 Android Studio 对项目重新编译打包。
Android 应用安装位置不可用。应用安装位置有两个:ROM、sdcard。如果严格指定安装到 sdcard,但是设备没有 sdcard 时,就会报此类错误。
解决方法:AndroidManifest.xml 中配置:
设备系统版本比应用的最低支持的系统版本低。
解决方法:AndoidManifest.xml 中将系统版本降低。
设备中已经安装了此 APP 的更高版本,无法降级安装。
解决方法:先卸载之前的版本,再安装此版本。
安装 APP 时,Android 系统会对 APP 先进行解析。解析过程出错,就会报出此类错误,可能得原因很多。
解决方法:检查 AndroidManifest.xml 各项配置是否符合规范。比如 sdkVersion 不能用 string 等等。
应用在上次卸载时,由于应用中的 native 程序未被杀死而占用/data/data/{packageName}目录,导致/data/data/目录下的 APP 相关内容未被删除,多数情况下能在 logcat 中找到报错:Installer: rm -rf failed, directory is not empty。再次安装时无法覆盖,导致报出此类问题。
解决方法:如果设备 Root 了,则直接删除/data/data/目录下的应用包名文件夹;如果没有 root,需要将手机恢复出厂设置。此外,开发者要额外注意容易出现此类问题的手机,对此类设备的用户给出提示。用户无需操心,阿里移动测试平台会帮助解决。
当安装的 APP 包含 native libraries(一般是 so 文件)的时候,如果没有对应机器 CPU 架构的库文件,就会出现这种问题。比如,你编译了一个 armv7 平台的 APP,但是想要装在 intel 架构的设备上,就会出现这个错误。
解决方法:在编译 APP 时,先用 NDK 编译出相应的 CPU 架构的库文件。
部分机型在使用 adb 命令安装应用时,设备会弹窗询问用户是否允许安装,假如一段时间内(一般是 30s),没有点击确认弹窗,那么此类设备会阻止安装,并提示用户:INSTALL_FAILED_CANCELLED_BY_USER
解决方法:联系 MQC 工作人员,旺旺群:335334143;QQ 群:492028798
原因及解决方法同:INSTALLED_FAILED_CANCELLED_BY_USER
每个 Android 应用都有一个最大内存上限。超过这个上限,就会导致内存不足(OutOfMemory)。检查内存上限的方法:
int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
Log.d("TAG", "Max memory is " + maxMemory + "KB");
通常情况下,出现 OOM,是由于应用中加载了大量的图片导致。鉴于此,有以下几种方式来减小应用对内存的使用:
a. 合理压缩展示图片,比如一个 100x100 的控件里,如果加载一个 1024x768 的图片,不会让图片的展示效果更好,反而会增加 OOM 的风险。所以,合理的对图片进行压缩非常重要。
b. 压缩完图片,但是应用里包含了太多的图,这种情况依然可能出现 OOM。这种情况下,考虑使用内存缓存技术。根据每一屏要展示的图片数量,以及每个图片的大小,设定一个合理的缓存值,一般情况下不要超过 1/8 的最大内存值。如果图片不在显示区域,可以考虑将其进行回收,系统的垃圾回收器(GC)会认为这些内存不在被使用,从而对图片进行 GC 操作。这样会大大降低 OOM 的风险。
c. 更多的 OOM 讨论,参见:http://blog.csdn.net/vshuang/article/details/39647167
每个 ipa 包本质上是一个 zip 包,里面包含 ios 应用的资源和可执行文件。
a. 如果提示 “应用重签名失败”,很可能的原因是 ipa 是直接从 itunes 市场下载的正式发布包,这样的包经过苹果的加密,无法安装到任何没有购买过这个应用的用户手机上面。
b. 如果部分的手机安装失败,请检查一下你的应用支持的最低 ios SDK 的版本(可以很直观的从包里面的 Info.plist 看到)。比如最低支持 ios8.3,则 ios8.2 版本的手机就装不上这个应用。
很多同学遇到启动失败的问题,很难进行 debug,不知道该如何入手。启动失败其实也可以找到错误栈信息,并且通过这个错误栈信息,定位到具体的问题原因。如下图:
这里,我们可以看到启动失败的进程 pid:26981。然后,我们需要下载日志,这里的日志就是详细的 logcat 日志。
下载之后,我们需要通过这个 PID 找到真正引起 crash 的错误栈。这里建议,使用支持正则匹配的编辑器打开 logcat 日志(比如 nodepad++、vim 等等),打开之后,使用正则规则:“26981.* E .*” 进行匹配查找。可以找到如下信息:
这样我们就能知道具体那行代码导致的错误了。
该问题一般是由于资源加载时,引用初始化未完全的 Context 对象导致。
解决方法:通过增加非空检查;创建 View 时,使用当前组件的 Context(比如 ActivityXXX.this),而不用 getApplicationContext() 等方式。
参考资料: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 公众号