diff --git a/app/src/main/java/com/example/mir4updater/activity/InstallActivity.java b/app/src/main/java/com/example/mir4updater/activity/InstallActivity.java index 7c5a9b0..235a642 100644 --- a/app/src/main/java/com/example/mir4updater/activity/InstallActivity.java +++ b/app/src/main/java/com/example/mir4updater/activity/InstallActivity.java @@ -21,6 +21,7 @@ public class InstallActivity extends AppCompatActivity { setContentView(R.layout.activity_install); } + @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); Log.e(TAG, "onNewIntent: "); diff --git a/app/src/main/java/com/example/mir4updater/activity/main/MainActivity.java b/app/src/main/java/com/example/mir4updater/activity/main/MainActivity.java index db27bd2..8009f28 100644 --- a/app/src/main/java/com/example/mir4updater/activity/main/MainActivity.java +++ b/app/src/main/java/com/example/mir4updater/activity/main/MainActivity.java @@ -447,7 +447,7 @@ public class MainActivity extends BaseMvvmActivity Build.VERSION_CODES.Q){ + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) { XXPermissions.with(this) // 申请单个权限 .permission(PermissionUtils.Location_Permission) @@ -483,7 +483,7 @@ public class MainActivity extends BaseMvvmActivity() { @Override public void subscribe(ObservableEmitter emitter) throws Exception { - if (ZipUtil.containsEntry(XapkFile, "manifest.json")) { + if (ZipUtil.containsEntry(mApkFile, "manifest.json")) { //判断json文件是否存在 - String dirName = FileUtils.getFileNoExName(XapkFile.getAbsolutePath()); - unpackPath = XapkFile.getParentFile().getAbsolutePath() + File.separator + dirName; - File unpackDir = new File(unpackPath); - ZipUtil.unpack(XapkFile, unpackDir); + String dirName = FileUtils.getFileNoExName(mApkFile.getAbsolutePath()); + mUnpackPath = mContext.getExternalCacheDir()+ File.separator + "xapk_unzip" + File.separator + dirName; + File unpackDir = new File(mUnpackPath); + ZipUtil.unpack(mApkFile, unpackDir); String jsonString = JsonUtils.readJsonFile(unpackDir.getAbsolutePath() + File.separator + "manifest.json"); emitter.onNext(jsonString); } else { Toaster.show("读取XAPK配置文件失败"); - emitter.onComplete(); } + emitter.onComplete(); } }).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) @@ -123,7 +117,7 @@ public class XapkUtils { @Override public void onNext(String s) { JsonObject jsonObject = JsonParser.parseString(s).getAsJsonObject(); - XapkSize = jsonObject.get("total_size").getAsLong(); + mXapkSize = jsonObject.get("total_size").getAsLong(); JsonElement split_configs_em = jsonObject.get("split_configs"); //获取分割的配置 JsonElement expansions_em = jsonObject.get("expansions"); @@ -145,28 +139,28 @@ public class XapkUtils { }); } - @RequiresApi(api = Build.VERSION_CODES.O) - private void readConfig(JsonElement split_configs, JsonElement expansions, JsonElement split_apks) { + private void readConfig(JsonElement splitConfigs, JsonElement expansions, JsonElement splitApks) { //没有split_configs只有单个apk,读取split_apks 的base字段的file文件 //没有expansions 没有obb文件 //split_apks应该是都会有的,包含一个base的json对象 - if (null != split_configs) { - getSplitConfigs(split_configs.getAsJsonArray()); + if (null != splitConfigs) { + getSplitConfigs(splitConfigs.getAsJsonArray()); } else { Log.e(TAG, "readConfig: " + "not found split_configs json data"); } if (null != expansions) { - readOBBConfig(expansions.getAsJsonArray()); + readObbConfig(expansions.getAsJsonArray()); } else { Log.e(TAG, "readConfig: " + "not found expansions json data"); } - if (null != split_apks) { - getSplitApks(split_apks.getAsJsonArray()); + if (null != splitApks) { + getSplitApks(splitApks.getAsJsonArray()); } else { Log.e(TAG, "readConfig: " + "not found split_apks json data"); } + } List configList = new ArrayList<>(); @@ -196,9 +190,8 @@ public class XapkUtils { * * @param jsonArray */ - @RequiresApi(api = Build.VERSION_CODES.O) - private void readOBBConfig(JsonArray jsonArray) { - if (TextUtils.isEmpty(unpackPath)) { + private void readObbConfig(JsonArray jsonArray) { + if (TextUtils.isEmpty(mUnpackPath)) { Log.e(TAG, "readOBBConfig: " + "unpack directory is empty"); return; } @@ -245,12 +238,12 @@ public class XapkUtils { //应该直接获取SplitApks里面的file if (null != configList && configList.size() > 0) { //split_configs不为空的情况 - filePath.add(unpackPath + File.separator + apkList.get(getFileFromId(apkList, "base")).getFile()); + filePath.add(mUnpackPath + File.separator + apkList.get(getFileFromId(apkList, "base")).getFile()); for (String config : configList) { int position = getFileFromId(apkList, config); if (position != -1) { String file = apkList.get(position).getFile(); - filePath.add(unpackPath + File.separator + file); + filePath.add(mUnpackPath + File.separator + file); } } // Log.e(TAG, "installxApk: " + filePath.toString()); @@ -294,14 +287,13 @@ public class XapkUtils { }).start(); } - @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public void installAppatPie(List apkFilePath) { Log.e(TAG, "installApps: 正在安装应用 " + apkFilePath); // File file = new File(apkFilePath); PackageInstaller packageInstaller = mContext.getPackageManager().getPackageInstaller(); PackageInstaller.SessionParams sessionParams = new PackageInstaller.SessionParams(PackageInstaller .SessionParams.MODE_FULL_INSTALL); - sessionParams.setSize(XapkSize); + sessionParams.setSize(mXapkSize); int sessionId = createSession(packageInstaller, sessionParams); if (sessionId != -1) { for (String apkPath : apkFilePath) { @@ -339,8 +331,7 @@ public class XapkUtils { } - @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) - private static int createSession(PackageInstaller packageInstaller, PackageInstaller.SessionParams sessionParams) { + private int createSession(PackageInstaller packageInstaller, PackageInstaller.SessionParams sessionParams) { int sessionId = -1; try { sessionId = packageInstaller.createSession(sessionParams); @@ -351,8 +342,7 @@ public class XapkUtils { return sessionId; } - @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) - private static boolean copyApkFile(PackageInstaller pi, int sessionId, String apkFilePath) { + private boolean copyApkFile(PackageInstaller pi, int sessionId, String apkFilePath) { boolean success = false; File apkFile = new File(apkFilePath); PackageInstaller.Session session = null; @@ -385,7 +375,6 @@ public class XapkUtils { return success; } - @RequiresApi(api = Build.VERSION_CODES.O) private boolean copyObbFile(Expansions expansions) { String install_location = expansions.getInstall_location(); //install_location 不清楚是否还有其他定义 @@ -397,7 +386,7 @@ public class XapkUtils { Log.e(TAG, "copyObbFile: " + "file path is empty"); return false; } else { - File localFile = new File(unpackPath + File.separator + file); + File localFile = new File(mUnpackPath + File.separator + file); if (localFile.exists() && localFile.isFile()) { File installFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + install_path); Log.e(TAG, "copyObbFile: " + "localFile: " + localFile.getAbsolutePath());