react-native-update 10.55.1 → 10.56.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README-CN.md +35 -0
- package/README.md +37 -0
- package/android/build.gradle +53 -27
- package/android/jni/Application.mk +6 -1
- package/android/jni/hpatch.c +59 -4
- package/android/lib/arm64-v8a/librnupdate.so +0 -0
- package/android/lib/armeabi-v7a/librnupdate.so +0 -0
- package/android/lib/x86/librnupdate.so +0 -0
- package/android/lib/x86_64/librnupdate.so +0 -0
- package/android/proguard.pro +70 -14
- package/android/src/main/java/cn/reactnative/modules/update/ApkInstaller.java +15 -8
- package/android/src/main/java/cn/reactnative/modules/update/ArchiveLimits.java +1 -0
- package/android/src/main/java/cn/reactnative/modules/update/BundledResourceCopier.java +1 -2
- package/android/src/main/java/cn/reactnative/modules/update/CleanupKeepNames.java +25 -0
- package/android/src/main/java/cn/reactnative/modules/update/DownloadTask.java +98 -34
- package/android/src/main/java/cn/reactnative/modules/update/DownloadTaskParams.java +29 -0
- package/android/src/main/java/cn/reactnative/modules/update/FileOperationException.java +15 -0
- package/android/src/main/java/cn/reactnative/modules/update/HttpUtils.java +59 -0
- package/android/src/main/java/cn/reactnative/modules/update/InstallRecord.java +27 -1
- package/android/src/main/java/cn/reactnative/modules/update/NativeCheckOrchestrator.java +57 -16
- package/android/src/main/java/cn/reactnative/modules/update/ReactReloadManager.java +38 -46
- package/android/src/main/java/cn/reactnative/modules/update/UpdateContext.java +279 -183
- package/android/src/main/java/cn/reactnative/modules/update/UpdateFileUtils.java +14 -0
- package/android/src/main/java/cn/reactnative/modules/update/UpdateModuleImpl.java +222 -215
- package/android/src/main/java/cn/reactnative/modules/update/UpdatePackage.java +5 -0
- package/android/src/newarch/cn/reactnative/modules/update/UpdateModule.java +23 -25
- package/android/src/oldarch/cn/reactnative/modules/update/UpdateModule.java +29 -29
- package/cpp/patch_core/archive_limits.h +6 -0
- package/cpp/patch_core/jni_util.h +6 -2
- package/cpp/patch_core/patch_core.cpp +237 -84
- package/cpp/patch_core/patch_core.h +11 -0
- package/cpp/patch_core/patch_core_android.cpp +49 -33
- package/cpp/patch_core/update_core_android.cpp +134 -103
- package/cpp/update_flow_core/flow_json.cpp +150 -17
- package/cpp/update_flow_core/flow_json.h +13 -1
- package/cpp/update_flow_core/update_flow_core.cpp +78 -8
- package/cpp/update_flow_core/update_flow_core.h +9 -0
- package/cpp/update_flow_core/update_flow_jni.cpp +44 -25
- package/harmony/hvigor-plugin.ts +168 -21
- package/harmony/pushy/src/README.md +74 -0
- package/harmony/pushy/src/main/cpp/CMakeLists.txt +13 -3
- package/harmony/pushy/src/main/cpp/PushyTurboModule.cpp +11 -5
- package/harmony/pushy/src/main/cpp/pushy.cpp +103 -18
- package/harmony/pushy/src/main/ets/ArchiveLimits.ts +61 -5
- package/harmony/pushy/src/main/ets/DownloadTask.ts +255 -166
- package/harmony/pushy/src/main/ets/ErrorCodes.ts +75 -0
- package/harmony/pushy/src/main/ets/EventHub.ts +22 -20
- package/harmony/pushy/src/main/ets/InstallRecord.ts +79 -21
- package/harmony/pushy/src/main/ets/Logger.ts +42 -16
- package/harmony/pushy/src/main/ets/NativeCheckOrchestrator.ts +98 -17
- package/harmony/pushy/src/main/ets/NativePatchCore.ts +10 -3
- package/harmony/pushy/src/main/ets/PathUtils.ts +9 -3
- package/harmony/pushy/src/main/ets/PushyTurboModule.ts +139 -53
- package/harmony/pushy/src/main/ets/UpdateContext.ts +269 -159
- package/harmony/pushy/src/main/module.json5 +5 -1
- package/harmony/pushy.har +0 -0
- package/ios/PrivacyInfo.xcprivacy +79 -0
- package/ios/RCTPushy/RCTPushy.mm +399 -170
- package/ios/RCTPushy/RCTPushyDownloader.h +14 -0
- package/ios/RCTPushy/RCTPushyDownloader.mm +136 -11
- package/package.json +14 -24
- package/react-native-update.podspec +43 -3
- package/src/client.ts +236 -82
- package/src/context.ts +40 -27
- package/src/core.ts +41 -16
- package/src/endpoint.ts +2 -1
- package/src/error.ts +49 -11
- package/src/index.ts +14 -0
- package/src/locales/en.ts +1 -23
- package/src/locales/zh.ts +1 -22
- package/src/provider.tsx +159 -111
- package/src/type.ts +0 -2
- package/src/updateFlowCore.ts +10 -2
- package/src/utils.ts +61 -4
- package/android/src/main/java/cn/reactnative/modules/update/ReactNativeHostHandler.java +0 -13
- package/android/src/main/java/cn/reactnative/modules/update/UpdateModuleSupport.java +0 -45
|
@@ -5,13 +5,16 @@ import com.facebook.react.bridge.ReactApplicationContext;
|
|
|
5
5
|
import com.facebook.react.bridge.ReadableMap;
|
|
6
6
|
import java.util.Map;
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* New-architecture bridge: the codegen spec overrides only, every method
|
|
10
|
+
* forwards to UpdateModuleImpl.
|
|
11
|
+
*/
|
|
8
12
|
public class UpdateModule extends NativePushySpec {
|
|
9
|
-
private final
|
|
13
|
+
private final UpdateModuleImpl impl;
|
|
10
14
|
|
|
11
15
|
public UpdateModule(ReactApplicationContext reactContext, UpdateContext updateContext) {
|
|
12
16
|
super(reactContext);
|
|
13
|
-
this.
|
|
14
|
-
UpdateEventEmitter.register(reactContext);
|
|
17
|
+
this.impl = new UpdateModuleImpl(reactContext, updateContext);
|
|
15
18
|
}
|
|
16
19
|
|
|
17
20
|
public UpdateModule(ReactApplicationContext reactContext) {
|
|
@@ -20,7 +23,7 @@ public class UpdateModule extends NativePushySpec {
|
|
|
20
23
|
|
|
21
24
|
@Override
|
|
22
25
|
protected Map<String, Object> getTypedExportedConstants() {
|
|
23
|
-
return
|
|
26
|
+
return impl.getConstants();
|
|
24
27
|
}
|
|
25
28
|
|
|
26
29
|
@Override
|
|
@@ -30,87 +33,82 @@ public class UpdateModule extends NativePushySpec {
|
|
|
30
33
|
|
|
31
34
|
@Override
|
|
32
35
|
public void downloadFullUpdate(ReadableMap options, Promise promise) {
|
|
33
|
-
|
|
36
|
+
impl.downloadFullUpdate(options, promise);
|
|
34
37
|
}
|
|
35
38
|
|
|
36
39
|
@Override
|
|
37
40
|
public void downloadAndInstallApk(ReadableMap options, Promise promise) {
|
|
38
|
-
|
|
39
|
-
getReactApplicationContext(),
|
|
40
|
-
updateContext,
|
|
41
|
-
options,
|
|
42
|
-
promise
|
|
43
|
-
);
|
|
41
|
+
impl.downloadAndInstallApk(options, promise);
|
|
44
42
|
}
|
|
45
43
|
|
|
46
44
|
@Override
|
|
47
45
|
public void downloadPatchFromPackage(ReadableMap options, Promise promise) {
|
|
48
|
-
|
|
46
|
+
impl.downloadPatchFromPackage(options, promise);
|
|
49
47
|
}
|
|
50
48
|
|
|
51
49
|
@Override
|
|
52
50
|
public void downloadPatchFromPpk(ReadableMap options, Promise promise) {
|
|
53
|
-
|
|
51
|
+
impl.downloadPatchFromPpk(options, promise);
|
|
54
52
|
}
|
|
55
53
|
|
|
56
54
|
@Override
|
|
57
55
|
public void reloadUpdate(ReadableMap options, Promise promise) {
|
|
58
|
-
|
|
56
|
+
impl.reloadUpdate(options, promise);
|
|
59
57
|
}
|
|
60
58
|
|
|
61
59
|
@Override
|
|
62
60
|
public void restartApp(Promise promise) {
|
|
63
|
-
|
|
61
|
+
impl.restartApp(null, promise);
|
|
64
62
|
}
|
|
65
63
|
|
|
66
64
|
@Override
|
|
67
65
|
public void setNeedUpdate(ReadableMap options, Promise promise) {
|
|
68
|
-
|
|
66
|
+
impl.setNeedUpdate(options, promise);
|
|
69
67
|
}
|
|
70
68
|
|
|
71
69
|
@Override
|
|
72
70
|
public void markSuccess(Promise promise) {
|
|
73
|
-
|
|
71
|
+
impl.markSuccess(promise);
|
|
74
72
|
}
|
|
75
73
|
|
|
76
74
|
@Override
|
|
77
75
|
public void getBundleHash(Promise promise) {
|
|
78
|
-
|
|
76
|
+
impl.getBundleHash(promise);
|
|
79
77
|
}
|
|
80
78
|
|
|
81
79
|
@Override
|
|
82
80
|
public void resetToPackagedBundle(Promise promise) {
|
|
83
|
-
|
|
81
|
+
impl.resetToPackagedBundle(promise);
|
|
84
82
|
}
|
|
85
83
|
|
|
86
84
|
@Override
|
|
87
85
|
public void setUuid(String uuid, Promise promise) {
|
|
88
|
-
|
|
86
|
+
impl.setUuid(uuid, promise);
|
|
89
87
|
}
|
|
90
88
|
|
|
91
89
|
@Override
|
|
92
90
|
public void syncNativeConfig(String config, Promise promise) {
|
|
93
|
-
|
|
91
|
+
impl.syncNativeConfig(config, promise);
|
|
94
92
|
}
|
|
95
93
|
|
|
96
94
|
@Override
|
|
97
95
|
public void getNativeCheckCache(Promise promise) {
|
|
98
|
-
|
|
96
|
+
impl.getNativeCheckCache(promise);
|
|
99
97
|
}
|
|
100
98
|
|
|
101
99
|
@Override
|
|
102
100
|
public void markJsCheckCompleted(String config, Promise promise) {
|
|
103
|
-
|
|
101
|
+
impl.markJsCheckCompleted(config, promise);
|
|
104
102
|
}
|
|
105
103
|
|
|
106
104
|
@Override
|
|
107
105
|
public void setLocalHashInfo(String hash, String info, Promise promise) {
|
|
108
|
-
|
|
106
|
+
impl.setLocalHashInfo(hash, info, promise);
|
|
109
107
|
}
|
|
110
108
|
|
|
111
109
|
@Override
|
|
112
110
|
public void getLocalHashInfo(String hash, Promise promise) {
|
|
113
|
-
|
|
111
|
+
impl.getLocalHashInfo(hash, promise);
|
|
114
112
|
}
|
|
115
113
|
|
|
116
114
|
@Override
|
|
@@ -7,13 +7,18 @@ import com.facebook.react.bridge.ReactMethod;
|
|
|
7
7
|
import com.facebook.react.bridge.ReadableMap;
|
|
8
8
|
import java.util.Map;
|
|
9
9
|
|
|
10
|
+
/**
|
|
11
|
+
* Old-architecture bridge: @ReactMethod declarations only, every method
|
|
12
|
+
* forwards to UpdateModuleImpl. Each state-changing method takes a trailing
|
|
13
|
+
* Promise, like the TurboModule spec, so a failed persistence rejects instead
|
|
14
|
+
* of resolving early (CODE_AUDIT 2.3).
|
|
15
|
+
*/
|
|
10
16
|
public class UpdateModule extends ReactContextBaseJavaModule {
|
|
11
|
-
private final
|
|
17
|
+
private final UpdateModuleImpl impl;
|
|
12
18
|
|
|
13
19
|
public UpdateModule(ReactApplicationContext reactContext, UpdateContext updateContext) {
|
|
14
20
|
super(reactContext);
|
|
15
|
-
this.
|
|
16
|
-
UpdateEventEmitter.register(reactContext);
|
|
21
|
+
this.impl = new UpdateModuleImpl(reactContext, updateContext);
|
|
17
22
|
}
|
|
18
23
|
|
|
19
24
|
public UpdateModule(ReactApplicationContext reactContext) {
|
|
@@ -22,7 +27,7 @@ public class UpdateModule extends ReactContextBaseJavaModule {
|
|
|
22
27
|
|
|
23
28
|
@Override
|
|
24
29
|
public Map<String, Object> getConstants() {
|
|
25
|
-
return
|
|
30
|
+
return impl.getConstants();
|
|
26
31
|
}
|
|
27
32
|
|
|
28
33
|
@Override
|
|
@@ -32,87 +37,82 @@ public class UpdateModule extends ReactContextBaseJavaModule {
|
|
|
32
37
|
|
|
33
38
|
@ReactMethod
|
|
34
39
|
public void downloadFullUpdate(ReadableMap options, Promise promise) {
|
|
35
|
-
|
|
40
|
+
impl.downloadFullUpdate(options, promise);
|
|
36
41
|
}
|
|
37
42
|
|
|
38
43
|
@ReactMethod
|
|
39
44
|
public void downloadAndInstallApk(ReadableMap options, Promise promise) {
|
|
40
|
-
|
|
41
|
-
getReactApplicationContext(),
|
|
42
|
-
updateContext,
|
|
43
|
-
options,
|
|
44
|
-
promise
|
|
45
|
-
);
|
|
45
|
+
impl.downloadAndInstallApk(options, promise);
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
@ReactMethod
|
|
49
49
|
public void downloadPatchFromPackage(ReadableMap options, Promise promise) {
|
|
50
|
-
|
|
50
|
+
impl.downloadPatchFromPackage(options, promise);
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
@ReactMethod
|
|
54
54
|
public void downloadPatchFromPpk(ReadableMap options, Promise promise) {
|
|
55
|
-
|
|
55
|
+
impl.downloadPatchFromPpk(options, promise);
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
@ReactMethod
|
|
59
59
|
public void reloadUpdate(ReadableMap options, Promise promise) {
|
|
60
|
-
|
|
60
|
+
impl.reloadUpdate(options, promise);
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
@ReactMethod
|
|
64
64
|
public void restartApp(Promise promise) {
|
|
65
|
-
|
|
65
|
+
impl.restartApp(null, promise);
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
@ReactMethod
|
|
69
|
-
public void setNeedUpdate(ReadableMap options) {
|
|
70
|
-
|
|
69
|
+
public void setNeedUpdate(ReadableMap options, Promise promise) {
|
|
70
|
+
impl.setNeedUpdate(options, promise);
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
@ReactMethod
|
|
74
|
-
public void markSuccess() {
|
|
75
|
-
|
|
74
|
+
public void markSuccess(Promise promise) {
|
|
75
|
+
impl.markSuccess(promise);
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
@ReactMethod
|
|
79
79
|
public void getBundleHash(Promise promise) {
|
|
80
|
-
|
|
80
|
+
impl.getBundleHash(promise);
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
@ReactMethod
|
|
84
84
|
public void resetToPackagedBundle(Promise promise) {
|
|
85
|
-
|
|
85
|
+
impl.resetToPackagedBundle(promise);
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
@ReactMethod
|
|
89
|
-
public void setUuid(String uuid) {
|
|
90
|
-
|
|
89
|
+
public void setUuid(String uuid, Promise promise) {
|
|
90
|
+
impl.setUuid(uuid, promise);
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
@ReactMethod
|
|
94
94
|
public void syncNativeConfig(String config, Promise promise) {
|
|
95
|
-
|
|
95
|
+
impl.syncNativeConfig(config, promise);
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
@ReactMethod
|
|
99
99
|
public void getNativeCheckCache(Promise promise) {
|
|
100
|
-
|
|
100
|
+
impl.getNativeCheckCache(promise);
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
@ReactMethod
|
|
104
104
|
public void markJsCheckCompleted(String config, Promise promise) {
|
|
105
|
-
|
|
105
|
+
impl.markJsCheckCompleted(config, promise);
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
@ReactMethod
|
|
109
|
-
public void setLocalHashInfo(String hash, String info) {
|
|
110
|
-
|
|
109
|
+
public void setLocalHashInfo(String hash, String info, Promise promise) {
|
|
110
|
+
impl.setLocalHashInfo(hash, info, promise);
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
@ReactMethod
|
|
114
114
|
public void getLocalHashInfo(String hash, Promise promise) {
|
|
115
|
-
|
|
115
|
+
impl.getLocalHashInfo(hash, promise);
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
@ReactMethod
|
|
@@ -31,6 +31,12 @@ constexpr long long kRatioCheckMinBytes = 1LL * 1024 * 1024;
|
|
|
31
31
|
constexpr long long kMaxManifestBytes = 16LL * 1024 * 1024;
|
|
32
32
|
// Free disk required beyond the bytes about to be written.
|
|
33
33
|
constexpr long long kFreeDiskMarginBytes = 64LL * 1024 * 1024;
|
|
34
|
+
// A download whose length is unknown up front (chunked / encoded body) can
|
|
35
|
+
// only reserve the margin when the response arrives; the disk is re-probed
|
|
36
|
+
// before any write that would run past the bytes reserved so far, each
|
|
37
|
+
// probe reserving at least this many bytes ahead (a single larger chunk
|
|
38
|
+
// reserves its own size), so no write can ever eat into the margin.
|
|
39
|
+
constexpr long long kUnknownLengthFreeSpaceProbeBytes = 8LL * 1024 * 1024;
|
|
34
40
|
|
|
35
41
|
} // namespace archive_limits
|
|
36
42
|
} // namespace pushy
|
|
@@ -45,12 +45,16 @@ inline std::vector<std::string> JArrayToVector(
|
|
|
45
45
|
return result;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
inline void ThrowRuntimeException(JNIEnv* env, const
|
|
48
|
+
inline void ThrowRuntimeException(JNIEnv* env, const char* message) {
|
|
49
49
|
jclass exception = env->FindClass("java/lang/RuntimeException");
|
|
50
50
|
if (exception != nullptr) {
|
|
51
|
-
env->ThrowNew(exception, message
|
|
51
|
+
env->ThrowNew(exception, message);
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
+
inline void ThrowRuntimeException(JNIEnv* env, const std::string& message) {
|
|
56
|
+
ThrowRuntimeException(env, message.c_str());
|
|
57
|
+
}
|
|
58
|
+
|
|
55
59
|
} // namespace jni_util
|
|
56
60
|
} // namespace pushy
|