版本更新apk更新时,文件名冲突,无法安装

出这个问题找了很多办法,不太管用。最后是在安装apk之前卸载本app解决了问题。当我这样解决之后还报这样的问题,可能是安装的时候是测试版,版本更新是正式版,签名不一致出现了问题。解决问题思路一下。问题原因是手机里已经安装了项目包名“com.x.x.x”。

版本更新apk更新时,文件名冲突,无法安装_第1张图片
1.改掉applicationId,顺便改掉provider中authorities参数版本更新apk更新时,文件名冲突,无法安装_第2张图片
把包名换成改掉 ${applicationId}


这个方法换了一个applicationId,手机系统识别就是两个不同的app,实际上会留下两个不同的app,这种结果不是我想要的,首先applicationId必须不变,不然相应的权限需要重新申请,很麻烦。所以解决办法是在applicationId不变的情况下,安装的时候写一个卸载APP方法。这样新一版app的权限,缓存,数据库,当前状态都可以继承下来。

  //卸载
    public static void uninstallAPP() {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_DELETE);
        intent.setData(Uri.parse("package:" + packageInfo.packageName));
        contexts.startActivity(intent);
        installtionAPK();
    }
  //安装
    private static void installtionAPK() {
        String fileName = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + apkName + "/" + apkName + ".apk";//承接我的代码,filename指获取到了我的文件相应路径
        if (fileName != null) {
            if (fileName.endsWith(".apk")) {
                if (Build.VERSION.SDK_INT >= 24) {//判读版本是否在7.0以上
                    File file = new File(fileName);
                    Uri apkUri = FileProvider.getUriForFile(contexts, packageInfo.packageName + ".fileprovider", file);//在AndroidManifest中的android:authorities值
                    Intent install = new Intent(Intent.ACTION_VIEW);
                    install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    install.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//添加这一句表示对目标应用临时授权该Uri所代表的文件
                    install.setDataAndType(apkUri, "application/vnd.android.package-archive");
                    contexts.startActivity(install);
                } else {
                    Intent install = new Intent(Intent.ACTION_VIEW);
                    install.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive");
                    install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    contexts.startActivity(install);
                }
            }
        }

    }

后记:问题在此就解决了,网上还有解决办法是v1,v2打包签名不对,最好v1打包,或全v1,v2全打包,试过了,不管用呢~

你可能感兴趣的:(android)