react-native-update 10.59.2 → 10.61.0

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.
Files changed (877) hide show
  1. package/README-CN.md +13 -7
  2. package/README.md +15 -6
  3. package/android/build.gradle +25 -33
  4. package/android/jni/Android.mk +18 -24
  5. package/android/jni/Application.mk +3 -1
  6. package/android/lib/arm64-v8a/librnpushy.so +0 -0
  7. package/android/lib/armeabi-v7a/librnpushy.so +0 -0
  8. package/android/lib/x86/librnpushy.so +0 -0
  9. package/android/lib/x86_64/librnpushy.so +0 -0
  10. package/android/proguard.pro +9 -7
  11. package/android/src/main/java/cn/reactnative/modules/update/ApkInstaller.java +3 -8
  12. package/android/src/main/java/cn/reactnative/modules/update/ArchiveLimits.java +24 -6
  13. package/android/src/main/java/cn/reactnative/modules/update/BundlePreparationResult.java +2 -0
  14. package/android/src/main/java/cn/reactnative/modules/update/BundledResourceCopier.java +50 -51
  15. package/android/src/main/java/cn/reactnative/modules/update/CleanupKeepNames.java +12 -13
  16. package/android/src/main/java/cn/reactnative/modules/update/CopyGroupResult.java +3 -0
  17. package/android/src/main/java/cn/reactnative/modules/update/CrashHold.java +22 -30
  18. package/android/src/main/java/cn/reactnative/modules/update/DownloadTask.java +284 -452
  19. package/android/src/main/java/cn/reactnative/modules/update/DownloadTaskParams.java +8 -4
  20. package/android/src/main/java/cn/reactnative/modules/update/ErrorCodes.java +32 -3
  21. package/android/src/main/java/cn/reactnative/modules/update/FileOperationException.java +1 -1
  22. package/android/src/main/java/cn/reactnative/modules/update/FlowBridge.java +39 -8
  23. package/android/src/main/java/cn/reactnative/modules/update/HttpClients.java +63 -0
  24. package/android/src/main/java/cn/reactnative/modules/update/HttpUtils.java +0 -45
  25. package/android/src/main/java/cn/reactnative/modules/update/InstallRecord.java +68 -116
  26. package/android/src/main/java/cn/reactnative/modules/update/NativeCore.java +10 -2
  27. package/android/src/main/java/cn/reactnative/modules/update/PatchFailedException.java +1 -1
  28. package/android/src/main/java/cn/reactnative/modules/update/PushyRuntime.java +53 -62
  29. package/android/src/main/java/cn/reactnative/modules/update/ReactReloadManager.java +9 -24
  30. package/android/src/main/java/cn/reactnative/modules/update/ResumePlan.java +31 -0
  31. package/android/src/main/java/cn/reactnative/modules/update/SafeZipFile.java +42 -80
  32. package/android/src/main/java/cn/reactnative/modules/update/StateSerialRunner.java +22 -39
  33. package/android/src/main/java/cn/reactnative/modules/update/SyncCoordinator.java +474 -500
  34. package/android/src/main/java/cn/reactnative/modules/update/Texts.java +15 -1
  35. package/android/src/main/java/cn/reactnative/modules/update/Threads.java +44 -0
  36. package/android/src/main/java/cn/reactnative/modules/update/UpdateContext.java +265 -188
  37. package/android/src/main/java/cn/reactnative/modules/update/UpdateEventEmitter.java +1 -1
  38. package/android/src/main/java/cn/reactnative/modules/update/UpdateFileUtils.java +75 -17
  39. package/android/src/main/java/cn/reactnative/modules/update/{UpdateModuleImpl.java → UpdateModule.java} +114 -96
  40. package/android/src/main/java/cn/reactnative/modules/update/UpdatePackage.java +16 -19
  41. package/android/src/main/java/cn/reactnative/modules/update/VersionScopedKeys.java +64 -0
  42. package/android/src/oldarch/cn/reactnative/modules/update/NativePushySpec.java +71 -0
  43. package/cpp/android_jni/archive_limits_jni.cpp +83 -0
  44. package/cpp/android_jni/install_record_jni.cpp +89 -0
  45. package/cpp/android_jni/jni_log.h +30 -0
  46. package/cpp/android_jni/jni_natives.h +46 -0
  47. package/cpp/android_jni/jni_registration.cpp +146 -0
  48. package/cpp/android_jni/jni_util.h +160 -0
  49. package/cpp/android_jni/resume_plan_jni.cpp +58 -0
  50. package/cpp/android_jni/update_core_android.cpp +448 -0
  51. package/cpp/android_jni/update_flow_jni.cpp +150 -0
  52. package/{android/jni → cpp/hpatch}/hpatch.c +5 -5
  53. package/{android/jni → cpp/hpatch}/hpatch.h +4 -1
  54. package/cpp/patch_core/archive_limits.cpp +194 -0
  55. package/cpp/patch_core/archive_limits.h +101 -10
  56. package/cpp/patch_core/archive_patch_core.cpp +98 -15
  57. package/cpp/patch_core/archive_patch_core.h +51 -0
  58. package/cpp/patch_core/digest.h +5 -4
  59. package/cpp/patch_core/error_codes.h +15 -11
  60. package/cpp/patch_core/install_record.cpp +430 -0
  61. package/cpp/patch_core/install_record.h +165 -9
  62. package/cpp/patch_core/native_texts.h +102 -0
  63. package/cpp/patch_core/patch_core.cpp +62 -16
  64. package/cpp/patch_core/patch_core.h +27 -7
  65. package/cpp/patch_core/patch_manifest.cpp +201 -0
  66. package/cpp/patch_core/patch_manifest.h +74 -0
  67. package/cpp/patch_core/resume_plan.cpp +226 -0
  68. package/cpp/patch_core/resume_plan.h +88 -0
  69. package/cpp/patch_core/state_ops.h +5 -3
  70. package/cpp/update_flow_core/flow_json.cpp +82 -8
  71. package/cpp/update_flow_core/flow_json.h +21 -0
  72. package/cpp/update_flow_core/native_config.cpp +436 -0
  73. package/cpp/update_flow_core/native_config.h +84 -0
  74. package/cpp/update_flow_core/native_round.cpp +321 -0
  75. package/cpp/update_flow_core/native_round.h +94 -0
  76. package/cpp/update_flow_core/round_engine.cpp +456 -0
  77. package/cpp/update_flow_core/round_engine.h +106 -0
  78. package/cpp/update_flow_core/update_flow_core.cpp +5 -14
  79. package/cpp/update_flow_core/update_flow_core.h +2 -2
  80. package/harmony/hvigor-plugin.ts +11 -19
  81. package/harmony/pushy/src/main/cpp/CMakeLists.txt +19 -26
  82. package/harmony/pushy/src/main/cpp/PushyPackage.h +2 -2
  83. package/harmony/pushy/src/main/cpp/PushyTurboModule.cpp +57 -94
  84. package/harmony/pushy/src/main/cpp/pushy.cpp +817 -518
  85. package/harmony/pushy/src/main/ets/ArchiveLimits.ts +55 -75
  86. package/harmony/pushy/src/main/ets/DownloadTask.ts +279 -539
  87. package/harmony/pushy/src/main/ets/DownloadTaskParams.ts +6 -6
  88. package/harmony/pushy/src/main/ets/ErrorCodes.ts +3 -15
  89. package/harmony/pushy/src/main/ets/EventHub.ts +1 -1
  90. package/harmony/pushy/src/main/ets/InstallRecord.ts +54 -151
  91. package/harmony/pushy/src/main/ets/Logger.ts +20 -34
  92. package/harmony/pushy/src/main/ets/NativePatchCore.ts +150 -41
  93. package/harmony/pushy/src/main/ets/PushyConfiguration.ts +8 -85
  94. package/harmony/pushy/src/main/ets/PushyFileJSBundleProvider.ets +8 -3
  95. package/harmony/pushy/src/main/ets/PushyTurboModule.ts +11 -25
  96. package/harmony/pushy/src/main/ets/SaveFile.ts +99 -18
  97. package/harmony/pushy/src/main/ets/SyncCoordinator.ts +291 -543
  98. package/harmony/pushy/src/main/ets/Texts.ts +8 -7
  99. package/harmony/pushy/src/main/ets/UpdateContext.ts +245 -152
  100. package/harmony/pushy.har +0 -0
  101. package/ios/RCTPushy/RCTPushy+Launch.mm +190 -0
  102. package/ios/RCTPushy/RCTPushy.h +12 -0
  103. package/ios/RCTPushy/RCTPushy.mm +135 -2666
  104. package/ios/RCTPushy/RCTPushyCommon.h +28 -0
  105. package/ios/RCTPushy/RCTPushyConfiguration.h +0 -8
  106. package/ios/RCTPushy/RCTPushyConfiguration.mm +40 -123
  107. package/ios/RCTPushy/RCTPushyDownloader.mm +152 -198
  108. package/ios/RCTPushy/RCTPushyInstallRecord.mm +101 -0
  109. package/ios/RCTPushy/RCTPushyInstaller.mm +732 -0
  110. package/ios/RCTPushy/RCTPushyInternal.h +185 -0
  111. package/ios/RCTPushy/RCTPushyOrchestrator.mm +969 -0
  112. package/ios/RCTPushy/RCTPushyState.mm +382 -0
  113. package/package.json +46 -25
  114. package/react-native-update.podspec +73 -82
  115. package/src/client.ts +126 -1633
  116. package/src/clientActivation.ts +324 -0
  117. package/src/clientCheck.ts +405 -0
  118. package/src/clientDownload.ts +448 -0
  119. package/src/clientNativeConfig.ts +171 -0
  120. package/src/clientReporter.ts +398 -0
  121. package/src/clientState.ts +51 -0
  122. package/src/context.ts +1 -1
  123. package/src/core.ts +39 -10
  124. package/src/endpoint.ts +22 -8
  125. package/src/error.ts +18 -35
  126. package/src/i18n.ts +18 -83
  127. package/src/locales/en.ts +1 -5
  128. package/src/locales/zh.ts +1 -5
  129. package/src/provider.tsx +86 -67
  130. package/src/telemetry.ts +0 -13
  131. package/src/type.ts +0 -15
  132. package/src/updateFlowCore.ts +116 -10
  133. package/src/utils.ts +49 -42
  134. package/android/jni/HDiffPatch/.travis.yml +0 -33
  135. package/android/jni/HDiffPatch/CHANGELOG.md +0 -153
  136. package/android/jni/HDiffPatch/Makefile +0 -157
  137. package/android/jni/HDiffPatch/_atosize.h +0 -83
  138. package/android/jni/HDiffPatch/_clock_for_demo.h +0 -47
  139. package/android/jni/HDiffPatch/_dir_ignore.h +0 -191
  140. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/Android.mk +0 -37
  141. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/Application.mk +0 -7
  142. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/build_libs.bat +0 -1
  143. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/build_libs.sh +0 -1
  144. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/hpatch.c +0 -18
  145. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/hpatch.h +0 -20
  146. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/hpatch_jni.c +0 -28
  147. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/java/com/github/sisong/HPatch.java +0 -8
  148. package/android/jni/HDiffPatch/builds/codeblocks/HDiffPatch.workspace +0 -8
  149. package/android/jni/HDiffPatch/builds/codeblocks/HDiffZ.cbp +0 -219
  150. package/android/jni/HDiffPatch/builds/codeblocks/HPatchZ.cbp +0 -156
  151. package/android/jni/HDiffPatch/builds/codeblocks/unitTest.cbp +0 -65
  152. package/android/jni/HDiffPatch/builds/vc/HDiffPatch.sln +0 -105
  153. package/android/jni/HDiffPatch/builds/vc/HDiffZ.vcxproj +0 -237
  154. package/android/jni/HDiffPatch/builds/vc/HDiffZ.vcxproj.user +0 -3
  155. package/android/jni/HDiffPatch/builds/vc/HPatchZ.vcxproj +0 -318
  156. package/android/jni/HDiffPatch/builds/vc/HPatchZ.vcxproj.user +0 -3
  157. package/android/jni/HDiffPatch/builds/vc/unitTest.vcxproj +0 -182
  158. package/android/jni/HDiffPatch/builds/vc/unitTest.vcxproj.user +0 -3
  159. package/android/jni/HDiffPatch/builds/xcode/HDiffPatch.xcworkspace/contents.xcworkspacedata +0 -30
  160. package/android/jni/HDiffPatch/builds/xcode/HDiffPatch.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  161. package/android/jni/HDiffPatch/builds/xcode/bestParams.xcodeproj/project.pbxproj +0 -408
  162. package/android/jni/HDiffPatch/builds/xcode/bestParams.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  163. package/android/jni/HDiffPatch/builds/xcode/hdiffz.xcodeproj/project.pbxproj +0 -573
  164. package/android/jni/HDiffPatch/builds/xcode/hdiffz.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  165. package/android/jni/HDiffPatch/builds/xcode/hdiffz.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  166. package/android/jni/HDiffPatch/builds/xcode/hpatchz.xcodeproj/project.pbxproj +0 -396
  167. package/android/jni/HDiffPatch/builds/xcode/hpatchz.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  168. package/android/jni/HDiffPatch/builds/xcode/lz4.xcodeproj/project.pbxproj +0 -268
  169. package/android/jni/HDiffPatch/builds/xcode/lz4.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  170. package/android/jni/HDiffPatch/builds/xcode/lzma.xcodeproj/project.pbxproj +0 -361
  171. package/android/jni/HDiffPatch/builds/xcode/lzma.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  172. package/android/jni/HDiffPatch/builds/xcode/testHashClash.xcodeproj/project.pbxproj +0 -301
  173. package/android/jni/HDiffPatch/builds/xcode/testHashClash.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  174. package/android/jni/HDiffPatch/builds/xcode/testHashClash.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  175. package/android/jni/HDiffPatch/builds/xcode/unitTest.xcodeproj/project.pbxproj +0 -411
  176. package/android/jni/HDiffPatch/builds/xcode/unitTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  177. package/android/jni/HDiffPatch/builds/xcode/zstd.xcodeproj/project.pbxproj +0 -504
  178. package/android/jni/HDiffPatch/builds/xcode/zstd.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  179. package/android/jni/HDiffPatch/checksum_plugin_demo.h +0 -344
  180. package/android/jni/HDiffPatch/compress_parallel.cpp +0 -166
  181. package/android/jni/HDiffPatch/compress_parallel.h +0 -59
  182. package/android/jni/HDiffPatch/compress_plugin_demo.h +0 -1152
  183. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff.cpp +0 -797
  184. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff.h +0 -65
  185. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff_tools.cpp +0 -200
  186. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff_tools.h +0 -178
  187. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_manifest.cpp +0 -357
  188. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_manifest.h +0 -87
  189. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/file_for_dirDiff.h +0 -151
  190. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch.c +0 -770
  191. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch.h +0 -236
  192. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_private.h +0 -47
  193. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_tools.c +0 -112
  194. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_tools.h +0 -53
  195. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_dir_output.c +0 -331
  196. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_dir_output.h +0 -144
  197. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_stream.c +0 -176
  198. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_stream.h +0 -84
  199. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/ref_stream.c +0 -146
  200. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/ref_stream.h +0 -61
  201. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/res_handle_limit.c +0 -152
  202. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/res_handle_limit.h +0 -76
  203. package/android/jni/HDiffPatch/hdiffz.cpp +0 -1570
  204. package/android/jni/HDiffPatch/hpatch_dir_listener.h +0 -290
  205. package/android/jni/HDiffPatch/hpatchz.c +0 -1221
  206. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/diff.cpp +0 -1025
  207. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/diff.h +0 -116
  208. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/diff_types.h +0 -72
  209. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/bytes_rle.cpp +0 -213
  210. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/bytes_rle.h +0 -63
  211. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/compress_detect.cpp +0 -170
  212. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/compress_detect.h +0 -86
  213. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/config.h +0 -89
  214. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.c +0 -13
  215. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.c.inc.h +0 -398
  216. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.h +0 -194
  217. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort64.c +0 -13
  218. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort64.h +0 -204
  219. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort_private.h +0 -207
  220. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/sssort.c.inc.h +0 -815
  221. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/trsort.c.inc.h +0 -586
  222. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/utils.c.inc.h +0 -381
  223. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/adler_roll.c +0 -352
  224. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/adler_roll.h +0 -137
  225. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/bloom_filter.h +0 -137
  226. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/covers.h +0 -70
  227. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/digest_matcher.cpp +0 -628
  228. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/digest_matcher.h +0 -87
  229. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/stream_serialize.cpp +0 -363
  230. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/stream_serialize.h +0 -139
  231. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/mem_buf.h +0 -68
  232. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/pack_uint.h +0 -115
  233. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/suffix_string.cpp +0 -342
  234. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/suffix_string.h +0 -94
  235. package/android/jni/HDiffPatch/libHDiffPatch/HPatch/checksum_plugin.h +0 -52
  236. package/android/jni/HDiffPatch/libParallel/parallel_channel.cpp +0 -174
  237. package/android/jni/HDiffPatch/libParallel/parallel_channel.h +0 -73
  238. package/android/jni/HDiffPatch/libParallel/parallel_import.cpp +0 -367
  239. package/android/jni/HDiffPatch/libParallel/parallel_import.h +0 -92
  240. package/android/jni/lzma/Asm/arm/7zCrcOpt.asm +0 -100
  241. package/android/jni/lzma/Asm/x86/7zAsm.asm +0 -147
  242. package/android/jni/lzma/Asm/x86/7zCrcOpt.asm +0 -147
  243. package/android/jni/lzma/Asm/x86/AesOpt.asm +0 -237
  244. package/android/jni/lzma/Asm/x86/LzmaDecOpt.asm +0 -1258
  245. package/android/jni/lzma/Asm/x86/XzCrc64Opt.asm +0 -205
  246. package/android/jni/lzma/C/7z.h +0 -202
  247. package/android/jni/lzma/C/7zAlloc.c +0 -80
  248. package/android/jni/lzma/C/7zAlloc.h +0 -19
  249. package/android/jni/lzma/C/7zArcIn.c +0 -1771
  250. package/android/jni/lzma/C/7zBuf.c +0 -36
  251. package/android/jni/lzma/C/7zBuf.h +0 -35
  252. package/android/jni/lzma/C/7zBuf2.c +0 -52
  253. package/android/jni/lzma/C/7zCrc.c +0 -128
  254. package/android/jni/lzma/C/7zCrc.h +0 -25
  255. package/android/jni/lzma/C/7zCrcOpt.c +0 -115
  256. package/android/jni/lzma/C/7zDec.c +0 -591
  257. package/android/jni/lzma/C/7zFile.c +0 -286
  258. package/android/jni/lzma/C/7zFile.h +0 -83
  259. package/android/jni/lzma/C/7zStream.c +0 -176
  260. package/android/jni/lzma/C/7zVersion.h +0 -27
  261. package/android/jni/lzma/C/7zVersion.rc +0 -55
  262. package/android/jni/lzma/C/Aes.c +0 -306
  263. package/android/jni/lzma/C/Aes.h +0 -38
  264. package/android/jni/lzma/C/AesOpt.c +0 -184
  265. package/android/jni/lzma/C/Alloc.c +0 -455
  266. package/android/jni/lzma/C/Alloc.h +0 -51
  267. package/android/jni/lzma/C/Bcj2.c +0 -257
  268. package/android/jni/lzma/C/Bcj2.h +0 -146
  269. package/android/jni/lzma/C/Bcj2Enc.c +0 -311
  270. package/android/jni/lzma/C/Bra.c +0 -230
  271. package/android/jni/lzma/C/Bra.h +0 -64
  272. package/android/jni/lzma/C/Bra86.c +0 -82
  273. package/android/jni/lzma/C/BraIA64.c +0 -53
  274. package/android/jni/lzma/C/CpuArch.c +0 -218
  275. package/android/jni/lzma/C/CpuArch.h +0 -336
  276. package/android/jni/lzma/C/Delta.c +0 -64
  277. package/android/jni/lzma/C/Delta.h +0 -19
  278. package/android/jni/lzma/C/DllSecur.c +0 -108
  279. package/android/jni/lzma/C/DllSecur.h +0 -20
  280. package/android/jni/lzma/C/LzFind.c +0 -1127
  281. package/android/jni/lzma/C/LzFind.h +0 -121
  282. package/android/jni/lzma/C/LzFindMt.c +0 -853
  283. package/android/jni/lzma/C/LzFindMt.h +0 -101
  284. package/android/jni/lzma/C/LzHash.h +0 -57
  285. package/android/jni/lzma/C/Lzma2DecMt.c +0 -1082
  286. package/android/jni/lzma/C/Lzma2DecMt.h +0 -79
  287. package/android/jni/lzma/C/Lzma2Enc.c +0 -803
  288. package/android/jni/lzma/C/Lzma2Enc.h +0 -55
  289. package/android/jni/lzma/C/Lzma86.h +0 -111
  290. package/android/jni/lzma/C/Lzma86Dec.c +0 -54
  291. package/android/jni/lzma/C/Lzma86Enc.c +0 -106
  292. package/android/jni/lzma/C/LzmaEnc.c +0 -2976
  293. package/android/jni/lzma/C/LzmaEnc.h +0 -76
  294. package/android/jni/lzma/C/LzmaLib.c +0 -40
  295. package/android/jni/lzma/C/LzmaLib.h +0 -131
  296. package/android/jni/lzma/C/MtCoder.c +0 -601
  297. package/android/jni/lzma/C/MtCoder.h +0 -141
  298. package/android/jni/lzma/C/MtDec.c +0 -1138
  299. package/android/jni/lzma/C/MtDec.h +0 -201
  300. package/android/jni/lzma/C/Ppmd.h +0 -85
  301. package/android/jni/lzma/C/Ppmd7.c +0 -712
  302. package/android/jni/lzma/C/Ppmd7.h +0 -142
  303. package/android/jni/lzma/C/Ppmd7Dec.c +0 -191
  304. package/android/jni/lzma/C/Ppmd7Enc.c +0 -187
  305. package/android/jni/lzma/C/RotateDefs.h +0 -30
  306. package/android/jni/lzma/C/Sha256.c +0 -248
  307. package/android/jni/lzma/C/Sha256.h +0 -26
  308. package/android/jni/lzma/C/Sort.c +0 -141
  309. package/android/jni/lzma/C/Sort.h +0 -18
  310. package/android/jni/lzma/C/Threads.c +0 -95
  311. package/android/jni/lzma/C/Threads.h +0 -70
  312. package/android/jni/lzma/C/ThreadsP.c +0 -396
  313. package/android/jni/lzma/C/ThreadsP.h +0 -31
  314. package/android/jni/lzma/C/Util/7z/7z.dsp +0 -241
  315. package/android/jni/lzma/C/Util/7z/7z.dsw +0 -29
  316. package/android/jni/lzma/C/Util/7z/7zMain.c +0 -686
  317. package/android/jni/lzma/C/Util/7z/Precomp.c +0 -4
  318. package/android/jni/lzma/C/Util/7z/Precomp.h +0 -10
  319. package/android/jni/lzma/C/Util/7z/makefile +0 -40
  320. package/android/jni/lzma/C/Util/7z/makefile.gcc +0 -75
  321. package/android/jni/lzma/C/Util/Lzma/LzmaUtil.c +0 -258
  322. package/android/jni/lzma/C/Util/Lzma/LzmaUtil.dsp +0 -168
  323. package/android/jni/lzma/C/Util/Lzma/LzmaUtil.dsw +0 -29
  324. package/android/jni/lzma/C/Util/Lzma/makefile +0 -28
  325. package/android/jni/lzma/C/Util/Lzma/makefile.gcc +0 -44
  326. package/android/jni/lzma/C/Util/LzmaLib/LzmaLib.def +0 -4
  327. package/android/jni/lzma/C/Util/LzmaLib/LzmaLib.dsp +0 -178
  328. package/android/jni/lzma/C/Util/LzmaLib/LzmaLib.dsw +0 -29
  329. package/android/jni/lzma/C/Util/LzmaLib/LzmaLibExports.c +0 -14
  330. package/android/jni/lzma/C/Util/LzmaLib/makefile +0 -34
  331. package/android/jni/lzma/C/Util/LzmaLib/resource.rc +0 -3
  332. package/android/jni/lzma/C/Util/SfxSetup/Precomp.c +0 -4
  333. package/android/jni/lzma/C/Util/SfxSetup/Precomp.h +0 -10
  334. package/android/jni/lzma/C/Util/SfxSetup/SfxSetup.c +0 -640
  335. package/android/jni/lzma/C/Util/SfxSetup/SfxSetup.dsp +0 -231
  336. package/android/jni/lzma/C/Util/SfxSetup/SfxSetup.dsw +0 -29
  337. package/android/jni/lzma/C/Util/SfxSetup/makefile +0 -37
  338. package/android/jni/lzma/C/Util/SfxSetup/makefile_con +0 -38
  339. package/android/jni/lzma/C/Util/SfxSetup/resource.rc +0 -5
  340. package/android/jni/lzma/C/Util/SfxSetup/setup.ico +0 -0
  341. package/android/jni/lzma/C/Xz.c +0 -90
  342. package/android/jni/lzma/C/Xz.h +0 -460
  343. package/android/jni/lzma/C/XzCrc64.c +0 -86
  344. package/android/jni/lzma/C/XzCrc64.h +0 -26
  345. package/android/jni/lzma/C/XzCrc64Opt.c +0 -69
  346. package/android/jni/lzma/C/XzDec.c +0 -2766
  347. package/android/jni/lzma/C/XzEnc.c +0 -1329
  348. package/android/jni/lzma/C/XzEnc.h +0 -60
  349. package/android/jni/lzma/C/XzIn.c +0 -319
  350. package/android/jni/lzma/CPP/7zip/7zip.mak +0 -240
  351. package/android/jni/lzma/CPP/7zip/Aes.mak +0 -7
  352. package/android/jni/lzma/CPP/7zip/Archive/7z/7zCompressionMode.cpp +0 -3
  353. package/android/jni/lzma/CPP/7zip/Archive/7z/7zCompressionMode.h +0 -76
  354. package/android/jni/lzma/CPP/7zip/Archive/7z/7zDecode.cpp +0 -569
  355. package/android/jni/lzma/CPP/7zip/Archive/7z/7zDecode.h +0 -70
  356. package/android/jni/lzma/CPP/7zip/Archive/7z/7zEncode.cpp +0 -678
  357. package/android/jni/lzma/CPP/7zip/Archive/7z/7zEncode.h +0 -92
  358. package/android/jni/lzma/CPP/7zip/Archive/7z/7zExtract.cpp +0 -423
  359. package/android/jni/lzma/CPP/7zip/Archive/7z/7zFolderInStream.cpp +0 -139
  360. package/android/jni/lzma/CPP/7zip/Archive/7z/7zFolderInStream.h +0 -61
  361. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHandler.cpp +0 -763
  362. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHandler.h +0 -181
  363. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHandlerOut.cpp +0 -942
  364. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHeader.cpp +0 -19
  365. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHeader.h +0 -148
  366. package/android/jni/lzma/CPP/7zip/Archive/7z/7zIn.cpp +0 -1666
  367. package/android/jni/lzma/CPP/7zip/Archive/7z/7zIn.h +0 -445
  368. package/android/jni/lzma/CPP/7zip/Archive/7z/7zItem.h +0 -202
  369. package/android/jni/lzma/CPP/7zip/Archive/7z/7zOut.cpp +0 -901
  370. package/android/jni/lzma/CPP/7zip/Archive/7z/7zOut.h +0 -335
  371. package/android/jni/lzma/CPP/7zip/Archive/7z/7zProperties.cpp +0 -174
  372. package/android/jni/lzma/CPP/7zip/Archive/7z/7zProperties.h +0 -22
  373. package/android/jni/lzma/CPP/7zip/Archive/7z/7zRegister.cpp +0 -21
  374. package/android/jni/lzma/CPP/7zip/Archive/7z/7zSpecStream.cpp +0 -22
  375. package/android/jni/lzma/CPP/7zip/Archive/7z/7zSpecStream.h +0 -35
  376. package/android/jni/lzma/CPP/7zip/Archive/7z/7zUpdate.cpp +0 -2500
  377. package/android/jni/lzma/CPP/7zip/Archive/7z/7zUpdate.h +0 -139
  378. package/android/jni/lzma/CPP/7zip/Archive/7z/StdAfx.cpp +0 -3
  379. package/android/jni/lzma/CPP/7zip/Archive/7z/StdAfx.h +0 -8
  380. package/android/jni/lzma/CPP/7zip/Archive/Archive.def +0 -12
  381. package/android/jni/lzma/CPP/7zip/Archive/Archive2.def +0 -19
  382. package/android/jni/lzma/CPP/7zip/Archive/ArchiveExports.cpp +0 -151
  383. package/android/jni/lzma/CPP/7zip/Archive/Common/CoderMixer2.cpp +0 -1125
  384. package/android/jni/lzma/CPP/7zip/Archive/Common/CoderMixer2.h +0 -447
  385. package/android/jni/lzma/CPP/7zip/Archive/Common/DummyOutStream.cpp +0 -17
  386. package/android/jni/lzma/CPP/7zip/Archive/Common/DummyOutStream.h +0 -25
  387. package/android/jni/lzma/CPP/7zip/Archive/Common/HandlerOut.cpp +0 -232
  388. package/android/jni/lzma/CPP/7zip/Archive/Common/HandlerOut.h +0 -110
  389. package/android/jni/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.cpp +0 -46
  390. package/android/jni/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.h +0 -67
  391. package/android/jni/lzma/CPP/7zip/Archive/Common/ItemNameUtils.cpp +0 -88
  392. package/android/jni/lzma/CPP/7zip/Archive/Common/ItemNameUtils.h +0 -28
  393. package/android/jni/lzma/CPP/7zip/Archive/Common/MultiStream.cpp +0 -191
  394. package/android/jni/lzma/CPP/7zip/Archive/Common/MultiStream.h +0 -89
  395. package/android/jni/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp +0 -18
  396. package/android/jni/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.h +0 -37
  397. package/android/jni/lzma/CPP/7zip/Archive/Common/ParseProperties.cpp +0 -3
  398. package/android/jni/lzma/CPP/7zip/Archive/Common/ParseProperties.h +0 -6
  399. package/android/jni/lzma/CPP/7zip/Archive/Common/StdAfx.h +0 -8
  400. package/android/jni/lzma/CPP/7zip/Archive/DllExports2.cpp +0 -122
  401. package/android/jni/lzma/CPP/7zip/Archive/IArchive.h +0 -608
  402. package/android/jni/lzma/CPP/7zip/Archive/Icons/7z.ico +0 -0
  403. package/android/jni/lzma/CPP/7zip/Archive/LzmaHandler.cpp +0 -629
  404. package/android/jni/lzma/CPP/7zip/Archive/SplitHandler.cpp +0 -359
  405. package/android/jni/lzma/CPP/7zip/Archive/StdAfx.h +0 -8
  406. package/android/jni/lzma/CPP/7zip/Archive/XzHandler.cpp +0 -1308
  407. package/android/jni/lzma/CPP/7zip/Archive/XzHandler.h +0 -11
  408. package/android/jni/lzma/CPP/7zip/Asm.mak +0 -9
  409. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsp +0 -1910
  410. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsw +0 -29
  411. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.cpp +0 -3
  412. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.h +0 -8
  413. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/makefile +0 -154
  414. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/resource.rc +0 -7
  415. package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.cpp +0 -3
  416. package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.h +0 -8
  417. package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/makefile +0 -96
  418. package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/resource.rc +0 -5
  419. package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.cpp +0 -3
  420. package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.h +0 -8
  421. package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/makefile +0 -116
  422. package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/resource.rc +0 -5
  423. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/LzmaAlone.cpp +0 -799
  424. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/LzmaCon.dsp +0 -477
  425. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/LzmaCon.dsw +0 -29
  426. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/StdAfx.cpp +0 -3
  427. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/StdAfx.h +0 -8
  428. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/makefile +0 -59
  429. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/makefile.gcc +0 -195
  430. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/resource.rc +0 -3
  431. package/android/jni/lzma/CPP/7zip/Bundles/LzmaSpec/LzmaSpec.cpp +0 -715
  432. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/7z.ico +0 -0
  433. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/SFXCon.dsp +0 -912
  434. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/SFXCon.dsw +0 -29
  435. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/SfxCon.cpp +0 -482
  436. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/StdAfx.cpp +0 -3
  437. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/StdAfx.h +0 -8
  438. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/makefile +0 -134
  439. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/resource.rc +0 -5
  440. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.cpp +0 -246
  441. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.h +0 -86
  442. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.cpp +0 -137
  443. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.h +0 -11
  444. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/SFXSetup.dsp +0 -803
  445. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/SFXSetup.dsw +0 -29
  446. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/SfxSetup.cpp +0 -364
  447. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/StdAfx.cpp +0 -3
  448. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/StdAfx.h +0 -13
  449. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/makefile +0 -117
  450. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/resource.h +0 -6
  451. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/resource.rc +0 -16
  452. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/setup.ico +0 -0
  453. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/7z.ico +0 -0
  454. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/SFXWin.dsp +0 -988
  455. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/SFXWin.dsw +0 -29
  456. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/SfxWin.cpp +0 -241
  457. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/StdAfx.cpp +0 -3
  458. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/StdAfx.h +0 -14
  459. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/makefile +0 -153
  460. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/resource.h +0 -1
  461. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/resource.rc +0 -50
  462. package/android/jni/lzma/CPP/7zip/Common/CWrappers.cpp +0 -250
  463. package/android/jni/lzma/CPP/7zip/Common/CWrappers.h +0 -120
  464. package/android/jni/lzma/CPP/7zip/Common/CreateCoder.cpp +0 -536
  465. package/android/jni/lzma/CPP/7zip/Common/CreateCoder.h +0 -192
  466. package/android/jni/lzma/CPP/7zip/Common/FilePathAutoRename.cpp +0 -46
  467. package/android/jni/lzma/CPP/7zip/Common/FilePathAutoRename.h +0 -10
  468. package/android/jni/lzma/CPP/7zip/Common/FileStreams.cpp +0 -475
  469. package/android/jni/lzma/CPP/7zip/Common/FileStreams.h +0 -166
  470. package/android/jni/lzma/CPP/7zip/Common/FilterCoder.cpp +0 -435
  471. package/android/jni/lzma/CPP/7zip/Common/FilterCoder.h +0 -205
  472. package/android/jni/lzma/CPP/7zip/Common/InBuffer.cpp +0 -163
  473. package/android/jni/lzma/CPP/7zip/Common/InBuffer.h +0 -92
  474. package/android/jni/lzma/CPP/7zip/Common/InOutTempBuffer.cpp +0 -127
  475. package/android/jni/lzma/CPP/7zip/Common/InOutTempBuffer.h +0 -48
  476. package/android/jni/lzma/CPP/7zip/Common/LimitedStreams.cpp +0 -367
  477. package/android/jni/lzma/CPP/7zip/Common/LimitedStreams.h +0 -252
  478. package/android/jni/lzma/CPP/7zip/Common/LockedStream.cpp +0 -3
  479. package/android/jni/lzma/CPP/7zip/Common/LockedStream.h +0 -6
  480. package/android/jni/lzma/CPP/7zip/Common/MethodId.cpp +0 -3
  481. package/android/jni/lzma/CPP/7zip/Common/MethodId.h +0 -10
  482. package/android/jni/lzma/CPP/7zip/Common/MethodProps.cpp +0 -509
  483. package/android/jni/lzma/CPP/7zip/Common/MethodProps.h +0 -264
  484. package/android/jni/lzma/CPP/7zip/Common/OffsetStream.cpp +0 -39
  485. package/android/jni/lzma/CPP/7zip/Common/OffsetStream.h +0 -26
  486. package/android/jni/lzma/CPP/7zip/Common/OutBuffer.cpp +0 -111
  487. package/android/jni/lzma/CPP/7zip/Common/OutBuffer.h +0 -66
  488. package/android/jni/lzma/CPP/7zip/Common/ProgressUtils.cpp +0 -51
  489. package/android/jni/lzma/CPP/7zip/Common/ProgressUtils.h +0 -35
  490. package/android/jni/lzma/CPP/7zip/Common/PropId.cpp +0 -108
  491. package/android/jni/lzma/CPP/7zip/Common/RegisterArc.h +0 -78
  492. package/android/jni/lzma/CPP/7zip/Common/RegisterCodec.h +0 -106
  493. package/android/jni/lzma/CPP/7zip/Common/StdAfx.h +0 -8
  494. package/android/jni/lzma/CPP/7zip/Common/StreamBinder.cpp +0 -156
  495. package/android/jni/lzma/CPP/7zip/Common/StreamBinder.h +0 -60
  496. package/android/jni/lzma/CPP/7zip/Common/StreamObjects.cpp +0 -285
  497. package/android/jni/lzma/CPP/7zip/Common/StreamObjects.h +0 -157
  498. package/android/jni/lzma/CPP/7zip/Common/StreamUtils.cpp +0 -56
  499. package/android/jni/lzma/CPP/7zip/Common/StreamUtils.h +0 -13
  500. package/android/jni/lzma/CPP/7zip/Common/UniqBlocks.cpp +0 -57
  501. package/android/jni/lzma/CPP/7zip/Common/UniqBlocks.h +0 -26
  502. package/android/jni/lzma/CPP/7zip/Common/VirtThread.cpp +0 -48
  503. package/android/jni/lzma/CPP/7zip/Common/VirtThread.h +0 -24
  504. package/android/jni/lzma/CPP/7zip/Compress/Bcj2Coder.cpp +0 -666
  505. package/android/jni/lzma/CPP/7zip/Compress/Bcj2Coder.h +0 -120
  506. package/android/jni/lzma/CPP/7zip/Compress/Bcj2Register.cpp +0 -24
  507. package/android/jni/lzma/CPP/7zip/Compress/BcjCoder.cpp +0 -24
  508. package/android/jni/lzma/CPP/7zip/Compress/BcjCoder.h +0 -31
  509. package/android/jni/lzma/CPP/7zip/Compress/BcjRegister.cpp +0 -17
  510. package/android/jni/lzma/CPP/7zip/Compress/BranchMisc.cpp +0 -23
  511. package/android/jni/lzma/CPP/7zip/Compress/BranchMisc.h +0 -35
  512. package/android/jni/lzma/CPP/7zip/Compress/BranchRegister.cpp +0 -41
  513. package/android/jni/lzma/CPP/7zip/Compress/ByteSwap.cpp +0 -92
  514. package/android/jni/lzma/CPP/7zip/Compress/CodecExports.cpp +0 -344
  515. package/android/jni/lzma/CPP/7zip/Compress/CopyCoder.cpp +0 -120
  516. package/android/jni/lzma/CPP/7zip/Compress/CopyCoder.h +0 -49
  517. package/android/jni/lzma/CPP/7zip/Compress/CopyRegister.cpp +0 -15
  518. package/android/jni/lzma/CPP/7zip/Compress/DeltaFilter.cpp +0 -128
  519. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Decoder.cpp +0 -265
  520. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Decoder.h +0 -96
  521. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Encoder.cpp +0 -122
  522. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Encoder.h +0 -42
  523. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Register.cpp +0 -22
  524. package/android/jni/lzma/CPP/7zip/Compress/LzmaDecoder.cpp +0 -343
  525. package/android/jni/lzma/CPP/7zip/Compress/LzmaDecoder.h +0 -113
  526. package/android/jni/lzma/CPP/7zip/Compress/LzmaEncoder.cpp +0 -182
  527. package/android/jni/lzma/CPP/7zip/Compress/LzmaEncoder.h +0 -46
  528. package/android/jni/lzma/CPP/7zip/Compress/LzmaRegister.cpp +0 -22
  529. package/android/jni/lzma/CPP/7zip/Compress/PpmdDecoder.cpp +0 -170
  530. package/android/jni/lzma/CPP/7zip/Compress/PpmdDecoder.h +0 -86
  531. package/android/jni/lzma/CPP/7zip/Compress/PpmdEncoder.cpp +0 -152
  532. package/android/jni/lzma/CPP/7zip/Compress/PpmdEncoder.h +0 -58
  533. package/android/jni/lzma/CPP/7zip/Compress/PpmdRegister.cpp +0 -22
  534. package/android/jni/lzma/CPP/7zip/Compress/StdAfx.h +0 -8
  535. package/android/jni/lzma/CPP/7zip/Compress/XzDecoder.cpp +0 -150
  536. package/android/jni/lzma/CPP/7zip/Compress/XzDecoder.h +0 -92
  537. package/android/jni/lzma/CPP/7zip/Compress/XzEncoder.cpp +0 -245
  538. package/android/jni/lzma/CPP/7zip/Compress/XzEncoder.h +0 -46
  539. package/android/jni/lzma/CPP/7zip/Crc.mak +0 -8
  540. package/android/jni/lzma/CPP/7zip/Crc64.mak +0 -8
  541. package/android/jni/lzma/CPP/7zip/Crypto/7zAes.cpp +0 -280
  542. package/android/jni/lzma/CPP/7zip/Crypto/7zAes.h +0 -118
  543. package/android/jni/lzma/CPP/7zip/Crypto/7zAesRegister.cpp +0 -17
  544. package/android/jni/lzma/CPP/7zip/Crypto/MyAes.cpp +0 -112
  545. package/android/jni/lzma/CPP/7zip/Crypto/MyAes.h +0 -57
  546. package/android/jni/lzma/CPP/7zip/Crypto/MyAesReg.cpp +0 -16
  547. package/android/jni/lzma/CPP/7zip/Crypto/RandGen.cpp +0 -233
  548. package/android/jni/lzma/CPP/7zip/Crypto/RandGen.h +0 -40
  549. package/android/jni/lzma/CPP/7zip/Crypto/StdAfx.h +0 -8
  550. package/android/jni/lzma/CPP/7zip/GuiCommon.rc +0 -84
  551. package/android/jni/lzma/CPP/7zip/Guid.txt +0 -220
  552. package/android/jni/lzma/CPP/7zip/ICoder.h +0 -399
  553. package/android/jni/lzma/CPP/7zip/IDecl.h +0 -28
  554. package/android/jni/lzma/CPP/7zip/IPassword.h +0 -23
  555. package/android/jni/lzma/CPP/7zip/IProgress.h +0 -19
  556. package/android/jni/lzma/CPP/7zip/IStream.h +0 -127
  557. package/android/jni/lzma/CPP/7zip/LzmaDec.mak +0 -5
  558. package/android/jni/lzma/CPP/7zip/MyVersion.h +0 -2
  559. package/android/jni/lzma/CPP/7zip/MyVersionInfo.rc +0 -2
  560. package/android/jni/lzma/CPP/7zip/PropID.h +0 -127
  561. package/android/jni/lzma/CPP/7zip/SubBuild.mak +0 -3
  562. package/android/jni/lzma/CPP/7zip/UI/Client7z/Client7z.cpp +0 -993
  563. package/android/jni/lzma/CPP/7zip/UI/Client7z/Client7z.dsp +0 -235
  564. package/android/jni/lzma/CPP/7zip/UI/Client7z/Client7z.dsw +0 -29
  565. package/android/jni/lzma/CPP/7zip/UI/Client7z/StdAfx.cpp +0 -3
  566. package/android/jni/lzma/CPP/7zip/UI/Client7z/StdAfx.h +0 -8
  567. package/android/jni/lzma/CPP/7zip/UI/Client7z/makefile +0 -28
  568. package/android/jni/lzma/CPP/7zip/UI/Client7z/resource.rc +0 -3
  569. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.cpp +0 -1295
  570. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.h +0 -136
  571. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.cpp +0 -1715
  572. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.h +0 -403
  573. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveName.cpp +0 -155
  574. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveName.h +0 -10
  575. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.cpp +0 -161
  576. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.h +0 -112
  577. package/android/jni/lzma/CPP/7zip/UI/Common/Bench.cpp +0 -3618
  578. package/android/jni/lzma/CPP/7zip/UI/Common/Bench.h +0 -77
  579. package/android/jni/lzma/CPP/7zip/UI/Common/DefaultName.cpp +0 -37
  580. package/android/jni/lzma/CPP/7zip/UI/Common/DefaultName.h +0 -11
  581. package/android/jni/lzma/CPP/7zip/UI/Common/DirItem.h +0 -190
  582. package/android/jni/lzma/CPP/7zip/UI/Common/EnumDirItems.cpp +0 -1096
  583. package/android/jni/lzma/CPP/7zip/UI/Common/EnumDirItems.h +0 -42
  584. package/android/jni/lzma/CPP/7zip/UI/Common/ExitCode.h +0 -27
  585. package/android/jni/lzma/CPP/7zip/UI/Common/Extract.cpp +0 -482
  586. package/android/jni/lzma/CPP/7zip/UI/Common/Extract.h +0 -94
  587. package/android/jni/lzma/CPP/7zip/UI/Common/ExtractMode.h +0 -34
  588. package/android/jni/lzma/CPP/7zip/UI/Common/ExtractingFilePath.cpp +0 -280
  589. package/android/jni/lzma/CPP/7zip/UI/Common/ExtractingFilePath.h +0 -31
  590. package/android/jni/lzma/CPP/7zip/UI/Common/HashCalc.cpp +0 -347
  591. package/android/jni/lzma/CPP/7zip/UI/Common/HashCalc.h +0 -110
  592. package/android/jni/lzma/CPP/7zip/UI/Common/IFileExtractCallback.h +0 -114
  593. package/android/jni/lzma/CPP/7zip/UI/Common/LoadCodecs.cpp +0 -1074
  594. package/android/jni/lzma/CPP/7zip/UI/Common/LoadCodecs.h +0 -424
  595. package/android/jni/lzma/CPP/7zip/UI/Common/OpenArchive.cpp +0 -3553
  596. package/android/jni/lzma/CPP/7zip/UI/Common/OpenArchive.h +0 -436
  597. package/android/jni/lzma/CPP/7zip/UI/Common/PropIDUtils.cpp +0 -668
  598. package/android/jni/lzma/CPP/7zip/UI/Common/PropIDUtils.h +0 -18
  599. package/android/jni/lzma/CPP/7zip/UI/Common/Property.h +0 -14
  600. package/android/jni/lzma/CPP/7zip/UI/Common/SetProperties.cpp +0 -80
  601. package/android/jni/lzma/CPP/7zip/UI/Common/SetProperties.h +0 -10
  602. package/android/jni/lzma/CPP/7zip/UI/Common/SortUtils.cpp +0 -25
  603. package/android/jni/lzma/CPP/7zip/UI/Common/SortUtils.h +0 -10
  604. package/android/jni/lzma/CPP/7zip/UI/Common/StdAfx.h +0 -8
  605. package/android/jni/lzma/CPP/7zip/UI/Common/TempFiles.cpp +0 -19
  606. package/android/jni/lzma/CPP/7zip/UI/Common/TempFiles.h +0 -16
  607. package/android/jni/lzma/CPP/7zip/UI/Common/Update.cpp +0 -1704
  608. package/android/jni/lzma/CPP/7zip/UI/Common/Update.h +0 -200
  609. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateAction.cpp +0 -64
  610. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateAction.h +0 -66
  611. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateCallback.cpp +0 -771
  612. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateCallback.h +0 -162
  613. package/android/jni/lzma/CPP/7zip/UI/Common/UpdatePair.cpp +0 -233
  614. package/android/jni/lzma/CPP/7zip/UI/Common/UpdatePair.h +0 -27
  615. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateProduce.cpp +0 -70
  616. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateProduce.h +0 -55
  617. package/android/jni/lzma/CPP/7zip/UI/Common/WorkDir.cpp +0 -94
  618. package/android/jni/lzma/CPP/7zip/UI/Common/WorkDir.h +0 -26
  619. package/android/jni/lzma/CPP/7zip/UI/Common/ZipRegistry.h +0 -130
  620. package/android/jni/lzma/CPP/7zip/UI/Console/BenchCon.cpp +0 -41
  621. package/android/jni/lzma/CPP/7zip/UI/Console/BenchCon.h +0 -14
  622. package/android/jni/lzma/CPP/7zip/UI/Console/Console.mak +0 -43
  623. package/android/jni/lzma/CPP/7zip/UI/Console/Console.manifest +0 -13
  624. package/android/jni/lzma/CPP/7zip/UI/Console/ConsoleClose.cpp +0 -69
  625. package/android/jni/lzma/CPP/7zip/UI/Console/ConsoleClose.h +0 -33
  626. package/android/jni/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp +0 -825
  627. package/android/jni/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.h +0 -164
  628. package/android/jni/lzma/CPP/7zip/UI/Console/HashCon.cpp +0 -367
  629. package/android/jni/lzma/CPP/7zip/UI/Console/HashCon.h +0 -48
  630. package/android/jni/lzma/CPP/7zip/UI/Console/List.cpp +0 -1359
  631. package/android/jni/lzma/CPP/7zip/UI/Console/List.h +0 -27
  632. package/android/jni/lzma/CPP/7zip/UI/Console/Main.cpp +0 -1154
  633. package/android/jni/lzma/CPP/7zip/UI/Console/MainAr.cpp +0 -175
  634. package/android/jni/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.cpp +0 -115
  635. package/android/jni/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.h +0 -66
  636. package/android/jni/lzma/CPP/7zip/UI/Console/PercentPrinter.cpp +0 -183
  637. package/android/jni/lzma/CPP/7zip/UI/Console/PercentPrinter.h +0 -62
  638. package/android/jni/lzma/CPP/7zip/UI/Console/StdAfx.cpp +0 -3
  639. package/android/jni/lzma/CPP/7zip/UI/Console/StdAfx.h +0 -8
  640. package/android/jni/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.cpp +0 -702
  641. package/android/jni/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.h +0 -124
  642. package/android/jni/lzma/CPP/7zip/UI/Console/UserInputUtils.cpp +0 -110
  643. package/android/jni/lzma/CPP/7zip/UI/Console/UserInputUtils.h +0 -27
  644. package/android/jni/lzma/CPP/7zip/UI/Console/makefile +0 -64
  645. package/android/jni/lzma/CPP/7zip/UI/Console/resource.rc +0 -7
  646. package/android/jni/lzma/CPP/7zip/UI/Explorer/MyMessages.cpp +0 -37
  647. package/android/jni/lzma/CPP/7zip/UI/Explorer/MyMessages.h +0 -16
  648. package/android/jni/lzma/CPP/7zip/UI/FileManager/BrowseDialog.cpp +0 -1025
  649. package/android/jni/lzma/CPP/7zip/UI/FileManager/BrowseDialog.h +0 -21
  650. package/android/jni/lzma/CPP/7zip/UI/FileManager/BrowseDialogRes.h +0 -9
  651. package/android/jni/lzma/CPP/7zip/UI/FileManager/ComboDialog.cpp +0 -64
  652. package/android/jni/lzma/CPP/7zip/UI/FileManager/ComboDialog.h +0 -28
  653. package/android/jni/lzma/CPP/7zip/UI/FileManager/ComboDialogRes.h +0 -4
  654. package/android/jni/lzma/CPP/7zip/UI/FileManager/DialogSize.h +0 -16
  655. package/android/jni/lzma/CPP/7zip/UI/FileManager/ExtractCallback.cpp +0 -1037
  656. package/android/jni/lzma/CPP/7zip/UI/FileManager/ExtractCallback.h +0 -328
  657. package/android/jni/lzma/CPP/7zip/UI/FileManager/FormatUtils.cpp +0 -28
  658. package/android/jni/lzma/CPP/7zip/UI/FileManager/FormatUtils.h +0 -14
  659. package/android/jni/lzma/CPP/7zip/UI/FileManager/LangUtils.h +0 -40
  660. package/android/jni/lzma/CPP/7zip/UI/FileManager/MyWindowsNew.h +0 -76
  661. package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.cpp +0 -122
  662. package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.h +0 -69
  663. package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.rc +0 -91
  664. package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialogRes.h +0 -17
  665. package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialog.cpp +0 -58
  666. package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialog.h +0 -28
  667. package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialog.rc +0 -14
  668. package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialogRes.h +0 -5
  669. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog.cpp +0 -196
  670. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog.h +0 -170
  671. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog.rc +0 -12
  672. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.cpp +0 -1337
  673. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.h +0 -351
  674. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.rc +0 -40
  675. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2Res.h +0 -48
  676. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2a.rc +0 -80
  677. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialogRes.h +0 -3
  678. package/android/jni/lzma/CPP/7zip/UI/FileManager/PropertyName.cpp +0 -23
  679. package/android/jni/lzma/CPP/7zip/UI/FileManager/PropertyName.h +0 -10
  680. package/android/jni/lzma/CPP/7zip/UI/FileManager/PropertyNameRes.h +0 -95
  681. package/android/jni/lzma/CPP/7zip/UI/FileManager/SysIconUtils.cpp +0 -255
  682. package/android/jni/lzma/CPP/7zip/UI/FileManager/SysIconUtils.h +0 -62
  683. package/android/jni/lzma/CPP/7zip/UI/FileManager/resource.h +0 -177
  684. package/android/jni/lzma/CPP/7zip/UI/FileManager/resourceGui.h +0 -15
  685. package/android/jni/lzma/CPP/7zip/UI/GUI/Extract.rc +0 -59
  686. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialog.cpp +0 -418
  687. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialog.h +0 -113
  688. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialog.rc +0 -98
  689. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialogRes.h +0 -24
  690. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractGUI.cpp +0 -280
  691. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractGUI.h +0 -38
  692. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractRes.h +0 -51
  693. package/android/jni/lzma/CPP/7zip/UI/GUI/HashGUI.h +0 -27
  694. package/android/jni/lzma/CPP/7zip/UI/GUI/resource2.h +0 -2
  695. package/android/jni/lzma/CPP/Build.mak +0 -156
  696. package/android/jni/lzma/CPP/Common/AutoPtr.h +0 -35
  697. package/android/jni/lzma/CPP/Common/CRC.cpp +0 -7
  698. package/android/jni/lzma/CPP/Common/C_FileIO.cpp +0 -92
  699. package/android/jni/lzma/CPP/Common/C_FileIO.h +0 -53
  700. package/android/jni/lzma/CPP/Common/ComTry.h +0 -21
  701. package/android/jni/lzma/CPP/Common/CommandLineParser.cpp +0 -197
  702. package/android/jni/lzma/CPP/Common/CommandLineParser.h +0 -63
  703. package/android/jni/lzma/CPP/Common/Common.h +0 -43
  704. package/android/jni/lzma/CPP/Common/CrcReg.cpp +0 -98
  705. package/android/jni/lzma/CPP/Common/Defs.h +0 -15
  706. package/android/jni/lzma/CPP/Common/DynamicBuffer.h +0 -64
  707. package/android/jni/lzma/CPP/Common/IntToString.cpp +0 -193
  708. package/android/jni/lzma/CPP/Common/IntToString.h +0 -28
  709. package/android/jni/lzma/CPP/Common/Lang.h +0 -23
  710. package/android/jni/lzma/CPP/Common/ListFileUtils.cpp +0 -132
  711. package/android/jni/lzma/CPP/Common/ListFileUtils.h +0 -18
  712. package/android/jni/lzma/CPP/Common/MyBuffer.h +0 -259
  713. package/android/jni/lzma/CPP/Common/MyBuffer2.h +0 -100
  714. package/android/jni/lzma/CPP/Common/MyCom.h +0 -277
  715. package/android/jni/lzma/CPP/Common/MyException.h +0 -14
  716. package/android/jni/lzma/CPP/Common/MyGuidDef.h +0 -54
  717. package/android/jni/lzma/CPP/Common/MyInitGuid.h +0 -45
  718. package/android/jni/lzma/CPP/Common/MyLinux.h +0 -42
  719. package/android/jni/lzma/CPP/Common/MyString.cpp +0 -1659
  720. package/android/jni/lzma/CPP/Common/MyString.h +0 -868
  721. package/android/jni/lzma/CPP/Common/MyTypes.h +0 -35
  722. package/android/jni/lzma/CPP/Common/MyUnknown.h +0 -17
  723. package/android/jni/lzma/CPP/Common/MyVector.cpp +0 -3
  724. package/android/jni/lzma/CPP/Common/MyVector.h +0 -634
  725. package/android/jni/lzma/CPP/Common/MyWindows.cpp +0 -145
  726. package/android/jni/lzma/CPP/Common/MyWindows.h +0 -231
  727. package/android/jni/lzma/CPP/Common/NewHandler.cpp +0 -163
  728. package/android/jni/lzma/CPP/Common/NewHandler.h +0 -88
  729. package/android/jni/lzma/CPP/Common/Sha256Reg.cpp +0 -40
  730. package/android/jni/lzma/CPP/Common/StdAfx.h +0 -8
  731. package/android/jni/lzma/CPP/Common/StdInStream.cpp +0 -89
  732. package/android/jni/lzma/CPP/Common/StdInStream.h +0 -38
  733. package/android/jni/lzma/CPP/Common/StdOutStream.cpp +0 -163
  734. package/android/jni/lzma/CPP/Common/StdOutStream.h +0 -71
  735. package/android/jni/lzma/CPP/Common/StringConvert.cpp +0 -319
  736. package/android/jni/lzma/CPP/Common/StringConvert.h +0 -88
  737. package/android/jni/lzma/CPP/Common/StringToInt.cpp +0 -144
  738. package/android/jni/lzma/CPP/Common/StringToInt.h +0 -21
  739. package/android/jni/lzma/CPP/Common/TextConfig.cpp +0 -124
  740. package/android/jni/lzma/CPP/Common/TextConfig.h +0 -19
  741. package/android/jni/lzma/CPP/Common/UTFConvert.cpp +0 -288
  742. package/android/jni/lzma/CPP/Common/UTFConvert.h +0 -12
  743. package/android/jni/lzma/CPP/Common/Wildcard.cpp +0 -676
  744. package/android/jni/lzma/CPP/Common/Wildcard.h +0 -149
  745. package/android/jni/lzma/CPP/Common/XzCrc64Init.cpp +0 -7
  746. package/android/jni/lzma/CPP/Common/XzCrc64Reg.cpp +0 -42
  747. package/android/jni/lzma/CPP/Windows/COM.h +0 -70
  748. package/android/jni/lzma/CPP/Windows/CommonDialog.cpp +0 -185
  749. package/android/jni/lzma/CPP/Windows/CommonDialog.h +0 -23
  750. package/android/jni/lzma/CPP/Windows/Control/ComboBox.cpp +0 -66
  751. package/android/jni/lzma/CPP/Windows/Control/ComboBox.h +0 -65
  752. package/android/jni/lzma/CPP/Windows/Control/CommandBar.h +0 -52
  753. package/android/jni/lzma/CPP/Windows/Control/Dialog.cpp +0 -251
  754. package/android/jni/lzma/CPP/Windows/Control/Dialog.h +0 -170
  755. package/android/jni/lzma/CPP/Windows/Control/Edit.h +0 -19
  756. package/android/jni/lzma/CPP/Windows/Control/ImageList.cpp +0 -10
  757. package/android/jni/lzma/CPP/Windows/Control/ImageList.h +0 -87
  758. package/android/jni/lzma/CPP/Windows/Control/ListView.cpp +0 -155
  759. package/android/jni/lzma/CPP/Windows/Control/ListView.h +0 -146
  760. package/android/jni/lzma/CPP/Windows/Control/ProgressBar.h +0 -35
  761. package/android/jni/lzma/CPP/Windows/Control/PropertyPage.cpp +0 -143
  762. package/android/jni/lzma/CPP/Windows/Control/PropertyPage.h +0 -50
  763. package/android/jni/lzma/CPP/Windows/Control/ReBar.h +0 -34
  764. package/android/jni/lzma/CPP/Windows/Control/Static.h +0 -28
  765. package/android/jni/lzma/CPP/Windows/Control/StatusBar.h +0 -42
  766. package/android/jni/lzma/CPP/Windows/Control/StdAfx.h +0 -8
  767. package/android/jni/lzma/CPP/Windows/Control/ToolBar.h +0 -43
  768. package/android/jni/lzma/CPP/Windows/Control/Trackbar.h +0 -27
  769. package/android/jni/lzma/CPP/Windows/Control/Window2.cpp +0 -200
  770. package/android/jni/lzma/CPP/Windows/Control/Window2.h +0 -51
  771. package/android/jni/lzma/CPP/Windows/DLL.cpp +0 -109
  772. package/android/jni/lzma/CPP/Windows/DLL.h +0 -58
  773. package/android/jni/lzma/CPP/Windows/Defs.h +0 -17
  774. package/android/jni/lzma/CPP/Windows/ErrorMsg.cpp +0 -66
  775. package/android/jni/lzma/CPP/Windows/ErrorMsg.h +0 -15
  776. package/android/jni/lzma/CPP/Windows/FileDir.cpp +0 -714
  777. package/android/jni/lzma/CPP/Windows/FileDir.h +0 -117
  778. package/android/jni/lzma/CPP/Windows/FileFind.cpp +0 -749
  779. package/android/jni/lzma/CPP/Windows/FileFind.h +0 -161
  780. package/android/jni/lzma/CPP/Windows/FileIO.cpp +0 -432
  781. package/android/jni/lzma/CPP/Windows/FileIO.h +0 -212
  782. package/android/jni/lzma/CPP/Windows/FileLink.cpp +0 -440
  783. package/android/jni/lzma/CPP/Windows/FileMapping.cpp +0 -12
  784. package/android/jni/lzma/CPP/Windows/FileMapping.h +0 -66
  785. package/android/jni/lzma/CPP/Windows/FileName.cpp +0 -839
  786. package/android/jni/lzma/CPP/Windows/FileName.h +0 -115
  787. package/android/jni/lzma/CPP/Windows/FileSystem.cpp +0 -131
  788. package/android/jni/lzma/CPP/Windows/FileSystem.h +0 -27
  789. package/android/jni/lzma/CPP/Windows/Handle.h +0 -37
  790. package/android/jni/lzma/CPP/Windows/MemoryLock.cpp +0 -112
  791. package/android/jni/lzma/CPP/Windows/MemoryLock.h +0 -40
  792. package/android/jni/lzma/CPP/Windows/NtCheck.h +0 -46
  793. package/android/jni/lzma/CPP/Windows/PropVariant.cpp +0 -347
  794. package/android/jni/lzma/CPP/Windows/PropVariant.h +0 -114
  795. package/android/jni/lzma/CPP/Windows/PropVariantConv.cpp +0 -138
  796. package/android/jni/lzma/CPP/Windows/PropVariantConv.h +0 -37
  797. package/android/jni/lzma/CPP/Windows/Registry.cpp +0 -390
  798. package/android/jni/lzma/CPP/Windows/Registry.h +0 -84
  799. package/android/jni/lzma/CPP/Windows/ResourceString.cpp +0 -103
  800. package/android/jni/lzma/CPP/Windows/ResourceString.h +0 -16
  801. package/android/jni/lzma/CPP/Windows/SecurityUtils.cpp +0 -181
  802. package/android/jni/lzma/CPP/Windows/SecurityUtils.h +0 -167
  803. package/android/jni/lzma/CPP/Windows/Shell.cpp +0 -358
  804. package/android/jni/lzma/CPP/Windows/Shell.h +0 -94
  805. package/android/jni/lzma/CPP/Windows/StdAfx.h +0 -8
  806. package/android/jni/lzma/CPP/Windows/Synchronization.cpp +0 -10
  807. package/android/jni/lzma/CPP/Windows/Synchronization.h +0 -164
  808. package/android/jni/lzma/CPP/Windows/System.cpp +0 -142
  809. package/android/jni/lzma/CPP/Windows/System.h +0 -40
  810. package/android/jni/lzma/CPP/Windows/Thread.h +0 -38
  811. package/android/jni/lzma/CPP/Windows/TimeUtils.cpp +0 -213
  812. package/android/jni/lzma/CPP/Windows/TimeUtils.h +0 -32
  813. package/android/jni/lzma/CPP/Windows/Window.cpp +0 -179
  814. package/android/jni/lzma/CPP/Windows/Window.h +0 -284
  815. package/android/jni/lzma/CS/7zip/Common/CRC.cs +0 -55
  816. package/android/jni/lzma/CS/7zip/Common/CommandLineParser.cs +0 -274
  817. package/android/jni/lzma/CS/7zip/Common/InBuffer.cs +0 -72
  818. package/android/jni/lzma/CS/7zip/Common/OutBuffer.cs +0 -47
  819. package/android/jni/lzma/CS/7zip/Compress/LZ/IMatchFinder.cs +0 -24
  820. package/android/jni/lzma/CS/7zip/Compress/LZ/LzBinTree.cs +0 -367
  821. package/android/jni/lzma/CS/7zip/Compress/LZ/LzInWindow.cs +0 -132
  822. package/android/jni/lzma/CS/7zip/Compress/LZ/LzOutWindow.cs +0 -110
  823. package/android/jni/lzma/CS/7zip/Compress/LZMA/LzmaBase.cs +0 -76
  824. package/android/jni/lzma/CS/7zip/Compress/LZMA/LzmaDecoder.cs +0 -398
  825. package/android/jni/lzma/CS/7zip/Compress/LZMA/LzmaEncoder.cs +0 -1480
  826. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.cs +0 -364
  827. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.csproj +0 -90
  828. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.sln +0 -20
  829. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaBench.cs +0 -340
  830. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/Properties/AssemblyInfo.cs +0 -29
  831. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/Properties/Resources.cs +0 -70
  832. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/Properties/Settings.cs +0 -42
  833. package/android/jni/lzma/CS/7zip/Compress/RangeCoder/RangeCoder.cs +0 -234
  834. package/android/jni/lzma/CS/7zip/Compress/RangeCoder/RangeCoderBit.cs +0 -117
  835. package/android/jni/lzma/CS/7zip/Compress/RangeCoder/RangeCoderBitTree.cs +0 -157
  836. package/android/jni/lzma/CS/7zip/ICoder.cs +0 -157
  837. package/android/jni/lzma/DOC/7zC.txt +0 -187
  838. package/android/jni/lzma/DOC/7zFormat.txt +0 -469
  839. package/android/jni/lzma/DOC/Methods.txt +0 -173
  840. package/android/jni/lzma/DOC/installer.txt +0 -166
  841. package/android/jni/lzma/DOC/lzma-history.txt +0 -446
  842. package/android/jni/lzma/DOC/lzma-specification.txt +0 -1176
  843. package/android/jni/lzma/DOC/lzma.txt +0 -328
  844. package/android/jni/lzma/Java/SevenZip/CRC.java +0 -52
  845. package/android/jni/lzma/Java/SevenZip/Compression/LZ/BinTree.java +0 -382
  846. package/android/jni/lzma/Java/SevenZip/Compression/LZ/InWindow.java +0 -131
  847. package/android/jni/lzma/Java/SevenZip/Compression/LZ/OutWindow.java +0 -85
  848. package/android/jni/lzma/Java/SevenZip/Compression/LZMA/Base.java +0 -88
  849. package/android/jni/lzma/Java/SevenZip/Compression/LZMA/Decoder.java +0 -329
  850. package/android/jni/lzma/Java/SevenZip/Compression/LZMA/Encoder.java +0 -1416
  851. package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeDecoder.java +0 -55
  852. package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeEncoder.java +0 -99
  853. package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/Decoder.java +0 -88
  854. package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/Encoder.java +0 -151
  855. package/android/jni/lzma/Java/SevenZip/ICodeProgress.java +0 -6
  856. package/android/jni/lzma/Java/SevenZip/LzmaAlone.java +0 -253
  857. package/android/jni/lzma/Java/SevenZip/LzmaBench.java +0 -392
  858. package/android/jni/lzma/bin/7zS2.sfx +0 -0
  859. package/android/jni/lzma/bin/7zS2con.sfx +0 -0
  860. package/android/jni/lzma/bin/7zSD.sfx +0 -0
  861. package/android/jni/lzma/bin/7zdec.exe +0 -0
  862. package/android/jni/lzma/bin/7zr.exe +0 -0
  863. package/android/jni/lzma/bin/installer/config.txt +0 -5
  864. package/android/jni/lzma/bin/installer/cr.bat +0 -5
  865. package/android/jni/lzma/bin/lzma.exe +0 -0
  866. package/android/jni/lzma/bin/x64/7zr.exe +0 -0
  867. package/android/src/main/java/cn/reactnative/modules/update/ArchivePatchPlanResult.java +0 -6
  868. package/android/src/main/java/cn/reactnative/modules/update/PushyConfiguration.java +0 -104
  869. package/android/src/main/java/cn/reactnative/modules/update/UiThreadRunner.java +0 -37
  870. package/android/src/newarch/cn/reactnative/modules/update/UpdateModule.java +0 -121
  871. package/android/src/oldarch/cn/reactnative/modules/update/UpdateModule.java +0 -125
  872. package/cpp/patch_core/jni_natives.h +0 -27
  873. package/cpp/patch_core/jni_registration.cpp +0 -103
  874. package/cpp/patch_core/jni_util.h +0 -60
  875. package/cpp/patch_core/patch_core_android.cpp +0 -97
  876. package/cpp/patch_core/update_core_android.cpp +0 -485
  877. package/cpp/update_flow_core/update_flow_jni.cpp +0 -150
@@ -6,15 +6,15 @@ import android.os.Looper;
6
6
  import android.util.Log;
7
7
  import com.facebook.react.bridge.Arguments;
8
8
  import com.facebook.react.bridge.WritableMap;
9
- import java.io.ByteArrayOutputStream;
10
9
  import java.io.File;
10
+ import java.io.FileOutputStream;
11
11
  import java.io.IOException;
12
12
  import java.io.InputStream;
13
13
  import java.nio.charset.StandardCharsets;
14
+ import java.security.DigestOutputStream;
15
+ import java.security.MessageDigest;
14
16
  import java.util.ArrayList;
15
17
  import java.util.Enumeration;
16
- import java.util.HashMap;
17
- import java.util.Iterator;
18
18
  import java.util.zip.ZipEntry;
19
19
  import okhttp3.Call;
20
20
  import okhttp3.OkHttpClient;
@@ -24,16 +24,15 @@ import okhttp3.ResponseBody;
24
24
  import okio.BufferedSink;
25
25
  import okio.BufferedSource;
26
26
  import okio.Okio;
27
- import org.json.JSONException;
28
27
  import org.json.JSONObject;
29
- import org.json.JSONTokener;
30
28
 
31
29
  class DownloadTask implements Runnable {
32
30
  // Bundle delta entry inside a patch archive, stored encoded.
33
31
  private static final String BUNDLE_DELTA_ENTRY =
34
- Texts.reveal("3319f0d4b6c56a502c3b10fcdca0de7d4b3307e9");
32
+ Texts.BUNDLE_DELTA_ENTRY;
35
33
 
36
- private static final int DOWNLOAD_CHUNK_SIZE = 4096;
34
+ // Resume sidecars are a few hundred bytes of JSON.
35
+ private static final long MAX_SIDECAR_BYTES = 64 * 1024;
37
36
  // When the server does not report Content-Length we cannot key progress
38
37
  // events on percentage change, so throttle by bytes to avoid flooding the
39
38
  // bridge (e.g. a 20MB chunked download would otherwise emit ~5000 events).
@@ -42,17 +41,13 @@ class DownloadTask implements Runnable {
42
41
  // slow-dripping connection could occupy the single-threaded download
43
42
  // executor indefinitely and starve queued tasks. The call timeout is a
44
43
  // generous upper bound sized for large full-package downloads.
45
- private static final OkHttpClient HTTP_CLIENT = new OkHttpClient.Builder()
44
+ private static final OkHttpClient HTTP_CLIENT = HttpClients.base().newBuilder()
46
45
  .connectTimeout(15, java.util.concurrent.TimeUnit.SECONDS)
47
46
  .readTimeout(30, java.util.concurrent.TimeUnit.SECONDS)
48
47
  .writeTimeout(30, java.util.concurrent.TimeUnit.SECONDS)
49
48
  .callTimeout(10, java.util.concurrent.TimeUnit.MINUTES)
50
49
  .build();
51
50
 
52
- static {
53
- NativeCore.ensureLoaded();
54
- }
55
-
56
51
  // Two-phase install (cpp/patch_core/install_record.h): all unpack/patch
57
52
  // work happens in <hash>.staging; the final <hash> directory only ever
58
53
  // appears through an atomic rename after the completion record was
@@ -62,36 +57,32 @@ class DownloadTask implements Runnable {
62
57
  return InstallRecord.stagingDirectoryFor(params.unzipDirectory);
63
58
  }
64
59
 
65
- // SHA-256 of the downloaded archive, computed right before extraction.
60
+ // SHA-256 of the downloaded archive, recorded in the install record.
66
61
  private String artifactSha256 = "";
67
-
62
+ // The archive digest computed while its bytes streamed to disk (a resumed
63
+ // transfer first hashes the prefix already on disk); null when this task
64
+ // did not stream the whole file itself and it must be hashed from disk.
65
+ private String streamedArchiveSha256;
66
+ // Digest of the bundle computed while a full package was extracted;
67
+ // null when the bundle was produced some other way (patch tasks).
68
+ private String stagedBundleSha256;
69
+
70
+ /** What a staged patch archive declared, as the native core consumes it. */
68
71
  private static final class PatchArchiveContents {
69
- final ArrayList<String> entryNames = new ArrayList<String>();
70
- final ArrayList<String> copyFroms = new ArrayList<String>();
71
- final ArrayList<String> copyTos = new ArrayList<String>();
72
- final ArrayList<String> deletes = new ArrayList<String>();
73
- // __diff.json 的 hbcTransform 元数据(按 patch 条目名索引);
74
- // 为空对象/缺失时返回 ""(native 走现状路径)
75
- JSONObject hbcTransform;
76
-
77
- String hbcTransformMetaFor(String patchEntryName) {
78
- if (hbcTransform == null) {
79
- return "";
80
- }
81
- JSONObject meta = hbcTransform.optJSONObject(patchEntryName);
82
- return meta != null ? meta.toString() : "";
72
+ final String[] entryNames;
73
+ // The raw __diff.json bytes (UTF-8): parsed only by the native core
74
+ // (cpp/patch_core/patch_manifest.h), never here.
75
+ final byte[] manifestJson;
76
+
77
+ PatchArchiveContents(ArrayList<String> entryNames, byte[] manifestJson) {
78
+ this.entryNames = entryNames.toArray(new String[0]);
79
+ this.manifestJson = manifestJson;
83
80
  }
84
- // Maps a copy source path ("from") to the CRC32 of the file content,
85
- // when provided by the manifest ("copiesCrc"). Lets the resource
86
- // copier locate the file by content if the path is not present on
87
- // device (APK baseline -> AAB install path shortening).
88
- final HashMap<String, Long> copyCrcs = new HashMap<String, Long>();
89
81
  }
90
82
 
91
83
  private final Context context;
92
84
  private final DownloadTaskParams params;
93
85
  private final Handler mainHandler = new Handler(Looper.getMainLooper());
94
- private final byte[] buffer = new byte[DOWNLOAD_CHUNK_SIZE];
95
86
  private final BundledResourceCopier bundledResourceCopier;
96
87
  private String hash;
97
88
  // Set once downloadFile() returns: failures after this point in a patch
@@ -108,15 +99,12 @@ class DownloadTask implements Runnable {
108
99
  // Cross-platform progress contract: unknown length is reported as
109
100
  // total=0, never a raw -1 (OkHttp's contentLength for chunked/gzip).
110
101
  final long normalizedTotal = total > 0 ? total : 0;
111
- mainHandler.post(new Runnable() {
112
- @Override
113
- public void run() {
114
- WritableMap progress = Arguments.createMap();
115
- progress.putDouble("received", received);
116
- progress.putDouble("total", normalizedTotal);
117
- progress.putString("hash", hash);
118
- UpdateEventEmitter.sendEvent("RCTPushyDownloadProgress", progress);
119
- }
102
+ mainHandler.post(() -> {
103
+ WritableMap progress = Arguments.createMap();
104
+ progress.putDouble("received", received);
105
+ progress.putDouble("total", normalizedTotal);
106
+ progress.putString("hash", hash);
107
+ UpdateEventEmitter.sendEvent("RCTPushyDownloadProgress", progress);
120
108
  });
121
109
  }
122
110
 
@@ -130,54 +118,30 @@ class DownloadTask implements Runnable {
130
118
 
131
119
  static void deleteResumeSidecar(File archive) {
132
120
  File sidecar = resumeSidecarFile(archive);
133
- if (sidecar.exists() && !sidecar.delete() && UpdateContext.DEBUG) {
121
+ if (sidecar.exists() && !sidecar.delete() && BuildConfig.DEBUG) {
134
122
  Log.w(Texts.LOG_TAG, "Failed to delete resume sidecar " + sidecar);
135
123
  }
136
124
  }
137
125
 
138
- private JSONObject readResumeMeta(File sidecar, String url) {
126
+ // The sidecar's text, "" when there is none or it cannot be one (larger
127
+ // than a sidecar ever is, unreadable): ResumePlan treats both as "no
128
+ // trusted partial".
129
+ private static String readSidecarText(File sidecar) {
139
130
  if (!sidecar.isFile()) {
140
- return null;
131
+ return "";
141
132
  }
142
133
  try {
143
- byte[] bytes = readBytes(new java.io.FileInputStream(sidecar));
144
- JSONObject meta = (JSONObject) new JSONTokener(
145
- new String(bytes, StandardCharsets.UTF_8)).nextValue();
146
- if (url.equals(meta.optString("url"))) {
147
- return meta;
148
- }
134
+ return UpdateFileUtils.readSmallUtf8(sidecar, MAX_SIDECAR_BYTES);
149
135
  } catch (Throwable e) {
150
- // A corrupt sidecar simply means "cannot resume".
136
+ return "";
151
137
  }
152
- return null;
153
138
  }
154
139
 
155
- private void writeResumeMeta(
156
- File sidecar, String url, Response response, JSONObject previousMeta, long total
157
- ) {
140
+ private static void writeSidecarText(File sidecar, String text) {
158
141
  try {
159
- JSONObject meta = new JSONObject();
160
- meta.put("url", url);
161
- String etag = response.header("ETag");
162
- String lastModified = response.header("Last-Modified");
163
- if (etag == null && previousMeta != null) {
164
- etag = previousMeta.optString("etag", null);
165
- }
166
- if (lastModified == null && previousMeta != null) {
167
- lastModified = previousMeta.optString("lastModified", null);
168
- }
169
- if (etag != null) {
170
- meta.put("etag", etag);
171
- }
172
- if (lastModified != null) {
173
- meta.put("lastModified", lastModified);
174
- }
175
- if (total > 0) {
176
- meta.put("total", total);
177
- }
178
142
  UpdateFileUtils.ensureParentDirectory(sidecar);
179
143
  try (java.io.FileOutputStream out = new java.io.FileOutputStream(sidecar)) {
180
- out.write(meta.toString().getBytes(StandardCharsets.UTF_8));
144
+ out.write(text.getBytes(StandardCharsets.UTF_8));
181
145
  }
182
146
  } catch (Throwable e) {
183
147
  // Non-fatal: without a sidecar the next attempt starts from zero.
@@ -185,8 +149,21 @@ class DownloadTask implements Runnable {
185
149
  }
186
150
  }
187
151
 
152
+ // A ResumePlan result; null from the native core means memory ran out.
153
+ private static JSONObject resumeDecision(String json) throws IOException {
154
+ if (json == null) {
155
+ throw new IOException("resume plan failed");
156
+ }
157
+ try {
158
+ return new JSONObject(json);
159
+ } catch (org.json.JSONException e) {
160
+ throw new IOException("resume plan failed", e);
161
+ }
162
+ }
163
+
188
164
  private void downloadFile() throws IOException {
189
165
  this.hash = params.hash;
166
+ streamedArchiveSha256 = null;
190
167
  String url = params.url;
191
168
  File writePath = params.targetFile;
192
169
  File sidecar = resumeSidecarFile(writePath);
@@ -195,142 +172,114 @@ class DownloadTask implements Runnable {
195
172
  // Cross-launch resume (NATIVE_CHECKUPDATE_DESIGN §11.4): a brick gets
196
173
  // a few hundred milliseconds per launch plus a bounded crash-rescue
197
174
  // window, so every partial byte must survive process death and count.
198
- long resumeOffset = 0;
199
- JSONObject resumeMeta = readResumeMeta(sidecar, url);
200
- if (resumeMeta != null && writePath.isFile() && writePath.length() > 0) {
201
- long knownTotal = resumeMeta.optLong("total", 0);
202
- long size = writePath.length();
203
- if (knownTotal > 0 && size == knownTotal) {
204
- // Fully received in a previous attempt (the process died
205
- // between download end and unzip): nothing left to transfer.
206
- downloadPhaseCompleted = true;
207
- postProgress(knownTotal, knownTotal);
208
- return;
209
- }
210
- if (knownTotal <= 0 || size < knownTotal) {
211
- resumeOffset = size;
212
- }
213
- }
214
- if (resumeOffset == 0) {
215
- if (writePath.exists() && !writePath.delete()) {
216
- throw new IOException("Failed to replace existing file: " + writePath);
217
- }
218
- deleteResumeSidecar(writePath);
175
+ // What to request is the shared core's decision (ResumePlan).
176
+ String sidecarText = readSidecarText(sidecar);
177
+ JSONObject plan = resumeDecision(ResumePlan.planRequest(
178
+ sidecarText, url, writePath.isFile() ? writePath.length() : 0));
179
+ String action = plan.optString("action");
180
+ if ("complete".equals(action)) {
181
+ // Fully received in a previous attempt (the process died
182
+ // between download end and unzip): nothing left to transfer.
183
+ long total = plan.optLong("total");
184
+ downloadPhaseCompleted = true;
185
+ postProgress(total, total);
186
+ return;
219
187
  }
220
-
221
- if (!transferArchive(url, writePath, sidecar, resumeMeta, resumeOffset)) {
222
- // The server rejected the range for a partial that no longer
223
- // matches (416): drop it and retry once from zero.
224
- if (writePath.exists() && !writePath.delete()) {
225
- throw new IOException("Failed to replace existing file: " + writePath);
226
- }
227
- deleteResumeSidecar(writePath);
228
- if (!transferArchive(url, writePath, sidecar, null, 0)) {
188
+ long resumeOffset = 0;
189
+ JSONObject headers = null;
190
+ if ("resume".equals(action)) {
191
+ resumeOffset = plan.optLong("offset");
192
+ headers = plan.optJSONObject("headers");
193
+ } else {
194
+ discardPartial(writePath);
195
+ sidecarText = "";
196
+ }
197
+
198
+ if (!transferArchive(url, writePath, sidecar, sidecarText, resumeOffset, headers)) {
199
+ // The partial no longer matches what the server serves (a stale
200
+ // 416, an untrusted range response): drop it and retry once from
201
+ // zero.
202
+ discardPartial(writePath);
203
+ if (!transferArchive(url, writePath, sidecar, "", 0, null)) {
229
204
  throw new IOException("Server rejected the download range for " + url);
230
205
  }
231
206
  }
232
207
  downloadPhaseCompleted = true;
233
208
  }
234
209
 
210
+ /** Drops a partial download and its sidecar; throws when the bytes stay. */
211
+ private static void discardPartial(File archive) throws IOException {
212
+ if (archive.exists() && !archive.delete()) {
213
+ throw new IOException("Failed to replace existing file: " + archive);
214
+ }
215
+ deleteResumeSidecar(archive);
216
+ }
217
+
235
218
  /**
236
219
  * One HTTP transfer, appending from resumeOffset when the server honours
237
- * the range. Returns false only for the retryable stale-partial case
238
- * (416 with a size mismatch); throws on every other failure.
220
+ * the range. Returns false only when the partial must be discarded and the
221
+ * download retried from zero (ResumePlan's "restart"); throws on every
222
+ * other failure.
239
223
  */
240
224
  private boolean transferArchive(
241
- String url, File writePath, File sidecar, JSONObject resumeMeta, long resumeOffset
225
+ String url, File writePath, File sidecar, String sidecarText, long resumeOffset,
226
+ JSONObject resumeHeaders
242
227
  ) throws IOException {
243
228
  Request.Builder builder = new Request.Builder().url(url);
244
- if (resumeOffset > 0) {
245
- // Only resume requests pin the encoding: Range offsets must
246
- // address the same bytes that are on disk. Fresh downloads keep
247
- // OkHttp's transparent gzip (it decompresses and strips the
248
- // headers itself), matching the pre-resume behaviour for servers
249
- // that compress regardless.
250
- builder.header("Accept-Encoding", "identity");
251
- builder.header("Range", "bytes=" + resumeOffset + "-");
252
- String validator = null;
253
- if (resumeMeta != null) {
254
- validator = resumeMeta.optString("etag", null);
255
- if (validator == null) {
256
- validator = resumeMeta.optString("lastModified", null);
257
- }
258
- }
259
- if (validator != null) {
260
- // With a validator the server falls back to a full 200 when
261
- // the file changed instead of appending mismatched bytes.
262
- builder.header("If-Range", validator);
229
+ if (resumeHeaders != null) {
230
+ // Range, Accept-Encoding: identity and If-Range (ResumePlan).
231
+ // Fresh downloads send none of them and keep OkHttp's
232
+ // transparent gzip, which decompresses and strips the headers.
233
+ java.util.Iterator<String> names = resumeHeaders.keys();
234
+ while (names.hasNext()) {
235
+ String name = names.next();
236
+ builder.header(name, resumeHeaders.optString(name));
263
237
  }
264
238
  }
265
239
 
266
- OkHttpClient requestClient = HTTP_CLIENT;
267
- if (params.deadlineNanos > 0) {
268
- long remainingNanos = params.deadlineNanos - System.nanoTime();
269
- if (remainingNanos <= 0) {
270
- throw new IOException("Download deadline expired before start");
271
- }
272
- long remainingMillis = Math.max(
273
- 1L,
274
- java.util.concurrent.TimeUnit.NANOSECONDS.toMillis(remainingNanos)
275
- );
276
- requestClient = HTTP_CLIENT.newBuilder()
277
- .callTimeout(remainingMillis, java.util.concurrent.TimeUnit.MILLISECONDS)
278
- .build();
279
- }
280
-
281
- Call call = requestClient.newCall(builder.build());
240
+ Call call = HttpClients.withDeadline(HTTP_CLIENT, params.deadlineNanos)
241
+ .newCall(builder.build());
282
242
  // Registered so an orchestrated phase timeout can cancel it
283
243
  // (CODE_AUDIT 2.12); cleared once the transfer is over.
284
244
  params.attachCall(call);
285
245
  try (Response response = call.execute()) {
286
- rejectProtocolDowngrade(url, response);
287
- if (response.code() == 416) {
288
- long total = resumeMeta == null ? 0 : resumeMeta.optLong("total", 0);
289
- if (total > 0 && writePath.length() == total) {
290
- // The partial is actually the complete file.
291
- postProgress(total, total);
292
- return true;
293
- }
246
+ HttpClients.rejectProtocolDowngrade(url, response);
247
+ ResponseBody body = response.body();
248
+ long contentLength = body == null ? -1 : body.contentLength();
249
+ // The Content-Encoding header is visible only when the server
250
+ // encoded the body itself (OkHttp strips it when it transparently
251
+ // decompresses its own gzip).
252
+ JSONObject decision = resumeDecision(ResumePlan.classifyResponse(
253
+ response.code(),
254
+ resumeOffset,
255
+ response.header("Content-Range"),
256
+ response.header("Content-Encoding"),
257
+ contentLength,
258
+ sidecarText,
259
+ url,
260
+ writePath.isFile() ? writePath.length() : 0));
261
+ String action = decision.optString("action");
262
+ if ("complete".equals(action)) {
263
+ // The partial is actually the complete file.
264
+ long total = decision.optLong("total");
265
+ postProgress(total, total);
266
+ return true;
267
+ }
268
+ if ("restart".equals(action)) {
294
269
  return false;
295
270
  }
296
- if (!response.isSuccessful()) {
271
+ if (!"write".equals(action)) {
272
+ // The partial and its sidecar stay: that is the resume state.
297
273
  throw new IOException("Server error: " + response.code() + " " + response.message());
298
274
  }
299
-
300
- ResponseBody body = response.body();
301
275
  if (body == null) {
302
276
  throw new IOException("Empty response body for " + url);
303
277
  }
304
278
 
305
- String contentEncoding = response.header("Content-Encoding");
306
- // Visible only when the server encoded the body itself (OkHttp
307
- // strips the header when it transparently decompresses its own
308
- // gzip). Byte offsets in an encoded representation do not match
309
- // the decoded bytes on disk, so resume is off the table.
310
- boolean encodedBody = contentEncoding != null
311
- && !contentEncoding.equalsIgnoreCase("identity");
312
- boolean append = response.code() == 206 && resumeOffset > 0;
313
- if (append && encodedBody) {
314
- // The server ignored Accept-Encoding: identity on a range
315
- // request; the appended bytes could not be trusted.
316
- return false;
317
- }
318
- long baseOffset = append ? resumeOffset : 0;
319
- long contentLength = body.contentLength();
320
- long totalAll;
321
- if (append) {
322
- totalAll = HttpUtils.parseContentRange(
323
- response.header("Content-Range"), resumeOffset);
324
- if (totalAll < 0) {
325
- // Malformed or mismatched Content-Range: treat like a
326
- // stale partial (one clean retry from zero) instead of
327
- // failing — a throw would keep the partial and hit the
328
- // same wall on every future attempt.
329
- return false;
330
- }
331
- } else {
332
- totalAll = contentLength > 0 ? contentLength : 0;
333
- }
279
+ boolean append = decision.optBoolean("append");
280
+ long baseOffset = decision.optLong("base");
281
+ long totalAll = decision.optLong("total");
282
+ boolean encodedBody = decision.optBoolean("encoded");
334
283
  if (totalAll > ArchiveLimits.MAX_ARCHIVE_BYTES) {
335
284
  throw new IOException("archive too large: " + totalAll + " bytes");
336
285
  }
@@ -340,16 +289,17 @@ class DownloadTask implements Runnable {
340
289
  // Destroy the old bytes before the sidecar can vouch for
341
290
  // them with the new validators (a crash between the two
342
291
  // writes must never leave a sidecar describing stale bytes).
343
- if (writePath.exists() && !writePath.delete()) {
344
- throw new IOException("Failed to replace existing file: " + writePath);
345
- }
292
+ discardPartial(writePath);
346
293
  }
347
- if (encodedBody) {
294
+ String etag = response.header("ETag");
295
+ String lastModified = response.header("Last-Modified");
296
+ if (decision.optBoolean("persistSidecar")) {
297
+ // Persist before streaming so a mid-stream crash can resume.
298
+ writeSidecarText(sidecar,
299
+ ResumePlan.sidecar(url, etag, lastModified, sidecarText, totalAll));
300
+ } else {
348
301
  // No resume across an encoded transfer.
349
302
  deleteResumeSidecar(writePath);
350
- } else {
351
- // Persist before streaming so a mid-stream crash can resume.
352
- writeResumeMeta(sidecar, url, response, resumeMeta, totalAll);
353
303
  }
354
304
 
355
305
  long bytesRead;
@@ -358,25 +308,34 @@ class DownloadTask implements Runnable {
358
308
  long lastPostedBytes = baseOffset;
359
309
  // Unknown length: the response-time check could only reserve the
360
310
  // margin, so the disk is probed before any write that would run
361
- // past the bytes reserved so far, each probe reserving at least
362
- // the next PROBE bytes (more when one chunk is larger) — no write
363
- // can ever eat into the margin (the archive cap alone is far more
364
- // than the margin). A throw keeps the partial for a later attempt.
311
+ // past the bytes reserved so far (the shared probe plan,
312
+ // ArchiveLimits.planFreeSpaceProbe) — no write can ever eat into
313
+ // the margin. A throw keeps the partial for a later attempt.
365
314
  long freeSpaceReservedUntil = 0;
366
315
 
316
+ // The archive digest is computed as the bytes reach the file, so
317
+ // the install does not re-read the whole archive afterwards.
318
+ MessageDigest digest = UpdateFileUtils.newSha256();
319
+ if (append) {
320
+ UpdateFileUtils.updateDigest(digest, writePath);
321
+ }
367
322
  try (
368
323
  BufferedSource source = body.source();
369
- BufferedSink sink = Okio.buffer(
370
- append ? Okio.appendingSink(writePath) : Okio.sink(writePath))
324
+ BufferedSink sink = Okio.buffer(Okio.sink(new DigestOutputStream(
325
+ new FileOutputStream(writePath, append), digest)))
371
326
  ) {
372
- while ((bytesRead = source.read(sink.buffer(), DOWNLOAD_CHUNK_SIZE)) != -1) {
327
+ while ((bytesRead = source.read(sink.buffer(), UpdateFileUtils.BUFFER_SIZE)) != -1) {
328
+ // A known length was reserved up front: no per-chunk plan
329
+ // (and no JNI round trip on this hot loop).
330
+ long[] probe = totalAll > 0 ? null : ArchiveLimits.planFreeSpaceProbe(
331
+ totalAll, received, bytesRead, freeSpaceReservedUntil);
373
332
  received += bytesRead;
374
- if (totalAll <= 0 && received > freeSpaceReservedUntil) {
375
- long reserve = Math.max(
376
- ArchiveLimits.UNKNOWN_LENGTH_FREE_SPACE_PROBE_BYTES, bytesRead);
377
- freeSpaceReservedUntil = received - bytesRead + reserve;
333
+ if (probe != null) {
334
+ freeSpaceReservedUntil = probe[1];
335
+ }
336
+ if (probe != null && probe[0] > 0) {
378
337
  try {
379
- ArchiveLimits.ensureFreeSpace(writePath, reserve);
338
+ ArchiveLimits.ensureFreeSpace(writePath, probe[0]);
380
339
  } catch (IOException e) {
381
340
  // The chunk is still only buffered; closing the
382
341
  // sink would flush it onto the disk that just
@@ -385,7 +344,9 @@ class DownloadTask implements Runnable {
385
344
  throw e;
386
345
  }
387
346
  }
388
- sink.emit();
347
+ // Write whole segments only: a 64KB read no longer costs
348
+ // a write() syscall per partially filled segment.
349
+ sink.emitCompleteSegments();
389
350
 
390
351
  long overall = baseOffset + received;
391
352
  if (overall > ArchiveLimits.MAX_ARCHIVE_BYTES) {
@@ -415,6 +376,15 @@ class DownloadTask implements Runnable {
415
376
  throw new IOException("Download incomplete: expected " + totalAll
416
377
  + " bytes, got " + writePath.length());
417
378
  }
379
+ if (!encodedBody) {
380
+ // Refresh with the final size: a length unknown up front
381
+ // (chunked) left the sidecar without a total, so a process
382
+ // dying between download end and unzip would otherwise
383
+ // download the whole archive again.
384
+ writeSidecarText(sidecar, ResumePlan.sidecar(
385
+ url, etag, lastModified, sidecarText, writePath.length()));
386
+ }
387
+ streamedArchiveSha256 = UpdateFileUtils.toHex(digest.digest());
418
388
  // Final progress event, skipped when the loop already posted this
419
389
  // exact value (known length reaching 100% posts it in-loop).
420
390
  if (baseOffset + received != lastPostedBytes) {
@@ -426,136 +396,51 @@ class DownloadTask implements Runnable {
426
396
  return true;
427
397
  }
428
398
 
429
- private byte[] readBytes(InputStream input) throws IOException {
430
- return readBytes(input, Long.MAX_VALUE);
431
- }
432
-
433
- private byte[] readBytes(InputStream input, long maxBytes) throws IOException {
434
- try (
435
- InputStream in = input;
436
- ByteArrayOutputStream out = new ByteArrayOutputStream()
437
- ) {
438
- int count;
439
- long total = 0;
440
- while ((count = in.read(buffer)) != -1) {
441
- total += count;
442
- if (total > maxBytes) {
443
- throw new IOException("content exceeds " + maxBytes + " bytes");
444
- }
445
- out.write(buffer, 0, count);
446
- }
447
- return out.toByteArray();
448
- }
449
- }
450
-
451
- private void appendManifestEntries(
452
- JSONObject manifest,
453
- ArrayList<String> copyFroms,
454
- ArrayList<String> copyTos,
455
- ArrayList<String> deletes,
456
- HashMap<String, Long> copyCrcs
457
- ) throws JSONException {
458
- JSONObject copiesCrc = manifest.optJSONObject("copiesCrc");
459
-
460
- JSONObject copies = manifest.optJSONObject("copies");
461
- if (copies != null) {
462
- Iterator<?> keys = copies.keys();
463
- while (keys.hasNext()) {
464
- String to = (String) keys.next();
465
- String from = copies.getString(to);
466
- if (from.isEmpty()) {
467
- from = to;
468
- }
469
- copyFroms.add(from);
470
- copyTos.add(to);
471
- if (copiesCrc != null && copyCrcs != null && copiesCrc.has(to)) {
472
- // Same content => same crc, so grouping multiple "to" under
473
- // one "from" stays consistent.
474
- copyCrcs.put(from, copiesCrc.getLong(to));
475
- }
476
- }
477
- }
478
-
479
- JSONObject deleteMap = manifest.optJSONObject("deletes");
480
- if (deleteMap != null) {
481
- Iterator<?> deleteKeys = deleteMap.keys();
482
- while (deleteKeys.hasNext()) {
483
- deletes.add((String) deleteKeys.next());
484
- }
485
- }
486
- }
487
-
488
399
  private void copyBundledAssetToFile(String assetName, File destination) throws IOException {
489
400
  try (InputStream in = context.getAssets().open(assetName)) {
490
401
  UpdateFileUtils.copyInputStreamToFile(in, destination);
491
402
  }
492
403
  }
493
404
 
494
- private HashMap<String, ArrayList<File>> buildCopyList(
495
- File unzipDirectory,
496
- CopyGroupResult[] groups
497
- ) throws IOException {
498
- HashMap<String, ArrayList<File>> copyList = new HashMap<String, ArrayList<File>>();
499
- if (groups == null) {
500
- return copyList;
501
- }
502
-
503
- String rootPath = unzipDirectory.getCanonicalPath() + File.separator;
504
- for (CopyGroupResult group : groups) {
505
- ArrayList<File> targets = new ArrayList<File>();
506
- if (group.toPaths != null) {
507
- for (String to : group.toPaths) {
508
- File toFile = new File(unzipDirectory, to);
509
- String canonicalPath = toFile.getCanonicalPath();
510
- if (!canonicalPath.startsWith(rootPath)) {
511
- throw new SecurityException("Illegal name: " + to);
512
- }
513
- targets.add(toFile);
514
- }
515
- }
516
- copyList.put(group.from, targets);
517
- }
518
-
519
- return copyList;
520
- }
521
-
522
405
  private PatchArchiveContents extractPatchArchive(File archiveFile, File unzipDirectory)
523
- throws IOException, JSONException {
406
+ throws IOException {
524
407
  UpdateFileUtils.removeDirectory(unzipDirectory);
525
408
  UpdateFileUtils.ensureDirectory(unzipDirectory);
526
409
 
527
- PatchArchiveContents contents = new PatchArchiveContents();
410
+ ArrayList<String> entryNames = new ArrayList<String>();
411
+ byte[] manifestJson = new byte[0];
528
412
  try (SafeZipFile zipFile = new SafeZipFile(archiveFile)) {
529
413
  ensureArchiveWithinLimits(archiveFile, zipFile, unzipDirectory);
530
414
  Enumeration<? extends ZipEntry> entries = zipFile.entries();
531
415
  while (entries.hasMoreElements()) {
532
416
  ZipEntry entry = entries.nextElement();
533
417
  String name = entry.getName();
534
- contents.entryNames.add(name);
418
+ entryNames.add(name);
535
419
 
536
420
  if (name.equals("__diff.json")) {
537
421
  if (entry.getSize() > ArchiveLimits.MAX_MANIFEST_BYTES) {
538
422
  throw new IOException("delta manifest too large: " + entry.getSize());
539
423
  }
540
- byte[] bytes = readBytes(
424
+ manifestJson = UpdateFileUtils.readBytes(
541
425
  zipFile.getInputStream(entry), ArchiveLimits.MAX_MANIFEST_BYTES);
542
- String json = new String(bytes, StandardCharsets.UTF_8);
543
- JSONObject manifest = (JSONObject) new JSONTokener(json).nextValue();
544
- appendManifestEntries(
545
- manifest,
546
- contents.copyFroms,
547
- contents.copyTos,
548
- contents.deletes,
549
- contents.copyCrcs
550
- );
551
- contents.hbcTransform = manifest.optJSONObject("hbcTransform");
552
426
  continue;
553
427
  }
554
428
 
555
429
  zipFile.unzipToPath(entry, unzipDirectory);
556
430
  }
557
431
  }
558
- return contents;
432
+ return new PatchArchiveContents(entryNames, manifestJson);
433
+ }
434
+
435
+ /**
436
+ * Shared first half of the two patch tasks: download the archive and
437
+ * unpack it into the staging directory. The native applyArchiveDelta
438
+ * validates what it declared.
439
+ */
440
+ private PatchArchiveContents stagePatchArchive() throws IOException {
441
+ downloadFile();
442
+ artifactSha256 = archiveSha256();
443
+ return extractPatchArchive(params.targetFile, stagingDirectory());
559
444
  }
560
445
 
561
446
  private void doFullPatch() throws IOException {
@@ -564,25 +449,44 @@ class DownloadTask implements Runnable {
564
449
  File work = stagingDirectory();
565
450
  UpdateFileUtils.removeDirectory(work);
566
451
  UpdateFileUtils.ensureDirectory(work);
567
- artifactSha256 = UpdateFileUtils.sha256Hex(params.targetFile);
568
-
452
+ artifactSha256 = archiveSha256();
453
+
454
+ // The bundle's digest (for the install record) is taken from the
455
+ // bytes as they are extracted, instead of re-reading the bundle right
456
+ // after. Any entry resolving to the bundle path counts; the last write
457
+ // wins on disk and in the digest alike.
458
+ File bundleTarget = InstallRecord.bundleFile(work).getCanonicalFile();
459
+ stagedBundleSha256 = null;
569
460
  try (SafeZipFile zipFile = new SafeZipFile(params.targetFile)) {
570
461
  ensureArchiveWithinLimits(params.targetFile, zipFile, work);
571
462
  Enumeration<? extends ZipEntry> entries = zipFile.entries();
572
463
  while (entries.hasMoreElements()) {
573
- zipFile.unzipToPath(entries.nextElement(), work);
464
+ ZipEntry entry = entries.nextElement();
465
+ if (!entry.isDirectory()
466
+ && new File(work, entry.getName()).getCanonicalFile().equals(bundleTarget)) {
467
+ MessageDigest digest = UpdateFileUtils.newSha256();
468
+ zipFile.unzipToPath(entry, work, digest);
469
+ stagedBundleSha256 = UpdateFileUtils.toHex(digest.digest());
470
+ } else {
471
+ zipFile.unzipToPath(entry, work);
472
+ }
574
473
  }
575
474
  }
576
475
 
577
476
  deleteConsumedArchive();
578
477
  }
579
478
 
479
+ private String archiveSha256() throws IOException {
480
+ return streamedArchiveSha256 != null
481
+ ? streamedArchiveSha256 : UpdateFileUtils.sha256Hex(params.targetFile);
482
+ }
483
+
580
484
  /**
581
485
  * Last step of a successful patch task: the completion record (with the
582
486
  * final bundle's digest) goes into the staging directory, which is then
583
487
  * renamed over the version directory in one atomic step.
584
488
  */
585
- private void promoteStaging() throws IOException, JSONException {
489
+ private void promoteStaging() throws IOException {
586
490
  File work = stagingDirectory();
587
491
  if (targetsRunningVersion()) {
588
492
  // The process switched to this very version while the task ran
@@ -592,25 +496,11 @@ class DownloadTask implements Runnable {
592
496
  UpdateFileUtils.removeDirectory(work);
593
497
  return;
594
498
  }
595
- File bundle = new File(work, "index.bundlejs");
596
- if (!bundle.isFile()) {
597
- throw new IOException("bundle missing after install: " + bundle);
598
- }
599
- String bundleSha256 = UpdateFileUtils.sha256Hex(bundle);
600
- InstallRecord.write(
601
- work, InstallRecord.build(params.hash, bundleSha256, artifactSha256));
499
+ InstallRecord.seal(work, params.hash, artifactSha256, stagedBundleSha256);
602
500
  if (params.unzipDirectory.exists()) {
603
501
  UpdateFileUtils.removeDirectory(params.unzipDirectory);
604
502
  }
605
- if (!work.renameTo(params.unzipDirectory)) {
606
- throw new IOException("failed to promote staging directory to " + params.unzipDirectory);
607
- }
608
- // The rename rewrote the versions root's entries; the record's own
609
- // directory was synced by InstallRecord.write, the root was not.
610
- File versionsRoot = params.unzipDirectory.getParentFile();
611
- if (versionsRoot != null) {
612
- InstallRecord.syncDirectory(versionsRoot);
613
- }
503
+ InstallRecord.promote(work, params.unzipDirectory);
614
504
  }
615
505
 
616
506
  /**
@@ -626,8 +516,7 @@ class DownloadTask implements Runnable {
626
516
  if (archiveBytes > ArchiveLimits.MAX_ARCHIVE_BYTES) {
627
517
  throw new IOException("archive too large: " + archiveBytes + " bytes");
628
518
  }
629
- SafeZipFile.Inspection inspection = zipFile.inspect();
630
- ArchiveLimits.ensureFreeSpace(unzipDirectory, inspection.totalUncompressed);
519
+ ArchiveLimits.ensureFreeSpace(unzipDirectory, zipFile.inspect(archiveBytes));
631
520
  }
632
521
 
633
522
  // The archive and its resume sidecar live and die together: once the
@@ -640,96 +529,78 @@ class DownloadTask implements Runnable {
640
529
  deleteResumeSidecar(params.targetFile);
641
530
  }
642
531
 
643
- private void doPatchFromApk() throws IOException, JSONException {
644
- downloadFile();
532
+ private void doPatchFromApk() throws IOException {
533
+ PatchArchiveContents contents = stagePatchArchive();
645
534
  File work = stagingDirectory();
646
- artifactSha256 = UpdateFileUtils.sha256Hex(params.targetFile);
647
- PatchArchiveContents contents = extractPatchArchive(params.targetFile, work);
648
-
649
- buildArchivePlan(
650
- DownloadTaskParams.TASK_TYPE_PATCH_FROM_APK,
651
- contents.entryNames.toArray(new String[0]),
652
- contents.copyFroms.toArray(new String[0]),
653
- contents.copyTos.toArray(new String[0]),
654
- contents.deletes.toArray(new String[0])
655
- );
656
-
657
- HashMap<String, ArrayList<File>> copyList = buildCopyList(
658
- work,
659
- buildCopyGroups(
660
- contents.copyFroms.toArray(new String[0]),
661
- contents.copyTos.toArray(new String[0])
662
- )
663
- );
664
535
 
665
536
  File originBundleFile = new File(work, ".origin.bundle");
666
537
  copyBundledAssetToFile("index.android.bundle", originBundleFile);
538
+ CopyGroupResult[] copies;
667
539
  try {
668
- applyDeltaFromSource(
540
+ // The APK's resources are zip entries, not files: the core
541
+ // rebuilds the bundle and hands the manifest copies back.
542
+ copies = applyArchiveDelta(
543
+ DownloadTaskParams.TASK_TYPE_PATCH_FROM_APK,
544
+ contents.entryNames,
545
+ contents.manifestJson,
669
546
  work.getAbsolutePath(),
670
547
  work.getAbsolutePath(),
671
548
  originBundleFile.getAbsolutePath(),
672
549
  new File(work, BUNDLE_DELTA_ENTRY).getAbsolutePath(),
673
- new File(work, "index.bundlejs").getAbsolutePath(),
674
- "",
675
- false,
676
- new String[0],
677
- new String[0],
678
- new String[0],
679
- contents.hbcTransformMetaFor(BUNDLE_DELTA_ENTRY)
550
+ InstallRecord.bundleFile(work).getAbsolutePath(),
551
+ true
680
552
  );
681
553
  } finally {
682
554
  originBundleFile.delete();
683
555
  }
684
556
 
685
- bundledResourceCopier.copyFromResource(copyList, contents.copyCrcs);
557
+ bundledResourceCopier.copyFromResource(work, copies);
686
558
  deleteConsumedArchive();
687
559
  }
688
560
 
689
- private void doPatchFromPpk() throws IOException, JSONException {
690
- downloadFile();
561
+ private void doPatchFromPpk() throws IOException {
562
+ PatchArchiveContents contents = stagePatchArchive();
691
563
  File work = stagingDirectory();
692
- artifactSha256 = UpdateFileUtils.sha256Hex(params.targetFile);
693
- PatchArchiveContents contents = extractPatchArchive(params.targetFile, work);
694
-
695
- ArchivePatchPlanResult plan = buildArchivePlan(
564
+ applyArchiveDelta(
696
565
  DownloadTaskParams.TASK_TYPE_PATCH_FROM_PPK,
697
- contents.entryNames.toArray(new String[0]),
698
- contents.copyFroms.toArray(new String[0]),
699
- contents.copyTos.toArray(new String[0]),
700
- contents.deletes.toArray(new String[0])
701
- );
702
-
703
- applyDeltaFromSource(
566
+ contents.entryNames,
567
+ contents.manifestJson,
704
568
  params.originDirectory.getAbsolutePath(),
705
569
  work.getAbsolutePath(),
706
- new File(params.originDirectory, "index.bundlejs").getAbsolutePath(),
570
+ InstallRecord.bundleFile(params.originDirectory).getAbsolutePath(),
707
571
  new File(work, BUNDLE_DELTA_ENTRY).getAbsolutePath(),
708
- new File(work, "index.bundlejs").getAbsolutePath(),
709
- plan.mergeSourceSubdir,
710
- plan.enableMerge,
711
- contents.copyFroms.toArray(new String[0]),
712
- contents.copyTos.toArray(new String[0]),
713
- contents.deletes.toArray(new String[0]),
714
- contents.hbcTransformMetaFor(BUNDLE_DELTA_ENTRY)
572
+ InstallRecord.bundleFile(work).getAbsolutePath(),
573
+ false
715
574
  );
716
575
  deleteConsumedArchive();
717
576
  }
718
577
 
578
+ // Dot-named, so the selection under the versions root never picks it.
579
+ static final String TRASH_DIR_NAME = ".trash";
580
+
719
581
  private void doCleanUp() {
720
- UpdateContext.getInstance(context).runCleanupWithLatestState(
721
- new UpdateContext.CleanupAction() {
722
- @Override
723
- public void run(String keepCurrent, String keepPrevious) {
724
- cleanupOldEntries(
725
- params.unzipDirectory.getAbsolutePath(),
726
- keepCurrent,
727
- keepPrevious,
728
- params.maxAgeDays
729
- );
730
- }
582
+ final File trash = new File(params.unzipDirectory, TRASH_DIR_NAME);
583
+ // Phase 1, under the version-files lock: only renames doomed entries
584
+ // into the trash, so activation is never blocked behind a recursive
585
+ // delete of several version directories.
586
+ UpdateContext.getInstance(context).runCleanupWithLatestState(keepNames ->
587
+ cleanupOldEntries(
588
+ params.unzipDirectory.getAbsolutePath(),
589
+ keepNames,
590
+ params.maxAgeDays,
591
+ trash.getAbsolutePath()
592
+ ));
593
+ // Phase 2, lock released: nothing in the trash is reachable as a
594
+ // version any more. Also purges leftovers of an interrupted run.
595
+ // Best effort: phase 1 already succeeded, and a leftover the native
596
+ // delete cannot remove must not fail every later cleanup task.
597
+ if (trash.isDirectory()) {
598
+ try {
599
+ cleanupOldEntries(trash.getAbsolutePath(), new String[0], 0, null);
600
+ } catch (RuntimeException e) {
601
+ Log.w(Texts.LOG_TAG, "Failed to purge cleanup trash", e);
731
602
  }
732
- );
603
+ }
733
604
  }
734
605
 
735
606
  private void cleanUpAfterFailure(int taskType) {
@@ -753,37 +624,13 @@ class DownloadTask implements Runnable {
753
624
  }
754
625
  break;
755
626
  case DownloadTaskParams.TASK_TYPE_PLAIN_DOWNLOAD:
756
- if (
757
- params.targetFile.exists()
758
- && !params.targetFile.delete()
759
- && UpdateContext.DEBUG
760
- ) {
761
- Log.w(Texts.LOG_TAG, "Failed to clean partial download " + params.targetFile);
762
- }
763
- deleteResumeSidecar(params.targetFile);
627
+ deleteConsumedArchive();
764
628
  break;
765
629
  default:
766
630
  break;
767
631
  }
768
632
  }
769
633
 
770
- /**
771
- * An https artifact URL must stay on https through every redirect: the
772
- * package is the supply-chain boundary and TLS is what authenticates
773
- * it. OkHttp follows cross-scheme redirects by default, so the final
774
- * request is checked here (the redirected bytes are discarded).
775
- */
776
- static void rejectProtocolDowngrade(String requestedUrl, Response response)
777
- throws IOException {
778
- if (requestedUrl != null
779
- && requestedUrl.regionMatches(true, 0, "https:", 0, 6)
780
- && !response.request().url().isHttps()) {
781
- throw new IOException(
782
- "https download redirected to plaintext http: "
783
- + response.request().url());
784
- }
785
- }
786
-
787
634
  private boolean isPatchTask(int taskType) {
788
635
  return taskType == DownloadTaskParams.TASK_TYPE_PATCH_FULL
789
636
  || taskType == DownloadTaskParams.TASK_TYPE_PATCH_FROM_APK
@@ -793,8 +640,7 @@ class DownloadTask implements Runnable {
793
640
  private boolean hasCompletedDeltaDirectory() {
794
641
  return params.unzipDirectory != null
795
642
  && params.hash != null
796
- && new File(params.unzipDirectory, "index.bundlejs").isFile()
797
- && InstallRecord.isComplete(params.unzipDirectory, params.hash);
643
+ && InstallRecord.isInstalled(params.unzipDirectory, params.hash);
798
644
  }
799
645
 
800
646
  // True when this task targets the version the process is running from.
@@ -813,18 +659,12 @@ class DownloadTask implements Runnable {
813
659
  * failure rather than overwritten.
814
660
  */
815
661
  private void ensureNotReinstallingRunningVersion() throws IOException {
816
- File bundle = new File(params.unzipDirectory, "index.bundlejs");
817
- if (bundle.isFile() && InstallRecord.isComplete(params.unzipDirectory, params.hash)) {
818
- try {
819
- InstallRecord.verifyForActivation(params.unzipDirectory, params.hash, bundle);
820
- return;
821
- } catch (IOException e) {
822
- throw new FileOperationException("Running version " + params.hash
823
- + " cannot be reinstalled in place: " + e.getMessage());
824
- }
662
+ try {
663
+ InstallRecord.verifyInstalled(params.unzipDirectory, params.hash, false);
664
+ } catch (IOException e) {
665
+ throw new FileOperationException("Running version " + params.hash
666
+ + " cannot be reinstalled in place: " + e.getMessage());
825
667
  }
826
- throw new FileOperationException("Running version " + params.hash
827
- + " has no verifiable install record and cannot be reinstalled in place");
828
668
  }
829
669
 
830
670
  @Override
@@ -917,37 +757,29 @@ class DownloadTask implements Runnable {
917
757
  }
918
758
  }
919
759
 
920
- private static native void applyDeltaFromSource(
760
+ // The native half of a patch install (cpp/patch_core/archive_patch_core.h
761
+ // ApplyArchivePatch): checks the archive's entries, parses and validates
762
+ // manifestJson (__diff.json), rebuilds the bundle and, unless
763
+ // hostCopiesResources, performs the copies, deletes and merge. Returns
764
+ // the copies the caller still owes (empty unless hostCopiesResources).
765
+ private static native CopyGroupResult[] applyArchiveDelta(
766
+ int patchType,
767
+ String[] entryNames,
768
+ byte[] manifestJson,
921
769
  String sourceRoot,
922
770
  String targetRoot,
923
771
  String originBundlePath,
924
772
  String bundlePatchPath,
925
773
  String bundleOutputPath,
926
- String mergeSourceSubdir,
927
- boolean enableMerge,
928
- String[] copyFroms,
929
- String[] copyTos,
930
- String[] deletes,
931
- String hbcTransformMeta
774
+ boolean hostCopiesResources
932
775
  );
933
776
 
777
+ // trashDir non-empty: move the selected entries there instead of
778
+ // deleting them (see doCleanUp).
934
779
  private static native void cleanupOldEntries(
935
780
  String rootDir,
936
- String keepCurrent,
937
- String keepPrevious,
938
- int maxAgeDays
939
- );
940
-
941
- private static native ArchivePatchPlanResult buildArchivePlan(
942
- int patchType,
943
- String[] entryNames,
944
- String[] copyFroms,
945
- String[] copyTos,
946
- String[] deletes
947
- );
948
-
949
- private static native CopyGroupResult[] buildCopyGroups(
950
- String[] copyFroms,
951
- String[] copyTos
781
+ String[] keepNames,
782
+ int maxAgeDays,
783
+ String trashDir
952
784
  );
953
785
  }