您的位置:首页 > 移动开发

APP“程序未安装”解决方案 手机操作&代码相关

2015-12-29 14:10 375 查看
对于市面上的众多APP,有的用户在安装的时候会出现提示“程序未安装”这样的错误,若只是通过手机设置操作解决则较简单,比较复杂的情况是问题和手机系统甚至工程代码有关,我曾在工作中遇到过:三星note系列5.0系统我的APP就是安装失败,其他系统或其他APP都可以正常安装,最后还是通过修改代码才解决。但需注意:原因可能是某些系统版本对于安装包的检查策略进行了更严格的限制(下面会重点解释)

下面我们从手机操作和代码两个方面进行问题整体排查和解决:

1、查看手机存储是否已满;

出现概率比较小,因为一般手机存储低于一定比例在顶部通知栏都会提示,用户都会注意到;

2、查看手机是否已安装过旧版本的APP,先卸载;

这是因为新的安装包签名和旧的不一致导致不能覆盖安装;

3、勾选“允许位置来源”

手机“设置”-“安全”里面的策略,即允许除手机自带或推荐的应用商城以外的来源的APP安装到手机上

4、删除smdl2tmp1.asec

手机存储模式连接电脑,进入SD卡,找到“.android_secure”文件夹,找到一个smdl2tmp1.asec(名称不一定是这个,但是和其他文件的名字有明显差异)的文件,把它删掉

5、和其他的APP冲突(不兼容)

第一种情况是由于安装了手机管家类的APP对其他平台的APP进行了安装限制,卸载就好了(但这可能性较低)

第二种这也是我所遇到的情况,和某些APP在代码上冲突了,最后需要修改代码才可以解决,我以我所遇见的问题为例,其他情况类推。

由于我需要使用百度地图,因此集成了百度的SDK,自然需要在Manifest文件中开启一定权限,在早期的百度地图开发所需权限(点击这里)中有这么两句:

<permission android:name="android.permission.BAIDU_LOCATION_SERVICE"></permission>
<uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE"></uses-permission>

注意permission和uses-permission的区别(点击这里1
点击这里2 ),简单来说,uses-permission是android官方承认的公共权限,而permission相当于开发者自定义的手机权限,名字就是“”里面的。

问题就出现在这里,你会发现现在的百度地图开发文档说明(点击这里)中,这两条并没有了,也就是说这两句可加可不加(亲测,不加这两句也可以正常调用百度地图);

但是要是你仍旧将这两句不做注释处理的话,就可能出问题,为什么呢?原因是手机里安装的百度系列的APP,它代码里面也会写<permission>这句(上面说到,这是开发者自定义的手机权限),也就是它定义的一项权限和我们的APP定义的权限重名了。对于大多数手机来说,这是没问题的(三星华为小米2.3,4.0,4.2.2,4.4,5.1都测试通过),可部分机型(三星note,LG)的5.0系统对于命名冲突进行了限制(乐视的解释点击这里),一旦发现名字冲突,则安装不通过,即手机里只保留一个申请同名权限的APP。

so,遇到这类问题就排查应用中使用的第三方SDK而申请的自定义权限吧(尤其是大平台的SDK,因为大多手机里面都会安装此平台的主打软件,比如BAT),有的话将其改名或注释吧。(当然也可以卸载平台的APP,但是总不能让用户不用不是?)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: