一、描述
最近调试一个第三方SDK,代码改动也挺大,这两天准备发个版本的时候,打包出来的APK想覆盖线上版本的试试,覆盖安装的时候居然提示下图所示,该软件包似乎已损坏,这让我看的一脸懵逼,什么原因也没说。
二、解决
原因:
因为接入第三方SDK的时候,因需求调整了build.gradle
文件下的targetSdkVersion
版本,线上版本的targetSdkVersion
是24,如今被我改成22了,所以低版本的targetSdkVersion是无法覆盖安装高版本的targetSdkVersion的。
解决方法:
把当前项目的targetSdkVersion
版本调整成跟线上版本一样,或者高于线上的,不然覆盖安装是会报错的。
targetSdkVersion 24
三、解决流程
上面已经公布问题的原因和解决方案,具体的解决问题流程有兴趣的往下面看
(1)刚发现问题的时候,怀疑网络不好的原因导致QQ传输到手机上的APK不完整,所以损坏了,但是测试后排除了这个问题
(2)之后就根据提示的关键字搜百度,谷歌了,大部分的答案都需要我在打包的时候勾选以下的V1 和 V2,但是我的这两个选项是灰色的,我的gradle版本比较低是2.2.3的,百度上说要在2.3.3以上才可以勾选,因为项目库的原因,调整gradle后影响太大,这个方案也不采纳了。
(3) 之后想七想八的方法都试了一遍,都没什么效果,只能乖乖的还是拿着关键字去查百度,后面看到一篇文章里有用到命令去安装Apk,一下子就想起来了,可以用命令安装啊,它是会报错误信息的,果断就用命令去重装了一下apk,报了以下的错误
>>adb install -r 231.apk
Failed to install 231.apk: Failure [-26: Package com.example.test new target SDK 22 doesn't support runtime permissions but the old target SDK 24 does.]
一看命令就想到了,target版本的问题了,之前修改过这个版本,再去master分支上看下线上的版本是多少,果然当前版本比线上版本低了,八成是这个原因了,所以马上把targetSdkVersion
改成跟线上的版本一样后,打包覆盖安装就成功了,这么简单的问题找了那么久也是醉了。
也顺便找到一个跟我这个一样问题的小伙伴发的文章targetSdkVersion 更改的问题,这文章标题起的,能起的明显点吗,我查找问题根本不会找到这种文章。。
四、总结
平时有遇到的Bug问题,希望大家都能一起分享出来.