Skip to content

Commit 287626a

Browse files
author
tangyinsheng
committed
[tinker] Adjust clearPatch logic.
1 parent ec6f1f5 commit 287626a

File tree

3 files changed

+18
-23
lines changed

3 files changed

+18
-23
lines changed

tinker-android/tinker-android-lib/src/main/java/com/tencent/tinker/lib/tinker/Tinker.java

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,12 @@
3030
import com.tencent.tinker.lib.service.AbstractResultService;
3131
import com.tencent.tinker.lib.service.DefaultTinkerResultService;
3232
import com.tencent.tinker.lib.service.TinkerPatchService;
33-
import com.tencent.tinker.loader.shareutil.ShareTinkerLog;
3433
import com.tencent.tinker.lib.util.TinkerServiceInternals;
3534
import com.tencent.tinker.loader.TinkerRuntimeException;
3635
import com.tencent.tinker.loader.shareutil.ShareConstants;
3736
import com.tencent.tinker.loader.shareutil.SharePatchFileUtil;
38-
import com.tencent.tinker.loader.shareutil.SharePatchInfo;
3937
import com.tencent.tinker.loader.shareutil.ShareTinkerInternals;
38+
import com.tencent.tinker.loader.shareutil.ShareTinkerLog;
4039

4140
import java.io.File;
4241

@@ -256,20 +255,7 @@ public int getTinkerFlags() {
256255
* clean all patch files
257256
*/
258257
public void cleanPatch() {
259-
if (patchDirectory == null) {
260-
return;
261-
}
262-
final File patchInfoFile = SharePatchFileUtil.getPatchInfoFile(patchDirectory.getAbsolutePath());
263-
if (!patchInfoFile.exists()) {
264-
ShareTinkerLog.printErrStackTrace(TAG, new Throwable(), "try to clean patch while patch info file does not exist.");
265-
return;
266-
}
267-
final File patchInfoLockFile = SharePatchFileUtil.getPatchInfoLockFile(patchDirectory.getAbsolutePath());
268-
final SharePatchInfo patchInfo = SharePatchInfo.readAndCheckPropertyWithLock(patchInfoFile, patchInfoLockFile);
269-
if (patchInfo != null) {
270-
patchInfo.versionToRemove = patchInfo.newVersion;
271-
SharePatchInfo.rewritePatchInfoFileWithLock(patchInfoFile, patchInfo, patchInfoLockFile);
272-
}
258+
ShareTinkerInternals.cleanPatch(getContext());
273259
}
274260

275261
/**

tinker-android/tinker-android-loader/src/main/java/com/tencent/tinker/loader/TinkerLoader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ private void tryLoadPatchFilesInternal(TinkerApplication app, Intent resultInten
128128

129129
if (mainProcess) {
130130
if (!ShareTinkerInternals.isNullOrNil(versionToRemove)) {
131-
if (versionToRemove.equals(newVersion)) {
131+
if (newVersion.equals(versionToRemove)) {
132132
ShareTinkerLog.w(TAG, "found new version clean patch mark and we are in main process, delete patch file now.");
133133
final String patchName = SharePatchFileUtil.getPatchVersionDirectory(newVersion);
134134
if (patchName != null) {

tinker-android/tinker-android-loader/src/main/java/com/tencent/tinker/loader/shareutil/ShareTinkerInternals.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package com.tencent.tinker.loader.shareutil;
1818

1919
import android.app.ActivityManager;
20-
import android.app.Application;
2120
import android.content.Context;
2221
import android.content.SharedPreferences;
2322
import android.content.pm.ApplicationInfo;
@@ -704,11 +703,11 @@ public static String toVisualString(String src) {
704703
}
705704
}
706705

707-
public static void cleanPatch(Application app) {
708-
if (app == null) {
709-
throw new TinkerRuntimeException("app is null");
706+
public static void cleanPatch(Context context) {
707+
if (context == null) {
708+
throw new TinkerRuntimeException("context is null");
710709
}
711-
final File tinkerDir = SharePatchFileUtil.getPatchDirectory(app);
710+
final File tinkerDir = SharePatchFileUtil.getPatchDirectory(context);
712711
if (!tinkerDir.exists()) {
713712
ShareTinkerLog.printErrStackTrace(TAG, new Throwable(),"try to clean patch while there're not any applied patches.");
714713
return;
@@ -721,8 +720,18 @@ public static void cleanPatch(Application app) {
721720
final File patchInfoLockFile = SharePatchFileUtil.getPatchInfoLockFile(tinkerDir.getAbsolutePath());
722721
final SharePatchInfo patchInfo = SharePatchInfo.readAndCheckPropertyWithLock(patchInfoFile, patchInfoLockFile);
723722
if (patchInfo != null) {
724-
patchInfo.versionToRemove = patchInfo.newVersion;
723+
if (!patchInfo.newVersion.equals(patchInfo.oldVersion)) {
724+
// newVersion hasn't been loaded yet, we can remove it directly now.
725+
final String patchName = SharePatchFileUtil.getPatchVersionDirectory(patchInfo.newVersion);
726+
SharePatchFileUtil.deleteDir(new File(tinkerDir, patchName));
727+
patchInfo.newVersion = patchInfo.oldVersion;
728+
patchInfo.versionToRemove = "";
729+
} else {
730+
patchInfo.versionToRemove = patchInfo.newVersion;
731+
}
725732
SharePatchInfo.rewritePatchInfoFileWithLock(patchInfoFile, patchInfo, patchInfoLockFile);
733+
} else {
734+
ShareTinkerLog.printErrStackTrace(TAG, new Throwable(), "fail to get patchInfo.");
726735
}
727736
}
728737
}

0 commit comments

Comments
 (0)