版本更新apk更新時,文件名衝突,無法安裝

出這個問題找了很多辦法,不太管用。最後是在安裝apk之前卸載本app解決了問題。當我這樣解決之後還報這樣的問題,可能是安裝的時候是測試版,版本更新是正式版,簽名不一致出現了問題。解決問題思路一下。問題原因是手機裏已經安裝了項目包名“com.x.x.x”。

在這裏插入圖片描述
1.改掉applicationId,順便改掉provider中authorities參數在這裏插入圖片描述
把包名換成改掉 ${applicationId}

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="${applicationId}.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">

這個方法換了一個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全打包,試過了,不管用呢~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章