rn-update 1.0.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 (880) hide show
  1. package/LICENSE +22 -0
  2. package/README-CN.md +97 -0
  3. package/README.md +97 -0
  4. package/THIRD_PARTY_NOTICES.md +8 -0
  5. package/android/build.gradle +253 -0
  6. package/android/jni/Android.mk +41 -0
  7. package/android/jni/Application.mk +20 -0
  8. package/android/jni/HDiffPatch/.travis.yml +33 -0
  9. package/android/jni/HDiffPatch/CHANGELOG.md +153 -0
  10. package/android/jni/HDiffPatch/LICENSE +48 -0
  11. package/android/jni/HDiffPatch/Makefile +157 -0
  12. package/android/jni/HDiffPatch/README.md +307 -0
  13. package/android/jni/HDiffPatch/_atosize.h +83 -0
  14. package/android/jni/HDiffPatch/_clock_for_demo.h +47 -0
  15. package/android/jni/HDiffPatch/_dir_ignore.h +191 -0
  16. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/Android.mk +37 -0
  17. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/Application.mk +7 -0
  18. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/build_libs.bat +1 -0
  19. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/build_libs.sh +1 -0
  20. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/hpatch.c +18 -0
  21. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/hpatch.h +20 -0
  22. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/hpatch_jni.c +28 -0
  23. package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/java/com/github/sisong/HPatch.java +8 -0
  24. package/android/jni/HDiffPatch/builds/codeblocks/HDiffPatch.workspace +8 -0
  25. package/android/jni/HDiffPatch/builds/codeblocks/HDiffZ.cbp +219 -0
  26. package/android/jni/HDiffPatch/builds/codeblocks/HPatchZ.cbp +156 -0
  27. package/android/jni/HDiffPatch/builds/codeblocks/unitTest.cbp +65 -0
  28. package/android/jni/HDiffPatch/builds/vc/HDiffPatch.sln +105 -0
  29. package/android/jni/HDiffPatch/builds/vc/HDiffZ.vcxproj +237 -0
  30. package/android/jni/HDiffPatch/builds/vc/HDiffZ.vcxproj.user +3 -0
  31. package/android/jni/HDiffPatch/builds/vc/HPatchZ.vcxproj +318 -0
  32. package/android/jni/HDiffPatch/builds/vc/HPatchZ.vcxproj.user +3 -0
  33. package/android/jni/HDiffPatch/builds/vc/unitTest.vcxproj +182 -0
  34. package/android/jni/HDiffPatch/builds/vc/unitTest.vcxproj.user +3 -0
  35. package/android/jni/HDiffPatch/builds/xcode/HDiffPatch.xcworkspace/contents.xcworkspacedata +30 -0
  36. package/android/jni/HDiffPatch/builds/xcode/HDiffPatch.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  37. package/android/jni/HDiffPatch/builds/xcode/bestParams.xcodeproj/project.pbxproj +408 -0
  38. package/android/jni/HDiffPatch/builds/xcode/bestParams.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  39. package/android/jni/HDiffPatch/builds/xcode/hdiffz.xcodeproj/project.pbxproj +573 -0
  40. package/android/jni/HDiffPatch/builds/xcode/hdiffz.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  41. package/android/jni/HDiffPatch/builds/xcode/hdiffz.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  42. package/android/jni/HDiffPatch/builds/xcode/hpatchz.xcodeproj/project.pbxproj +396 -0
  43. package/android/jni/HDiffPatch/builds/xcode/hpatchz.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  44. package/android/jni/HDiffPatch/builds/xcode/lz4.xcodeproj/project.pbxproj +268 -0
  45. package/android/jni/HDiffPatch/builds/xcode/lz4.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  46. package/android/jni/HDiffPatch/builds/xcode/lzma.xcodeproj/project.pbxproj +361 -0
  47. package/android/jni/HDiffPatch/builds/xcode/lzma.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  48. package/android/jni/HDiffPatch/builds/xcode/testHashClash.xcodeproj/project.pbxproj +301 -0
  49. package/android/jni/HDiffPatch/builds/xcode/testHashClash.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  50. package/android/jni/HDiffPatch/builds/xcode/testHashClash.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  51. package/android/jni/HDiffPatch/builds/xcode/unitTest.xcodeproj/project.pbxproj +411 -0
  52. package/android/jni/HDiffPatch/builds/xcode/unitTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  53. package/android/jni/HDiffPatch/builds/xcode/zstd.xcodeproj/project.pbxproj +504 -0
  54. package/android/jni/HDiffPatch/builds/xcode/zstd.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  55. package/android/jni/HDiffPatch/checksum_plugin_demo.h +344 -0
  56. package/android/jni/HDiffPatch/compress_parallel.cpp +166 -0
  57. package/android/jni/HDiffPatch/compress_parallel.h +59 -0
  58. package/android/jni/HDiffPatch/compress_plugin_demo.h +1152 -0
  59. package/android/jni/HDiffPatch/decompress_plugin_demo.h +995 -0
  60. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff.cpp +797 -0
  61. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff.h +65 -0
  62. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff_tools.cpp +200 -0
  63. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff_tools.h +178 -0
  64. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_manifest.cpp +357 -0
  65. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_manifest.h +87 -0
  66. package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/file_for_dirDiff.h +151 -0
  67. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch.c +770 -0
  68. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch.h +236 -0
  69. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_private.h +47 -0
  70. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_tools.c +112 -0
  71. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_tools.h +53 -0
  72. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_types.h +61 -0
  73. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_dir_output.c +331 -0
  74. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_dir_output.h +144 -0
  75. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_stream.c +176 -0
  76. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_stream.h +84 -0
  77. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/ref_stream.c +146 -0
  78. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/ref_stream.h +61 -0
  79. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/res_handle_limit.c +152 -0
  80. package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/res_handle_limit.h +76 -0
  81. package/android/jni/HDiffPatch/file_for_patch.c +524 -0
  82. package/android/jni/HDiffPatch/file_for_patch.h +259 -0
  83. package/android/jni/HDiffPatch/hdiffz.cpp +1570 -0
  84. package/android/jni/HDiffPatch/hpatch_dir_listener.h +290 -0
  85. package/android/jni/HDiffPatch/hpatchz.c +1221 -0
  86. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/diff.cpp +1025 -0
  87. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/diff.h +116 -0
  88. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/diff_types.h +72 -0
  89. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/bytes_rle.cpp +213 -0
  90. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/bytes_rle.h +63 -0
  91. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/compress_detect.cpp +170 -0
  92. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/compress_detect.h +86 -0
  93. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/config.h +89 -0
  94. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.c +13 -0
  95. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.c.inc.h +398 -0
  96. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.h +194 -0
  97. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort64.c +13 -0
  98. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort64.h +204 -0
  99. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort_private.h +207 -0
  100. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/sssort.c.inc.h +815 -0
  101. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/trsort.c.inc.h +586 -0
  102. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/utils.c.inc.h +381 -0
  103. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/adler_roll.c +352 -0
  104. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/adler_roll.h +137 -0
  105. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/bloom_filter.h +137 -0
  106. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/covers.h +70 -0
  107. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/digest_matcher.cpp +628 -0
  108. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/digest_matcher.h +87 -0
  109. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/stream_serialize.cpp +363 -0
  110. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/stream_serialize.h +139 -0
  111. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/mem_buf.h +68 -0
  112. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/pack_uint.h +115 -0
  113. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/suffix_string.cpp +342 -0
  114. package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/suffix_string.h +94 -0
  115. package/android/jni/HDiffPatch/libHDiffPatch/HPatch/checksum_plugin.h +52 -0
  116. package/android/jni/HDiffPatch/libHDiffPatch/HPatch/patch.c +2292 -0
  117. package/android/jni/HDiffPatch/libHDiffPatch/HPatch/patch.h +215 -0
  118. package/android/jni/HDiffPatch/libHDiffPatch/HPatch/patch_private.h +165 -0
  119. package/android/jni/HDiffPatch/libHDiffPatch/HPatch/patch_types.h +251 -0
  120. package/android/jni/HDiffPatch/libParallel/parallel_channel.cpp +174 -0
  121. package/android/jni/HDiffPatch/libParallel/parallel_channel.h +73 -0
  122. package/android/jni/HDiffPatch/libParallel/parallel_import.cpp +367 -0
  123. package/android/jni/HDiffPatch/libParallel/parallel_import.h +92 -0
  124. package/android/jni/hpatch.c +232 -0
  125. package/android/jni/hpatch.h +43 -0
  126. package/android/jni/lzma/Asm/arm/7zCrcOpt.asm +100 -0
  127. package/android/jni/lzma/Asm/x86/7zAsm.asm +147 -0
  128. package/android/jni/lzma/Asm/x86/7zCrcOpt.asm +147 -0
  129. package/android/jni/lzma/Asm/x86/AesOpt.asm +237 -0
  130. package/android/jni/lzma/Asm/x86/LzmaDecOpt.asm +1258 -0
  131. package/android/jni/lzma/Asm/x86/XzCrc64Opt.asm +205 -0
  132. package/android/jni/lzma/C/7z.h +202 -0
  133. package/android/jni/lzma/C/7zAlloc.c +80 -0
  134. package/android/jni/lzma/C/7zAlloc.h +19 -0
  135. package/android/jni/lzma/C/7zArcIn.c +1771 -0
  136. package/android/jni/lzma/C/7zBuf.c +36 -0
  137. package/android/jni/lzma/C/7zBuf.h +35 -0
  138. package/android/jni/lzma/C/7zBuf2.c +52 -0
  139. package/android/jni/lzma/C/7zCrc.c +128 -0
  140. package/android/jni/lzma/C/7zCrc.h +25 -0
  141. package/android/jni/lzma/C/7zCrcOpt.c +115 -0
  142. package/android/jni/lzma/C/7zDec.c +591 -0
  143. package/android/jni/lzma/C/7zFile.c +286 -0
  144. package/android/jni/lzma/C/7zFile.h +83 -0
  145. package/android/jni/lzma/C/7zStream.c +176 -0
  146. package/android/jni/lzma/C/7zTypes.h +375 -0
  147. package/android/jni/lzma/C/7zVersion.h +27 -0
  148. package/android/jni/lzma/C/7zVersion.rc +55 -0
  149. package/android/jni/lzma/C/Aes.c +306 -0
  150. package/android/jni/lzma/C/Aes.h +38 -0
  151. package/android/jni/lzma/C/AesOpt.c +184 -0
  152. package/android/jni/lzma/C/Alloc.c +455 -0
  153. package/android/jni/lzma/C/Alloc.h +51 -0
  154. package/android/jni/lzma/C/Bcj2.c +257 -0
  155. package/android/jni/lzma/C/Bcj2.h +146 -0
  156. package/android/jni/lzma/C/Bcj2Enc.c +311 -0
  157. package/android/jni/lzma/C/Bra.c +230 -0
  158. package/android/jni/lzma/C/Bra.h +64 -0
  159. package/android/jni/lzma/C/Bra86.c +82 -0
  160. package/android/jni/lzma/C/BraIA64.c +53 -0
  161. package/android/jni/lzma/C/Compiler.h +33 -0
  162. package/android/jni/lzma/C/CpuArch.c +218 -0
  163. package/android/jni/lzma/C/CpuArch.h +336 -0
  164. package/android/jni/lzma/C/Delta.c +64 -0
  165. package/android/jni/lzma/C/Delta.h +19 -0
  166. package/android/jni/lzma/C/DllSecur.c +108 -0
  167. package/android/jni/lzma/C/DllSecur.h +20 -0
  168. package/android/jni/lzma/C/LzFind.c +1127 -0
  169. package/android/jni/lzma/C/LzFind.h +121 -0
  170. package/android/jni/lzma/C/LzFindMt.c +853 -0
  171. package/android/jni/lzma/C/LzFindMt.h +101 -0
  172. package/android/jni/lzma/C/LzHash.h +57 -0
  173. package/android/jni/lzma/C/Lzma2Dec.c +488 -0
  174. package/android/jni/lzma/C/Lzma2Dec.h +120 -0
  175. package/android/jni/lzma/C/Lzma2DecMt.c +1082 -0
  176. package/android/jni/lzma/C/Lzma2DecMt.h +79 -0
  177. package/android/jni/lzma/C/Lzma2Enc.c +803 -0
  178. package/android/jni/lzma/C/Lzma2Enc.h +55 -0
  179. package/android/jni/lzma/C/Lzma86.h +111 -0
  180. package/android/jni/lzma/C/Lzma86Dec.c +54 -0
  181. package/android/jni/lzma/C/Lzma86Enc.c +106 -0
  182. package/android/jni/lzma/C/LzmaDec.c +1185 -0
  183. package/android/jni/lzma/C/LzmaDec.h +234 -0
  184. package/android/jni/lzma/C/LzmaEnc.c +2976 -0
  185. package/android/jni/lzma/C/LzmaEnc.h +76 -0
  186. package/android/jni/lzma/C/LzmaLib.c +40 -0
  187. package/android/jni/lzma/C/LzmaLib.h +131 -0
  188. package/android/jni/lzma/C/MtCoder.c +601 -0
  189. package/android/jni/lzma/C/MtCoder.h +141 -0
  190. package/android/jni/lzma/C/MtDec.c +1138 -0
  191. package/android/jni/lzma/C/MtDec.h +201 -0
  192. package/android/jni/lzma/C/Ppmd.h +85 -0
  193. package/android/jni/lzma/C/Ppmd7.c +712 -0
  194. package/android/jni/lzma/C/Ppmd7.h +142 -0
  195. package/android/jni/lzma/C/Ppmd7Dec.c +191 -0
  196. package/android/jni/lzma/C/Ppmd7Enc.c +187 -0
  197. package/android/jni/lzma/C/Precomp.h +10 -0
  198. package/android/jni/lzma/C/RotateDefs.h +30 -0
  199. package/android/jni/lzma/C/Sha256.c +248 -0
  200. package/android/jni/lzma/C/Sha256.h +26 -0
  201. package/android/jni/lzma/C/Sort.c +141 -0
  202. package/android/jni/lzma/C/Sort.h +18 -0
  203. package/android/jni/lzma/C/Threads.c +95 -0
  204. package/android/jni/lzma/C/Threads.h +70 -0
  205. package/android/jni/lzma/C/ThreadsP.c +396 -0
  206. package/android/jni/lzma/C/ThreadsP.h +31 -0
  207. package/android/jni/lzma/C/Util/7z/7z.dsp +241 -0
  208. package/android/jni/lzma/C/Util/7z/7z.dsw +29 -0
  209. package/android/jni/lzma/C/Util/7z/7zMain.c +686 -0
  210. package/android/jni/lzma/C/Util/7z/Precomp.c +4 -0
  211. package/android/jni/lzma/C/Util/7z/Precomp.h +10 -0
  212. package/android/jni/lzma/C/Util/7z/makefile +40 -0
  213. package/android/jni/lzma/C/Util/7z/makefile.gcc +75 -0
  214. package/android/jni/lzma/C/Util/Lzma/LzmaUtil.c +258 -0
  215. package/android/jni/lzma/C/Util/Lzma/LzmaUtil.dsp +168 -0
  216. package/android/jni/lzma/C/Util/Lzma/LzmaUtil.dsw +29 -0
  217. package/android/jni/lzma/C/Util/Lzma/makefile +28 -0
  218. package/android/jni/lzma/C/Util/Lzma/makefile.gcc +44 -0
  219. package/android/jni/lzma/C/Util/LzmaLib/LzmaLib.def +4 -0
  220. package/android/jni/lzma/C/Util/LzmaLib/LzmaLib.dsp +178 -0
  221. package/android/jni/lzma/C/Util/LzmaLib/LzmaLib.dsw +29 -0
  222. package/android/jni/lzma/C/Util/LzmaLib/LzmaLibExports.c +14 -0
  223. package/android/jni/lzma/C/Util/LzmaLib/makefile +34 -0
  224. package/android/jni/lzma/C/Util/LzmaLib/resource.rc +3 -0
  225. package/android/jni/lzma/C/Util/SfxSetup/Precomp.c +4 -0
  226. package/android/jni/lzma/C/Util/SfxSetup/Precomp.h +10 -0
  227. package/android/jni/lzma/C/Util/SfxSetup/SfxSetup.c +640 -0
  228. package/android/jni/lzma/C/Util/SfxSetup/SfxSetup.dsp +231 -0
  229. package/android/jni/lzma/C/Util/SfxSetup/SfxSetup.dsw +29 -0
  230. package/android/jni/lzma/C/Util/SfxSetup/makefile +37 -0
  231. package/android/jni/lzma/C/Util/SfxSetup/makefile_con +38 -0
  232. package/android/jni/lzma/C/Util/SfxSetup/resource.rc +5 -0
  233. package/android/jni/lzma/C/Util/SfxSetup/setup.ico +0 -0
  234. package/android/jni/lzma/C/Xz.c +90 -0
  235. package/android/jni/lzma/C/Xz.h +460 -0
  236. package/android/jni/lzma/C/XzCrc64.c +86 -0
  237. package/android/jni/lzma/C/XzCrc64.h +26 -0
  238. package/android/jni/lzma/C/XzCrc64Opt.c +69 -0
  239. package/android/jni/lzma/C/XzDec.c +2766 -0
  240. package/android/jni/lzma/C/XzEnc.c +1329 -0
  241. package/android/jni/lzma/C/XzEnc.h +60 -0
  242. package/android/jni/lzma/C/XzIn.c +319 -0
  243. package/android/jni/lzma/CPP/7zip/7zip.mak +240 -0
  244. package/android/jni/lzma/CPP/7zip/Aes.mak +7 -0
  245. package/android/jni/lzma/CPP/7zip/Archive/7z/7zCompressionMode.cpp +3 -0
  246. package/android/jni/lzma/CPP/7zip/Archive/7z/7zCompressionMode.h +76 -0
  247. package/android/jni/lzma/CPP/7zip/Archive/7z/7zDecode.cpp +569 -0
  248. package/android/jni/lzma/CPP/7zip/Archive/7z/7zDecode.h +70 -0
  249. package/android/jni/lzma/CPP/7zip/Archive/7z/7zEncode.cpp +678 -0
  250. package/android/jni/lzma/CPP/7zip/Archive/7z/7zEncode.h +92 -0
  251. package/android/jni/lzma/CPP/7zip/Archive/7z/7zExtract.cpp +423 -0
  252. package/android/jni/lzma/CPP/7zip/Archive/7z/7zFolderInStream.cpp +139 -0
  253. package/android/jni/lzma/CPP/7zip/Archive/7z/7zFolderInStream.h +61 -0
  254. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHandler.cpp +763 -0
  255. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHandler.h +181 -0
  256. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHandlerOut.cpp +942 -0
  257. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHeader.cpp +19 -0
  258. package/android/jni/lzma/CPP/7zip/Archive/7z/7zHeader.h +148 -0
  259. package/android/jni/lzma/CPP/7zip/Archive/7z/7zIn.cpp +1666 -0
  260. package/android/jni/lzma/CPP/7zip/Archive/7z/7zIn.h +445 -0
  261. package/android/jni/lzma/CPP/7zip/Archive/7z/7zItem.h +202 -0
  262. package/android/jni/lzma/CPP/7zip/Archive/7z/7zOut.cpp +901 -0
  263. package/android/jni/lzma/CPP/7zip/Archive/7z/7zOut.h +335 -0
  264. package/android/jni/lzma/CPP/7zip/Archive/7z/7zProperties.cpp +174 -0
  265. package/android/jni/lzma/CPP/7zip/Archive/7z/7zProperties.h +22 -0
  266. package/android/jni/lzma/CPP/7zip/Archive/7z/7zRegister.cpp +21 -0
  267. package/android/jni/lzma/CPP/7zip/Archive/7z/7zSpecStream.cpp +22 -0
  268. package/android/jni/lzma/CPP/7zip/Archive/7z/7zSpecStream.h +35 -0
  269. package/android/jni/lzma/CPP/7zip/Archive/7z/7zUpdate.cpp +2500 -0
  270. package/android/jni/lzma/CPP/7zip/Archive/7z/7zUpdate.h +139 -0
  271. package/android/jni/lzma/CPP/7zip/Archive/7z/StdAfx.cpp +3 -0
  272. package/android/jni/lzma/CPP/7zip/Archive/7z/StdAfx.h +8 -0
  273. package/android/jni/lzma/CPP/7zip/Archive/Archive.def +12 -0
  274. package/android/jni/lzma/CPP/7zip/Archive/Archive2.def +19 -0
  275. package/android/jni/lzma/CPP/7zip/Archive/ArchiveExports.cpp +151 -0
  276. package/android/jni/lzma/CPP/7zip/Archive/Common/CoderMixer2.cpp +1125 -0
  277. package/android/jni/lzma/CPP/7zip/Archive/Common/CoderMixer2.h +447 -0
  278. package/android/jni/lzma/CPP/7zip/Archive/Common/DummyOutStream.cpp +17 -0
  279. package/android/jni/lzma/CPP/7zip/Archive/Common/DummyOutStream.h +25 -0
  280. package/android/jni/lzma/CPP/7zip/Archive/Common/HandlerOut.cpp +232 -0
  281. package/android/jni/lzma/CPP/7zip/Archive/Common/HandlerOut.h +110 -0
  282. package/android/jni/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.cpp +46 -0
  283. package/android/jni/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.h +67 -0
  284. package/android/jni/lzma/CPP/7zip/Archive/Common/ItemNameUtils.cpp +88 -0
  285. package/android/jni/lzma/CPP/7zip/Archive/Common/ItemNameUtils.h +28 -0
  286. package/android/jni/lzma/CPP/7zip/Archive/Common/MultiStream.cpp +191 -0
  287. package/android/jni/lzma/CPP/7zip/Archive/Common/MultiStream.h +89 -0
  288. package/android/jni/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp +18 -0
  289. package/android/jni/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.h +37 -0
  290. package/android/jni/lzma/CPP/7zip/Archive/Common/ParseProperties.cpp +3 -0
  291. package/android/jni/lzma/CPP/7zip/Archive/Common/ParseProperties.h +6 -0
  292. package/android/jni/lzma/CPP/7zip/Archive/Common/StdAfx.h +8 -0
  293. package/android/jni/lzma/CPP/7zip/Archive/DllExports2.cpp +122 -0
  294. package/android/jni/lzma/CPP/7zip/Archive/IArchive.h +608 -0
  295. package/android/jni/lzma/CPP/7zip/Archive/Icons/7z.ico +0 -0
  296. package/android/jni/lzma/CPP/7zip/Archive/LzmaHandler.cpp +629 -0
  297. package/android/jni/lzma/CPP/7zip/Archive/SplitHandler.cpp +359 -0
  298. package/android/jni/lzma/CPP/7zip/Archive/StdAfx.h +8 -0
  299. package/android/jni/lzma/CPP/7zip/Archive/XzHandler.cpp +1308 -0
  300. package/android/jni/lzma/CPP/7zip/Archive/XzHandler.h +11 -0
  301. package/android/jni/lzma/CPP/7zip/Asm.mak +9 -0
  302. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsp +1910 -0
  303. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsw +29 -0
  304. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.cpp +3 -0
  305. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.h +8 -0
  306. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/makefile +154 -0
  307. package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/resource.rc +7 -0
  308. package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.cpp +3 -0
  309. package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.h +8 -0
  310. package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/makefile +96 -0
  311. package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/resource.rc +5 -0
  312. package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.cpp +3 -0
  313. package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.h +8 -0
  314. package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/makefile +116 -0
  315. package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/resource.rc +5 -0
  316. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/LzmaAlone.cpp +799 -0
  317. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/LzmaCon.dsp +477 -0
  318. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/LzmaCon.dsw +29 -0
  319. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/StdAfx.cpp +3 -0
  320. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/StdAfx.h +8 -0
  321. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/makefile +59 -0
  322. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/makefile.gcc +195 -0
  323. package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/resource.rc +3 -0
  324. package/android/jni/lzma/CPP/7zip/Bundles/LzmaSpec/LzmaSpec.cpp +715 -0
  325. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/7z.ico +0 -0
  326. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/SFXCon.dsp +912 -0
  327. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/SFXCon.dsw +29 -0
  328. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/SfxCon.cpp +482 -0
  329. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/StdAfx.cpp +3 -0
  330. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/StdAfx.h +8 -0
  331. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/makefile +134 -0
  332. package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/resource.rc +5 -0
  333. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.cpp +246 -0
  334. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.h +86 -0
  335. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.cpp +137 -0
  336. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.h +11 -0
  337. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/SFXSetup.dsp +803 -0
  338. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/SFXSetup.dsw +29 -0
  339. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/SfxSetup.cpp +364 -0
  340. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/StdAfx.cpp +3 -0
  341. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/StdAfx.h +13 -0
  342. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/makefile +117 -0
  343. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/resource.h +6 -0
  344. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/resource.rc +16 -0
  345. package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/setup.ico +0 -0
  346. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/7z.ico +0 -0
  347. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/SFXWin.dsp +988 -0
  348. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/SFXWin.dsw +29 -0
  349. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/SfxWin.cpp +241 -0
  350. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/StdAfx.cpp +3 -0
  351. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/StdAfx.h +14 -0
  352. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/makefile +153 -0
  353. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/resource.h +1 -0
  354. package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/resource.rc +50 -0
  355. package/android/jni/lzma/CPP/7zip/Common/CWrappers.cpp +250 -0
  356. package/android/jni/lzma/CPP/7zip/Common/CWrappers.h +120 -0
  357. package/android/jni/lzma/CPP/7zip/Common/CreateCoder.cpp +536 -0
  358. package/android/jni/lzma/CPP/7zip/Common/CreateCoder.h +192 -0
  359. package/android/jni/lzma/CPP/7zip/Common/FilePathAutoRename.cpp +46 -0
  360. package/android/jni/lzma/CPP/7zip/Common/FilePathAutoRename.h +10 -0
  361. package/android/jni/lzma/CPP/7zip/Common/FileStreams.cpp +475 -0
  362. package/android/jni/lzma/CPP/7zip/Common/FileStreams.h +166 -0
  363. package/android/jni/lzma/CPP/7zip/Common/FilterCoder.cpp +435 -0
  364. package/android/jni/lzma/CPP/7zip/Common/FilterCoder.h +205 -0
  365. package/android/jni/lzma/CPP/7zip/Common/InBuffer.cpp +163 -0
  366. package/android/jni/lzma/CPP/7zip/Common/InBuffer.h +92 -0
  367. package/android/jni/lzma/CPP/7zip/Common/InOutTempBuffer.cpp +127 -0
  368. package/android/jni/lzma/CPP/7zip/Common/InOutTempBuffer.h +48 -0
  369. package/android/jni/lzma/CPP/7zip/Common/LimitedStreams.cpp +367 -0
  370. package/android/jni/lzma/CPP/7zip/Common/LimitedStreams.h +252 -0
  371. package/android/jni/lzma/CPP/7zip/Common/LockedStream.cpp +3 -0
  372. package/android/jni/lzma/CPP/7zip/Common/LockedStream.h +6 -0
  373. package/android/jni/lzma/CPP/7zip/Common/MethodId.cpp +3 -0
  374. package/android/jni/lzma/CPP/7zip/Common/MethodId.h +10 -0
  375. package/android/jni/lzma/CPP/7zip/Common/MethodProps.cpp +509 -0
  376. package/android/jni/lzma/CPP/7zip/Common/MethodProps.h +264 -0
  377. package/android/jni/lzma/CPP/7zip/Common/OffsetStream.cpp +39 -0
  378. package/android/jni/lzma/CPP/7zip/Common/OffsetStream.h +26 -0
  379. package/android/jni/lzma/CPP/7zip/Common/OutBuffer.cpp +111 -0
  380. package/android/jni/lzma/CPP/7zip/Common/OutBuffer.h +66 -0
  381. package/android/jni/lzma/CPP/7zip/Common/ProgressUtils.cpp +51 -0
  382. package/android/jni/lzma/CPP/7zip/Common/ProgressUtils.h +35 -0
  383. package/android/jni/lzma/CPP/7zip/Common/PropId.cpp +108 -0
  384. package/android/jni/lzma/CPP/7zip/Common/RegisterArc.h +78 -0
  385. package/android/jni/lzma/CPP/7zip/Common/RegisterCodec.h +106 -0
  386. package/android/jni/lzma/CPP/7zip/Common/StdAfx.h +8 -0
  387. package/android/jni/lzma/CPP/7zip/Common/StreamBinder.cpp +156 -0
  388. package/android/jni/lzma/CPP/7zip/Common/StreamBinder.h +60 -0
  389. package/android/jni/lzma/CPP/7zip/Common/StreamObjects.cpp +285 -0
  390. package/android/jni/lzma/CPP/7zip/Common/StreamObjects.h +157 -0
  391. package/android/jni/lzma/CPP/7zip/Common/StreamUtils.cpp +56 -0
  392. package/android/jni/lzma/CPP/7zip/Common/StreamUtils.h +13 -0
  393. package/android/jni/lzma/CPP/7zip/Common/UniqBlocks.cpp +57 -0
  394. package/android/jni/lzma/CPP/7zip/Common/UniqBlocks.h +26 -0
  395. package/android/jni/lzma/CPP/7zip/Common/VirtThread.cpp +48 -0
  396. package/android/jni/lzma/CPP/7zip/Common/VirtThread.h +24 -0
  397. package/android/jni/lzma/CPP/7zip/Compress/Bcj2Coder.cpp +666 -0
  398. package/android/jni/lzma/CPP/7zip/Compress/Bcj2Coder.h +120 -0
  399. package/android/jni/lzma/CPP/7zip/Compress/Bcj2Register.cpp +24 -0
  400. package/android/jni/lzma/CPP/7zip/Compress/BcjCoder.cpp +24 -0
  401. package/android/jni/lzma/CPP/7zip/Compress/BcjCoder.h +31 -0
  402. package/android/jni/lzma/CPP/7zip/Compress/BcjRegister.cpp +17 -0
  403. package/android/jni/lzma/CPP/7zip/Compress/BranchMisc.cpp +23 -0
  404. package/android/jni/lzma/CPP/7zip/Compress/BranchMisc.h +35 -0
  405. package/android/jni/lzma/CPP/7zip/Compress/BranchRegister.cpp +41 -0
  406. package/android/jni/lzma/CPP/7zip/Compress/ByteSwap.cpp +92 -0
  407. package/android/jni/lzma/CPP/7zip/Compress/CodecExports.cpp +344 -0
  408. package/android/jni/lzma/CPP/7zip/Compress/CopyCoder.cpp +120 -0
  409. package/android/jni/lzma/CPP/7zip/Compress/CopyCoder.h +49 -0
  410. package/android/jni/lzma/CPP/7zip/Compress/CopyRegister.cpp +15 -0
  411. package/android/jni/lzma/CPP/7zip/Compress/DeltaFilter.cpp +128 -0
  412. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Decoder.cpp +265 -0
  413. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Decoder.h +96 -0
  414. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Encoder.cpp +122 -0
  415. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Encoder.h +42 -0
  416. package/android/jni/lzma/CPP/7zip/Compress/Lzma2Register.cpp +22 -0
  417. package/android/jni/lzma/CPP/7zip/Compress/LzmaDecoder.cpp +343 -0
  418. package/android/jni/lzma/CPP/7zip/Compress/LzmaDecoder.h +113 -0
  419. package/android/jni/lzma/CPP/7zip/Compress/LzmaEncoder.cpp +182 -0
  420. package/android/jni/lzma/CPP/7zip/Compress/LzmaEncoder.h +46 -0
  421. package/android/jni/lzma/CPP/7zip/Compress/LzmaRegister.cpp +22 -0
  422. package/android/jni/lzma/CPP/7zip/Compress/PpmdDecoder.cpp +170 -0
  423. package/android/jni/lzma/CPP/7zip/Compress/PpmdDecoder.h +86 -0
  424. package/android/jni/lzma/CPP/7zip/Compress/PpmdEncoder.cpp +152 -0
  425. package/android/jni/lzma/CPP/7zip/Compress/PpmdEncoder.h +58 -0
  426. package/android/jni/lzma/CPP/7zip/Compress/PpmdRegister.cpp +22 -0
  427. package/android/jni/lzma/CPP/7zip/Compress/StdAfx.h +8 -0
  428. package/android/jni/lzma/CPP/7zip/Compress/XzDecoder.cpp +150 -0
  429. package/android/jni/lzma/CPP/7zip/Compress/XzDecoder.h +92 -0
  430. package/android/jni/lzma/CPP/7zip/Compress/XzEncoder.cpp +245 -0
  431. package/android/jni/lzma/CPP/7zip/Compress/XzEncoder.h +46 -0
  432. package/android/jni/lzma/CPP/7zip/Crc.mak +8 -0
  433. package/android/jni/lzma/CPP/7zip/Crc64.mak +8 -0
  434. package/android/jni/lzma/CPP/7zip/Crypto/7zAes.cpp +280 -0
  435. package/android/jni/lzma/CPP/7zip/Crypto/7zAes.h +118 -0
  436. package/android/jni/lzma/CPP/7zip/Crypto/7zAesRegister.cpp +17 -0
  437. package/android/jni/lzma/CPP/7zip/Crypto/MyAes.cpp +112 -0
  438. package/android/jni/lzma/CPP/7zip/Crypto/MyAes.h +57 -0
  439. package/android/jni/lzma/CPP/7zip/Crypto/MyAesReg.cpp +16 -0
  440. package/android/jni/lzma/CPP/7zip/Crypto/RandGen.cpp +233 -0
  441. package/android/jni/lzma/CPP/7zip/Crypto/RandGen.h +40 -0
  442. package/android/jni/lzma/CPP/7zip/Crypto/StdAfx.h +8 -0
  443. package/android/jni/lzma/CPP/7zip/GuiCommon.rc +84 -0
  444. package/android/jni/lzma/CPP/7zip/Guid.txt +220 -0
  445. package/android/jni/lzma/CPP/7zip/ICoder.h +399 -0
  446. package/android/jni/lzma/CPP/7zip/IDecl.h +28 -0
  447. package/android/jni/lzma/CPP/7zip/IPassword.h +23 -0
  448. package/android/jni/lzma/CPP/7zip/IProgress.h +19 -0
  449. package/android/jni/lzma/CPP/7zip/IStream.h +127 -0
  450. package/android/jni/lzma/CPP/7zip/LzmaDec.mak +5 -0
  451. package/android/jni/lzma/CPP/7zip/MyVersion.h +2 -0
  452. package/android/jni/lzma/CPP/7zip/MyVersionInfo.rc +2 -0
  453. package/android/jni/lzma/CPP/7zip/PropID.h +127 -0
  454. package/android/jni/lzma/CPP/7zip/SubBuild.mak +3 -0
  455. package/android/jni/lzma/CPP/7zip/UI/Client7z/Client7z.cpp +993 -0
  456. package/android/jni/lzma/CPP/7zip/UI/Client7z/Client7z.dsp +235 -0
  457. package/android/jni/lzma/CPP/7zip/UI/Client7z/Client7z.dsw +29 -0
  458. package/android/jni/lzma/CPP/7zip/UI/Client7z/StdAfx.cpp +3 -0
  459. package/android/jni/lzma/CPP/7zip/UI/Client7z/StdAfx.h +8 -0
  460. package/android/jni/lzma/CPP/7zip/UI/Client7z/makefile +28 -0
  461. package/android/jni/lzma/CPP/7zip/UI/Client7z/resource.rc +3 -0
  462. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.cpp +1295 -0
  463. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.h +136 -0
  464. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.cpp +1715 -0
  465. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.h +403 -0
  466. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveName.cpp +155 -0
  467. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveName.h +10 -0
  468. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.cpp +161 -0
  469. package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.h +112 -0
  470. package/android/jni/lzma/CPP/7zip/UI/Common/Bench.cpp +3618 -0
  471. package/android/jni/lzma/CPP/7zip/UI/Common/Bench.h +77 -0
  472. package/android/jni/lzma/CPP/7zip/UI/Common/DefaultName.cpp +37 -0
  473. package/android/jni/lzma/CPP/7zip/UI/Common/DefaultName.h +11 -0
  474. package/android/jni/lzma/CPP/7zip/UI/Common/DirItem.h +190 -0
  475. package/android/jni/lzma/CPP/7zip/UI/Common/EnumDirItems.cpp +1096 -0
  476. package/android/jni/lzma/CPP/7zip/UI/Common/EnumDirItems.h +42 -0
  477. package/android/jni/lzma/CPP/7zip/UI/Common/ExitCode.h +27 -0
  478. package/android/jni/lzma/CPP/7zip/UI/Common/Extract.cpp +482 -0
  479. package/android/jni/lzma/CPP/7zip/UI/Common/Extract.h +94 -0
  480. package/android/jni/lzma/CPP/7zip/UI/Common/ExtractMode.h +34 -0
  481. package/android/jni/lzma/CPP/7zip/UI/Common/ExtractingFilePath.cpp +280 -0
  482. package/android/jni/lzma/CPP/7zip/UI/Common/ExtractingFilePath.h +31 -0
  483. package/android/jni/lzma/CPP/7zip/UI/Common/HashCalc.cpp +347 -0
  484. package/android/jni/lzma/CPP/7zip/UI/Common/HashCalc.h +110 -0
  485. package/android/jni/lzma/CPP/7zip/UI/Common/IFileExtractCallback.h +114 -0
  486. package/android/jni/lzma/CPP/7zip/UI/Common/LoadCodecs.cpp +1074 -0
  487. package/android/jni/lzma/CPP/7zip/UI/Common/LoadCodecs.h +424 -0
  488. package/android/jni/lzma/CPP/7zip/UI/Common/OpenArchive.cpp +3553 -0
  489. package/android/jni/lzma/CPP/7zip/UI/Common/OpenArchive.h +436 -0
  490. package/android/jni/lzma/CPP/7zip/UI/Common/PropIDUtils.cpp +668 -0
  491. package/android/jni/lzma/CPP/7zip/UI/Common/PropIDUtils.h +18 -0
  492. package/android/jni/lzma/CPP/7zip/UI/Common/Property.h +14 -0
  493. package/android/jni/lzma/CPP/7zip/UI/Common/SetProperties.cpp +80 -0
  494. package/android/jni/lzma/CPP/7zip/UI/Common/SetProperties.h +10 -0
  495. package/android/jni/lzma/CPP/7zip/UI/Common/SortUtils.cpp +25 -0
  496. package/android/jni/lzma/CPP/7zip/UI/Common/SortUtils.h +10 -0
  497. package/android/jni/lzma/CPP/7zip/UI/Common/StdAfx.h +8 -0
  498. package/android/jni/lzma/CPP/7zip/UI/Common/TempFiles.cpp +19 -0
  499. package/android/jni/lzma/CPP/7zip/UI/Common/TempFiles.h +16 -0
  500. package/android/jni/lzma/CPP/7zip/UI/Common/Update.cpp +1704 -0
  501. package/android/jni/lzma/CPP/7zip/UI/Common/Update.h +200 -0
  502. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateAction.cpp +64 -0
  503. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateAction.h +66 -0
  504. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateCallback.cpp +771 -0
  505. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateCallback.h +162 -0
  506. package/android/jni/lzma/CPP/7zip/UI/Common/UpdatePair.cpp +233 -0
  507. package/android/jni/lzma/CPP/7zip/UI/Common/UpdatePair.h +27 -0
  508. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateProduce.cpp +70 -0
  509. package/android/jni/lzma/CPP/7zip/UI/Common/UpdateProduce.h +55 -0
  510. package/android/jni/lzma/CPP/7zip/UI/Common/WorkDir.cpp +94 -0
  511. package/android/jni/lzma/CPP/7zip/UI/Common/WorkDir.h +26 -0
  512. package/android/jni/lzma/CPP/7zip/UI/Common/ZipRegistry.h +130 -0
  513. package/android/jni/lzma/CPP/7zip/UI/Console/BenchCon.cpp +41 -0
  514. package/android/jni/lzma/CPP/7zip/UI/Console/BenchCon.h +14 -0
  515. package/android/jni/lzma/CPP/7zip/UI/Console/Console.mak +43 -0
  516. package/android/jni/lzma/CPP/7zip/UI/Console/Console.manifest +13 -0
  517. package/android/jni/lzma/CPP/7zip/UI/Console/ConsoleClose.cpp +69 -0
  518. package/android/jni/lzma/CPP/7zip/UI/Console/ConsoleClose.h +33 -0
  519. package/android/jni/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp +825 -0
  520. package/android/jni/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.h +164 -0
  521. package/android/jni/lzma/CPP/7zip/UI/Console/HashCon.cpp +367 -0
  522. package/android/jni/lzma/CPP/7zip/UI/Console/HashCon.h +48 -0
  523. package/android/jni/lzma/CPP/7zip/UI/Console/List.cpp +1359 -0
  524. package/android/jni/lzma/CPP/7zip/UI/Console/List.h +27 -0
  525. package/android/jni/lzma/CPP/7zip/UI/Console/Main.cpp +1154 -0
  526. package/android/jni/lzma/CPP/7zip/UI/Console/MainAr.cpp +175 -0
  527. package/android/jni/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.cpp +115 -0
  528. package/android/jni/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.h +66 -0
  529. package/android/jni/lzma/CPP/7zip/UI/Console/PercentPrinter.cpp +183 -0
  530. package/android/jni/lzma/CPP/7zip/UI/Console/PercentPrinter.h +62 -0
  531. package/android/jni/lzma/CPP/7zip/UI/Console/StdAfx.cpp +3 -0
  532. package/android/jni/lzma/CPP/7zip/UI/Console/StdAfx.h +8 -0
  533. package/android/jni/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.cpp +702 -0
  534. package/android/jni/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.h +124 -0
  535. package/android/jni/lzma/CPP/7zip/UI/Console/UserInputUtils.cpp +110 -0
  536. package/android/jni/lzma/CPP/7zip/UI/Console/UserInputUtils.h +27 -0
  537. package/android/jni/lzma/CPP/7zip/UI/Console/makefile +64 -0
  538. package/android/jni/lzma/CPP/7zip/UI/Console/resource.rc +7 -0
  539. package/android/jni/lzma/CPP/7zip/UI/Explorer/MyMessages.cpp +37 -0
  540. package/android/jni/lzma/CPP/7zip/UI/Explorer/MyMessages.h +16 -0
  541. package/android/jni/lzma/CPP/7zip/UI/FileManager/BrowseDialog.cpp +1025 -0
  542. package/android/jni/lzma/CPP/7zip/UI/FileManager/BrowseDialog.h +21 -0
  543. package/android/jni/lzma/CPP/7zip/UI/FileManager/BrowseDialogRes.h +9 -0
  544. package/android/jni/lzma/CPP/7zip/UI/FileManager/ComboDialog.cpp +64 -0
  545. package/android/jni/lzma/CPP/7zip/UI/FileManager/ComboDialog.h +28 -0
  546. package/android/jni/lzma/CPP/7zip/UI/FileManager/ComboDialogRes.h +4 -0
  547. package/android/jni/lzma/CPP/7zip/UI/FileManager/DialogSize.h +16 -0
  548. package/android/jni/lzma/CPP/7zip/UI/FileManager/ExtractCallback.cpp +1037 -0
  549. package/android/jni/lzma/CPP/7zip/UI/FileManager/ExtractCallback.h +328 -0
  550. package/android/jni/lzma/CPP/7zip/UI/FileManager/FormatUtils.cpp +28 -0
  551. package/android/jni/lzma/CPP/7zip/UI/FileManager/FormatUtils.h +14 -0
  552. package/android/jni/lzma/CPP/7zip/UI/FileManager/LangUtils.h +40 -0
  553. package/android/jni/lzma/CPP/7zip/UI/FileManager/MyWindowsNew.h +76 -0
  554. package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.cpp +122 -0
  555. package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.h +69 -0
  556. package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.rc +91 -0
  557. package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialogRes.h +17 -0
  558. package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialog.cpp +58 -0
  559. package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialog.h +28 -0
  560. package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialog.rc +14 -0
  561. package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialogRes.h +5 -0
  562. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog.cpp +196 -0
  563. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog.h +170 -0
  564. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog.rc +12 -0
  565. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.cpp +1337 -0
  566. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.h +351 -0
  567. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.rc +40 -0
  568. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2Res.h +48 -0
  569. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2a.rc +80 -0
  570. package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialogRes.h +3 -0
  571. package/android/jni/lzma/CPP/7zip/UI/FileManager/PropertyName.cpp +23 -0
  572. package/android/jni/lzma/CPP/7zip/UI/FileManager/PropertyName.h +10 -0
  573. package/android/jni/lzma/CPP/7zip/UI/FileManager/PropertyNameRes.h +95 -0
  574. package/android/jni/lzma/CPP/7zip/UI/FileManager/SysIconUtils.cpp +255 -0
  575. package/android/jni/lzma/CPP/7zip/UI/FileManager/SysIconUtils.h +62 -0
  576. package/android/jni/lzma/CPP/7zip/UI/FileManager/resource.h +177 -0
  577. package/android/jni/lzma/CPP/7zip/UI/FileManager/resourceGui.h +15 -0
  578. package/android/jni/lzma/CPP/7zip/UI/GUI/Extract.rc +59 -0
  579. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialog.cpp +418 -0
  580. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialog.h +113 -0
  581. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialog.rc +98 -0
  582. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialogRes.h +24 -0
  583. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractGUI.cpp +280 -0
  584. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractGUI.h +38 -0
  585. package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractRes.h +51 -0
  586. package/android/jni/lzma/CPP/7zip/UI/GUI/HashGUI.h +27 -0
  587. package/android/jni/lzma/CPP/7zip/UI/GUI/resource2.h +2 -0
  588. package/android/jni/lzma/CPP/Build.mak +156 -0
  589. package/android/jni/lzma/CPP/Common/AutoPtr.h +35 -0
  590. package/android/jni/lzma/CPP/Common/CRC.cpp +7 -0
  591. package/android/jni/lzma/CPP/Common/C_FileIO.cpp +92 -0
  592. package/android/jni/lzma/CPP/Common/C_FileIO.h +53 -0
  593. package/android/jni/lzma/CPP/Common/ComTry.h +21 -0
  594. package/android/jni/lzma/CPP/Common/CommandLineParser.cpp +197 -0
  595. package/android/jni/lzma/CPP/Common/CommandLineParser.h +63 -0
  596. package/android/jni/lzma/CPP/Common/Common.h +43 -0
  597. package/android/jni/lzma/CPP/Common/CrcReg.cpp +98 -0
  598. package/android/jni/lzma/CPP/Common/Defs.h +15 -0
  599. package/android/jni/lzma/CPP/Common/DynamicBuffer.h +64 -0
  600. package/android/jni/lzma/CPP/Common/IntToString.cpp +193 -0
  601. package/android/jni/lzma/CPP/Common/IntToString.h +28 -0
  602. package/android/jni/lzma/CPP/Common/Lang.h +23 -0
  603. package/android/jni/lzma/CPP/Common/ListFileUtils.cpp +132 -0
  604. package/android/jni/lzma/CPP/Common/ListFileUtils.h +18 -0
  605. package/android/jni/lzma/CPP/Common/MyBuffer.h +259 -0
  606. package/android/jni/lzma/CPP/Common/MyBuffer2.h +100 -0
  607. package/android/jni/lzma/CPP/Common/MyCom.h +277 -0
  608. package/android/jni/lzma/CPP/Common/MyException.h +14 -0
  609. package/android/jni/lzma/CPP/Common/MyGuidDef.h +54 -0
  610. package/android/jni/lzma/CPP/Common/MyInitGuid.h +45 -0
  611. package/android/jni/lzma/CPP/Common/MyLinux.h +42 -0
  612. package/android/jni/lzma/CPP/Common/MyString.cpp +1659 -0
  613. package/android/jni/lzma/CPP/Common/MyString.h +868 -0
  614. package/android/jni/lzma/CPP/Common/MyTypes.h +35 -0
  615. package/android/jni/lzma/CPP/Common/MyUnknown.h +17 -0
  616. package/android/jni/lzma/CPP/Common/MyVector.cpp +3 -0
  617. package/android/jni/lzma/CPP/Common/MyVector.h +634 -0
  618. package/android/jni/lzma/CPP/Common/MyWindows.cpp +145 -0
  619. package/android/jni/lzma/CPP/Common/MyWindows.h +231 -0
  620. package/android/jni/lzma/CPP/Common/NewHandler.cpp +163 -0
  621. package/android/jni/lzma/CPP/Common/NewHandler.h +88 -0
  622. package/android/jni/lzma/CPP/Common/Sha256Reg.cpp +40 -0
  623. package/android/jni/lzma/CPP/Common/StdAfx.h +8 -0
  624. package/android/jni/lzma/CPP/Common/StdInStream.cpp +89 -0
  625. package/android/jni/lzma/CPP/Common/StdInStream.h +38 -0
  626. package/android/jni/lzma/CPP/Common/StdOutStream.cpp +163 -0
  627. package/android/jni/lzma/CPP/Common/StdOutStream.h +71 -0
  628. package/android/jni/lzma/CPP/Common/StringConvert.cpp +319 -0
  629. package/android/jni/lzma/CPP/Common/StringConvert.h +88 -0
  630. package/android/jni/lzma/CPP/Common/StringToInt.cpp +144 -0
  631. package/android/jni/lzma/CPP/Common/StringToInt.h +21 -0
  632. package/android/jni/lzma/CPP/Common/TextConfig.cpp +124 -0
  633. package/android/jni/lzma/CPP/Common/TextConfig.h +19 -0
  634. package/android/jni/lzma/CPP/Common/UTFConvert.cpp +288 -0
  635. package/android/jni/lzma/CPP/Common/UTFConvert.h +12 -0
  636. package/android/jni/lzma/CPP/Common/Wildcard.cpp +676 -0
  637. package/android/jni/lzma/CPP/Common/Wildcard.h +149 -0
  638. package/android/jni/lzma/CPP/Common/XzCrc64Init.cpp +7 -0
  639. package/android/jni/lzma/CPP/Common/XzCrc64Reg.cpp +42 -0
  640. package/android/jni/lzma/CPP/Windows/COM.h +70 -0
  641. package/android/jni/lzma/CPP/Windows/CommonDialog.cpp +185 -0
  642. package/android/jni/lzma/CPP/Windows/CommonDialog.h +23 -0
  643. package/android/jni/lzma/CPP/Windows/Control/ComboBox.cpp +66 -0
  644. package/android/jni/lzma/CPP/Windows/Control/ComboBox.h +65 -0
  645. package/android/jni/lzma/CPP/Windows/Control/CommandBar.h +52 -0
  646. package/android/jni/lzma/CPP/Windows/Control/Dialog.cpp +251 -0
  647. package/android/jni/lzma/CPP/Windows/Control/Dialog.h +170 -0
  648. package/android/jni/lzma/CPP/Windows/Control/Edit.h +19 -0
  649. package/android/jni/lzma/CPP/Windows/Control/ImageList.cpp +10 -0
  650. package/android/jni/lzma/CPP/Windows/Control/ImageList.h +87 -0
  651. package/android/jni/lzma/CPP/Windows/Control/ListView.cpp +155 -0
  652. package/android/jni/lzma/CPP/Windows/Control/ListView.h +146 -0
  653. package/android/jni/lzma/CPP/Windows/Control/ProgressBar.h +35 -0
  654. package/android/jni/lzma/CPP/Windows/Control/PropertyPage.cpp +143 -0
  655. package/android/jni/lzma/CPP/Windows/Control/PropertyPage.h +50 -0
  656. package/android/jni/lzma/CPP/Windows/Control/ReBar.h +34 -0
  657. package/android/jni/lzma/CPP/Windows/Control/Static.h +28 -0
  658. package/android/jni/lzma/CPP/Windows/Control/StatusBar.h +42 -0
  659. package/android/jni/lzma/CPP/Windows/Control/StdAfx.h +8 -0
  660. package/android/jni/lzma/CPP/Windows/Control/ToolBar.h +43 -0
  661. package/android/jni/lzma/CPP/Windows/Control/Trackbar.h +27 -0
  662. package/android/jni/lzma/CPP/Windows/Control/Window2.cpp +200 -0
  663. package/android/jni/lzma/CPP/Windows/Control/Window2.h +51 -0
  664. package/android/jni/lzma/CPP/Windows/DLL.cpp +109 -0
  665. package/android/jni/lzma/CPP/Windows/DLL.h +58 -0
  666. package/android/jni/lzma/CPP/Windows/Defs.h +17 -0
  667. package/android/jni/lzma/CPP/Windows/ErrorMsg.cpp +66 -0
  668. package/android/jni/lzma/CPP/Windows/ErrorMsg.h +15 -0
  669. package/android/jni/lzma/CPP/Windows/FileDir.cpp +714 -0
  670. package/android/jni/lzma/CPP/Windows/FileDir.h +117 -0
  671. package/android/jni/lzma/CPP/Windows/FileFind.cpp +749 -0
  672. package/android/jni/lzma/CPP/Windows/FileFind.h +161 -0
  673. package/android/jni/lzma/CPP/Windows/FileIO.cpp +432 -0
  674. package/android/jni/lzma/CPP/Windows/FileIO.h +212 -0
  675. package/android/jni/lzma/CPP/Windows/FileLink.cpp +440 -0
  676. package/android/jni/lzma/CPP/Windows/FileMapping.cpp +12 -0
  677. package/android/jni/lzma/CPP/Windows/FileMapping.h +66 -0
  678. package/android/jni/lzma/CPP/Windows/FileName.cpp +839 -0
  679. package/android/jni/lzma/CPP/Windows/FileName.h +115 -0
  680. package/android/jni/lzma/CPP/Windows/FileSystem.cpp +131 -0
  681. package/android/jni/lzma/CPP/Windows/FileSystem.h +27 -0
  682. package/android/jni/lzma/CPP/Windows/Handle.h +37 -0
  683. package/android/jni/lzma/CPP/Windows/MemoryLock.cpp +112 -0
  684. package/android/jni/lzma/CPP/Windows/MemoryLock.h +40 -0
  685. package/android/jni/lzma/CPP/Windows/NtCheck.h +46 -0
  686. package/android/jni/lzma/CPP/Windows/PropVariant.cpp +347 -0
  687. package/android/jni/lzma/CPP/Windows/PropVariant.h +114 -0
  688. package/android/jni/lzma/CPP/Windows/PropVariantConv.cpp +138 -0
  689. package/android/jni/lzma/CPP/Windows/PropVariantConv.h +37 -0
  690. package/android/jni/lzma/CPP/Windows/Registry.cpp +390 -0
  691. package/android/jni/lzma/CPP/Windows/Registry.h +84 -0
  692. package/android/jni/lzma/CPP/Windows/ResourceString.cpp +103 -0
  693. package/android/jni/lzma/CPP/Windows/ResourceString.h +16 -0
  694. package/android/jni/lzma/CPP/Windows/SecurityUtils.cpp +181 -0
  695. package/android/jni/lzma/CPP/Windows/SecurityUtils.h +167 -0
  696. package/android/jni/lzma/CPP/Windows/Shell.cpp +358 -0
  697. package/android/jni/lzma/CPP/Windows/Shell.h +94 -0
  698. package/android/jni/lzma/CPP/Windows/StdAfx.h +8 -0
  699. package/android/jni/lzma/CPP/Windows/Synchronization.cpp +10 -0
  700. package/android/jni/lzma/CPP/Windows/Synchronization.h +164 -0
  701. package/android/jni/lzma/CPP/Windows/System.cpp +142 -0
  702. package/android/jni/lzma/CPP/Windows/System.h +40 -0
  703. package/android/jni/lzma/CPP/Windows/Thread.h +38 -0
  704. package/android/jni/lzma/CPP/Windows/TimeUtils.cpp +213 -0
  705. package/android/jni/lzma/CPP/Windows/TimeUtils.h +32 -0
  706. package/android/jni/lzma/CPP/Windows/Window.cpp +179 -0
  707. package/android/jni/lzma/CPP/Windows/Window.h +284 -0
  708. package/android/jni/lzma/CS/7zip/Common/CRC.cs +55 -0
  709. package/android/jni/lzma/CS/7zip/Common/CommandLineParser.cs +274 -0
  710. package/android/jni/lzma/CS/7zip/Common/InBuffer.cs +72 -0
  711. package/android/jni/lzma/CS/7zip/Common/OutBuffer.cs +47 -0
  712. package/android/jni/lzma/CS/7zip/Compress/LZ/IMatchFinder.cs +24 -0
  713. package/android/jni/lzma/CS/7zip/Compress/LZ/LzBinTree.cs +367 -0
  714. package/android/jni/lzma/CS/7zip/Compress/LZ/LzInWindow.cs +132 -0
  715. package/android/jni/lzma/CS/7zip/Compress/LZ/LzOutWindow.cs +110 -0
  716. package/android/jni/lzma/CS/7zip/Compress/LZMA/LzmaBase.cs +76 -0
  717. package/android/jni/lzma/CS/7zip/Compress/LZMA/LzmaDecoder.cs +398 -0
  718. package/android/jni/lzma/CS/7zip/Compress/LZMA/LzmaEncoder.cs +1480 -0
  719. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.cs +364 -0
  720. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.csproj +90 -0
  721. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.sln +20 -0
  722. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaBench.cs +340 -0
  723. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/Properties/AssemblyInfo.cs +29 -0
  724. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/Properties/Resources.cs +70 -0
  725. package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/Properties/Settings.cs +42 -0
  726. package/android/jni/lzma/CS/7zip/Compress/RangeCoder/RangeCoder.cs +234 -0
  727. package/android/jni/lzma/CS/7zip/Compress/RangeCoder/RangeCoderBit.cs +117 -0
  728. package/android/jni/lzma/CS/7zip/Compress/RangeCoder/RangeCoderBitTree.cs +157 -0
  729. package/android/jni/lzma/CS/7zip/ICoder.cs +157 -0
  730. package/android/jni/lzma/DOC/7zC.txt +187 -0
  731. package/android/jni/lzma/DOC/7zFormat.txt +469 -0
  732. package/android/jni/lzma/DOC/Methods.txt +173 -0
  733. package/android/jni/lzma/DOC/installer.txt +166 -0
  734. package/android/jni/lzma/DOC/lzma-history.txt +446 -0
  735. package/android/jni/lzma/DOC/lzma-sdk.txt +357 -0
  736. package/android/jni/lzma/DOC/lzma-specification.txt +1176 -0
  737. package/android/jni/lzma/DOC/lzma.txt +328 -0
  738. package/android/jni/lzma/Java/SevenZip/CRC.java +52 -0
  739. package/android/jni/lzma/Java/SevenZip/Compression/LZ/BinTree.java +382 -0
  740. package/android/jni/lzma/Java/SevenZip/Compression/LZ/InWindow.java +131 -0
  741. package/android/jni/lzma/Java/SevenZip/Compression/LZ/OutWindow.java +85 -0
  742. package/android/jni/lzma/Java/SevenZip/Compression/LZMA/Base.java +88 -0
  743. package/android/jni/lzma/Java/SevenZip/Compression/LZMA/Decoder.java +329 -0
  744. package/android/jni/lzma/Java/SevenZip/Compression/LZMA/Encoder.java +1416 -0
  745. package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeDecoder.java +55 -0
  746. package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeEncoder.java +99 -0
  747. package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/Decoder.java +88 -0
  748. package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/Encoder.java +151 -0
  749. package/android/jni/lzma/Java/SevenZip/ICodeProgress.java +6 -0
  750. package/android/jni/lzma/Java/SevenZip/LzmaAlone.java +253 -0
  751. package/android/jni/lzma/Java/SevenZip/LzmaBench.java +392 -0
  752. package/android/jni/lzma/bin/7zS2.sfx +0 -0
  753. package/android/jni/lzma/bin/7zS2con.sfx +0 -0
  754. package/android/jni/lzma/bin/7zSD.sfx +0 -0
  755. package/android/jni/lzma/bin/installer/config.txt +5 -0
  756. package/android/jni/lzma/bin/installer/cr.bat +5 -0
  757. package/android/lib/arm64-v8a/librnupdate.so +0 -0
  758. package/android/lib/armeabi-v7a/librnupdate.so +0 -0
  759. package/android/lib/x86/librnupdate.so +0 -0
  760. package/android/lib/x86_64/librnupdate.so +0 -0
  761. package/android/proguard.pro +83 -0
  762. package/android/src/main/AndroidManifest.xml +14 -0
  763. package/android/src/main/AndroidManifestNew.xml +13 -0
  764. package/android/src/main/java/cn/reactnative/modules/update/ApkInstaller.java +292 -0
  765. package/android/src/main/java/cn/reactnative/modules/update/ArchiveLimits.java +50 -0
  766. package/android/src/main/java/cn/reactnative/modules/update/ArchivePatchPlanResult.java +11 -0
  767. package/android/src/main/java/cn/reactnative/modules/update/BundledResourceCopier.java +394 -0
  768. package/android/src/main/java/cn/reactnative/modules/update/CleanupKeepNames.java +30 -0
  769. package/android/src/main/java/cn/reactnative/modules/update/CopyGroupResult.java +11 -0
  770. package/android/src/main/java/cn/reactnative/modules/update/CrashRescue.java +120 -0
  771. package/android/src/main/java/cn/reactnative/modules/update/DownloadTask.java +954 -0
  772. package/android/src/main/java/cn/reactnative/modules/update/DownloadTaskParams.java +64 -0
  773. package/android/src/main/java/cn/reactnative/modules/update/ErrorCodes.java +32 -0
  774. package/android/src/main/java/cn/reactnative/modules/update/FileOperationException.java +20 -0
  775. package/android/src/main/java/cn/reactnative/modules/update/HttpUtils.java +64 -0
  776. package/android/src/main/java/cn/reactnative/modules/update/InstallRecord.java +156 -0
  777. package/android/src/main/java/cn/reactnative/modules/update/NativeCheckOrchestrator.java +725 -0
  778. package/android/src/main/java/cn/reactnative/modules/update/NativeUpdateCore.java +43 -0
  779. package/android/src/main/java/cn/reactnative/modules/update/NativeUpdateFlow.java +30 -0
  780. package/android/src/main/java/cn/reactnative/modules/update/PackageInstallerStatusReceiver.java +17 -0
  781. package/android/src/main/java/cn/reactnative/modules/update/PatchFailedException.java +21 -0
  782. package/android/src/main/java/cn/reactnative/modules/update/ReactReloadManager.java +274 -0
  783. package/android/src/main/java/cn/reactnative/modules/update/SafeZipFile.java +187 -0
  784. package/android/src/main/java/cn/reactnative/modules/update/StateCoreResult.java +22 -0
  785. package/android/src/main/java/cn/reactnative/modules/update/StateSerialRunner.java +70 -0
  786. package/android/src/main/java/cn/reactnative/modules/update/UiThreadRunner.java +42 -0
  787. package/android/src/main/java/cn/reactnative/modules/update/UpdateContext.java +952 -0
  788. package/android/src/main/java/cn/reactnative/modules/update/UpdateEventEmitter.java +70 -0
  789. package/android/src/main/java/cn/reactnative/modules/update/UpdateFileUtils.java +110 -0
  790. package/android/src/main/java/cn/reactnative/modules/update/UpdateModuleImpl.java +403 -0
  791. package/android/src/main/java/cn/reactnative/modules/update/UpdatePackage.java +51 -0
  792. package/android/src/main/java/expo/modules/pakta/ExpoPaktaModule.kt +15 -0
  793. package/android/src/main/java/expo/modules/pakta/ExpoPaktaPackage.java +29 -0
  794. package/android/src/newarch/cn/reactnative/modules/update/UpdateModule.java +126 -0
  795. package/android/src/oldarch/cn/reactnative/modules/update/UpdateModule.java +130 -0
  796. package/cpp/patch_core/archive_limits.h +49 -0
  797. package/cpp/patch_core/archive_patch_core.cpp +146 -0
  798. package/cpp/patch_core/archive_patch_core.h +69 -0
  799. package/cpp/patch_core/digest.cpp +235 -0
  800. package/cpp/patch_core/digest.h +66 -0
  801. package/cpp/patch_core/error_codes.h +57 -0
  802. package/cpp/patch_core/hbc_transform.cpp +152 -0
  803. package/cpp/patch_core/hbc_transform.h +58 -0
  804. package/cpp/patch_core/hbc_transform_wire.cpp +332 -0
  805. package/cpp/patch_core/hbc_transform_wire.h +57 -0
  806. package/cpp/patch_core/install_record.h +41 -0
  807. package/cpp/patch_core/jni_util.h +65 -0
  808. package/cpp/patch_core/patch_core.cpp +849 -0
  809. package/cpp/patch_core/patch_core.h +103 -0
  810. package/cpp/patch_core/patch_core_android.cpp +102 -0
  811. package/cpp/patch_core/state_core.cpp +122 -0
  812. package/cpp/patch_core/state_core.h +66 -0
  813. package/cpp/patch_core/state_ops.h +29 -0
  814. package/cpp/patch_core/update_core_android.cpp +502 -0
  815. package/cpp/update_flow_core/flow_json.cpp +660 -0
  816. package/cpp/update_flow_core/flow_json.h +121 -0
  817. package/cpp/update_flow_core/update_flow_core.cpp +418 -0
  818. package/cpp/update_flow_core/update_flow_core.h +100 -0
  819. package/cpp/update_flow_core/update_flow_jni.cpp +157 -0
  820. package/expo-module.config.json +13 -0
  821. package/harmony/hvigor-plugin.ts +212 -0
  822. package/harmony/pakta/src/README.md +74 -0
  823. package/harmony/pakta/src/main/cpp/CMakeLists.txt +92 -0
  824. package/harmony/pakta/src/main/cpp/PaktaPackage.h +60 -0
  825. package/harmony/pakta/src/main/cpp/PaktaTurboModule.cpp +123 -0
  826. package/harmony/pakta/src/main/cpp/PaktaTurboModule.h +43 -0
  827. package/harmony/pakta/src/main/cpp/pakta.cpp +1243 -0
  828. package/harmony/pakta/src/main/ets/ArchiveLimits.ts +144 -0
  829. package/harmony/pakta/src/main/ets/DownloadTask.ts +1375 -0
  830. package/harmony/pakta/src/main/ets/DownloadTaskParams.ts +27 -0
  831. package/harmony/pakta/src/main/ets/ErrorCodes.ts +80 -0
  832. package/harmony/pakta/src/main/ets/EventHub.ts +46 -0
  833. package/harmony/pakta/src/main/ets/InstallRecord.ts +192 -0
  834. package/harmony/pakta/src/main/ets/Logger.ts +83 -0
  835. package/harmony/pakta/src/main/ets/MonotonicClock.ts +18 -0
  836. package/harmony/pakta/src/main/ets/NativeCheckOrchestrator.ts +640 -0
  837. package/harmony/pakta/src/main/ets/NativePatchCore.ts +123 -0
  838. package/harmony/pakta/src/main/ets/PaktaFileJSBundleProvider.ets +54 -0
  839. package/harmony/pakta/src/main/ets/PaktaPackage.ets +15 -0
  840. package/harmony/pakta/src/main/ets/PaktaPackageCompat.ts +15 -0
  841. package/harmony/pakta/src/main/ets/PaktaPackageFactory.ts +19 -0
  842. package/harmony/pakta/src/main/ets/PaktaTurboModule.ts +433 -0
  843. package/harmony/pakta/src/main/ets/PathUtils.ts +32 -0
  844. package/harmony/pakta/src/main/ets/SaveFile.ts +39 -0
  845. package/harmony/pakta/src/main/ets/UpdateContext.ts +1059 -0
  846. package/harmony/pakta/src/main/module.json5 +14 -0
  847. package/harmony/pakta/src/main/resources/base/element/string.json +8 -0
  848. package/harmony/pakta/src/main/resources/en_US/element/string.json +8 -0
  849. package/harmony/pakta/src/main/resources/zh_CN/element/string.json +8 -0
  850. package/harmony/pakta.har +0 -0
  851. package/ios/Expo/ExpoPaktaModule.swift +12 -0
  852. package/ios/Expo/ExpoPaktaReactDelegateHandler.swift +25 -0
  853. package/ios/ImportReact.h +7 -0
  854. package/ios/PrivacyInfo.xcprivacy +84 -0
  855. package/ios/RCTPakta/RCTPakta.h +14 -0
  856. package/ios/RCTPakta/RCTPakta.mm +2775 -0
  857. package/ios/RCTPakta/RCTPaktaDownloader.h +29 -0
  858. package/ios/RCTPakta/RCTPaktaDownloader.mm +625 -0
  859. package/ios/pakta_build_time.txt +1 -0
  860. package/package.json +88 -0
  861. package/react-native.config.js +6 -0
  862. package/rn-update.podspec +221 -0
  863. package/src/NativePakta.ts +85 -0
  864. package/src/client.ts +1839 -0
  865. package/src/context.ts +102 -0
  866. package/src/core.ts +190 -0
  867. package/src/endpoint.ts +204 -0
  868. package/src/error.ts +168 -0
  869. package/src/errorReporting.ts +141 -0
  870. package/src/globals.d.ts +6 -0
  871. package/src/i18n.ts +113 -0
  872. package/src/index.ts +46 -0
  873. package/src/locales/en.ts +77 -0
  874. package/src/locales/zh.ts +71 -0
  875. package/src/metadata.ts +175 -0
  876. package/src/provider.tsx +629 -0
  877. package/src/telemetry.ts +104 -0
  878. package/src/type.ts +243 -0
  879. package/src/updateFlowCore.ts +428 -0
  880. package/src/utils.ts +268 -0
@@ -0,0 +1,1059 @@
1
+ /**
2
+ * [INPUT]: 依赖 Harmony preferences/fs/bundle/resource APIs、DownloadTask、NativePatchCore、NativeCheckOrchestrator、JS 冻结的启动版本身份与路径校验
3
+ * [OUTPUT]: 对外提供单例 UpdateContext,读取不可变 channel,管理持久状态、串行任务、bundle 解析、下载/补丁、跨渠道撤销、切包/回滚/重置、版本绑定成功确认和 bundleHash
4
+ * [POS]: Harmony 更新聚合根与状态权威,协调 RNOH bundle provider、TurboModule 和无 JS 检查的共享生命周期
5
+ */
6
+ import preferences from '@ohos.data.preferences';
7
+ import fileIo from '@ohos.file.fs';
8
+ import {
9
+ isInstallComplete,
10
+ readInstallRecord,
11
+ verifyInstallForActivation,
12
+ } from './InstallRecord';
13
+ import { DownloadTask } from './DownloadTask';
14
+ import common from '@ohos.app.ability.common';
15
+ import { DownloadTaskParams } from './DownloadTaskParams';
16
+ import { bundleManager } from '@kit.AbilityKit';
17
+ import { util } from '@kit.ArkTS';
18
+ import logger from './Logger';
19
+ import {
20
+ KEY_RESP_CACHE,
21
+ scheduleNativeCheck,
22
+ } from './NativeCheckOrchestrator';
23
+ import NativePatchCore, {
24
+ STATE_OP_CLEAR_FIRST_TIME,
25
+ STATE_OP_CLEAR_ROLLBACK_MARK,
26
+ STATE_OP_MARK_SUCCESS,
27
+ STATE_OP_RESOLVE_LAUNCH,
28
+ STATE_OP_ROLLBACK,
29
+ STATE_OP_SWITCH_VERSION,
30
+ StateCoreResult,
31
+ } from './NativePatchCore';
32
+ import { assertSafePathComponent } from './PathUtils';
33
+ import {
34
+ ERROR_SWITCH_VERSION_FAILED,
35
+ createUpdateError,
36
+ getErrorMessage,
37
+ toUpdateError,
38
+ } from './ErrorCodes';
39
+
40
+ export { isSafePathComponent } from './PathUtils';
41
+
42
+ const TAG = 'UpdateContext';
43
+ // 常规清理保留最近 3 天内触碰过的条目(续传 partial、staging 同样按 mtime)。
44
+ const CLEANUP_MAX_AGE_DAYS = 3;
45
+
46
+ // Preferences.flushSync 是 API 14 才有、getAllSync 老 SDK 声明里没有:HAR 兼容
47
+ // API 12,按结构化视图探测(不用交叉类型——ArkTS 不支持)。
48
+ interface OptionalPreferencesApi {
49
+ flushSync?: () => void;
50
+ getAllSync?: () => Record<string, unknown>;
51
+ }
52
+
53
+ interface PersistOptions {
54
+ removeStaleHash?: boolean;
55
+ cleanUp?: boolean;
56
+ markFirstLoadMarker?: boolean;
57
+ clearFirstLoadMarker?: boolean;
58
+ }
59
+
60
+ export class UpdateContext {
61
+ private context: common.UIAbilityContext;
62
+ private rootDir: string;
63
+ private preferences!: preferences.Preferences;
64
+ // 宿主传入的调试标志(RNOH isDebugModeEnabled)。debug 下 markSuccess 空转、
65
+ // 不算内嵌 bundle 摘要,与 Android 的 debug 库对齐。HAR 自身没有构建期
66
+ // DEBUG 信号(hvigor 不为 HAR 生成 BuildProfile),所以只看宿主。
67
+ private static DEBUG: boolean = false;
68
+ private static isUsingBundleUrl: boolean = false;
69
+ private static ignoreRollback: boolean = false;
70
+ // 本进程实际加载的热更版本(getBundleUrl 解析成功时记录)。
71
+ // resetToPackagedBundle 不能删它的目录:热更包内的图片等资源是运行时按需
72
+ // 读盘的,静默(不重启)reset 若删掉会导致后续所有未加载过的资源失败。
73
+ // 常规清理同样必须保留它:一次进程内两次切换后 current/last 都不再是它。
74
+ private static launchVersion: string = '';
75
+ // 由 resetToPackagedBundle 递增。原生冷启动检测可能跑数分钟并已握有决策,
76
+ // 期间发生的 reset 必须赢:编排器采样该值,发现变化即放弃激活与响应缓存,
77
+ // 在飞的救援不会把刚被重置掉的版本装回去。
78
+ private static resetGeneration: number = 0;
79
+ private static cachedPackageVersion: string = '';
80
+ private static cachedBuildTime: string = '';
81
+ private static cachedChannel: string = '';
82
+ // 单例:确保 bundle provider 与 TurboModule 共用同一份 preferences 内存状态,
83
+ // 避免 RNOH RN 实例重建后两处 UpdateContext 各自持有 preferences 缓存导致读写分裂。
84
+ private static instance: UpdateContext | null = null;
85
+ private static instanceCounter: number = 0;
86
+ private readonly instanceId: string;
87
+
88
+ /**
89
+ * @param isDebugHost 宿主的调试标志(RNOH isDebugModeEnabled)。bundle
90
+ * provider 先于 TurboModule 构造,不传该参数;TurboModule 随后显式传入时
91
+ * 会重新解析。
92
+ */
93
+ public static getInstance(
94
+ context: common.UIAbilityContext,
95
+ isDebugHost?: boolean,
96
+ ): UpdateContext {
97
+ if (isDebugHost !== undefined) {
98
+ UpdateContext.DEBUG = isDebugHost;
99
+ }
100
+ if (!UpdateContext.instance) {
101
+ UpdateContext.instance = new UpdateContext(context);
102
+ }
103
+ return UpdateContext.instance;
104
+ }
105
+
106
+ private constructor(context: common.UIAbilityContext) {
107
+ this.context = context;
108
+ this.rootDir = context.filesDir + '/_update';
109
+ this.instanceId = `uc#${++UpdateContext.instanceCounter}`;
110
+
111
+ try {
112
+ if (!fileIo.accessSync(this.rootDir)) {
113
+ fileIo.mkdirSync(this.rootDir);
114
+ }
115
+ } catch (e) {
116
+ logger.error(TAG, `Failed to create root directory: ${getErrorMessage(e)}`);
117
+ }
118
+ this.initPreferences();
119
+ this.trace('ctor');
120
+ const packageVersion = this.getPackageVersion();
121
+ const buildTime = this.getBuildTime();
122
+ const channel = this.getChannel();
123
+ const previousChannel = this.readString('binaryChannel');
124
+ const channelChanged =
125
+ previousChannel.length > 0 && previousChannel !== channel;
126
+ this.syncStateWithBinaryVersion(packageVersion, buildTime, channelChanged);
127
+ if (channel) {
128
+ this.preferences.putSync('binaryChannel', channel);
129
+ this.flushInBackground('sync binary channel');
130
+ }
131
+ }
132
+
133
+ /**
134
+ * 诊断日志:打印本实例 id 与关键状态,用于定位 preferences 多实例 / 状态分裂问题。
135
+ * 通过 hilog 输出,prefix=pakta,可在 hilog 中按 "UpdateContext" 过滤。
136
+ */
137
+ private trace(point: string): void {
138
+ const snap = this.getStateSnapshot();
139
+ logger.debug(
140
+ TAG,
141
+ `trace id=${this.instanceId} ${point}` +
142
+ ` pkg=${snap.packageVersion} bt=${snap.buildTime}` +
143
+ ` cv=${snap.currentVersion} lv=${snap.lastVersion}` +
144
+ ` ft=${snap.firstTime} fto=${snap.firstTimeOk}` +
145
+ ` rb=${snap.rolledBackVersion}` +
146
+ ` flm=${this.readString('firstLoadMarked')}` +
147
+ ` uuidSet=${!!this.readString('uuid')}`,
148
+ );
149
+ }
150
+
151
+ /** 对外诊断入口,供 TurboModule 在 getConstants 等关键节点打印状态。 */
152
+ public logStateSnapshot(point: string): void {
153
+ this.trace(point);
154
+ }
155
+
156
+ private initPreferences() {
157
+ try {
158
+ this.preferences = preferences.getPreferencesSync(this.context, {
159
+ name: 'update',
160
+ });
161
+ } catch (e) {
162
+ // Fail fast: a missing preferences store means no state can be persisted,
163
+ // which disables rollback protection. Rethrow so the failure surfaces at
164
+ // construction time instead of later as an unrelated TypeError on the
165
+ // undefined `preferences` handle.
166
+ logger.error(TAG, `Failed to init preferences: ${getErrorMessage(e)}`);
167
+ throw e;
168
+ }
169
+ }
170
+
171
+ private optionalPreferencesApi(): OptionalPreferencesApi {
172
+ return this.preferences as unknown as OptionalPreferencesApi;
173
+ }
174
+
175
+ private getBundleFlags(): bundleManager.BundleFlag {
176
+ return bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_REQUESTED_PERMISSION;
177
+ }
178
+
179
+ public getPackageVersion(): string {
180
+ if (UpdateContext.cachedPackageVersion) {
181
+ return UpdateContext.cachedPackageVersion;
182
+ }
183
+ try {
184
+ const bundleInfo = bundleManager.getBundleInfoForSelfSync(
185
+ this.getBundleFlags(),
186
+ );
187
+ UpdateContext.cachedPackageVersion = bundleInfo?.versionName || 'Unknown';
188
+ return UpdateContext.cachedPackageVersion;
189
+ } catch (error) {
190
+ logger.error(TAG, `Failed to get bundle info: ${getErrorMessage(error)}`);
191
+ return '';
192
+ }
193
+ }
194
+
195
+ public getBuildTime(): string {
196
+ if (UpdateContext.cachedBuildTime) {
197
+ return UpdateContext.cachedBuildTime;
198
+ }
199
+ try {
200
+ const content =
201
+ this.context.resourceManager.getRawFileContentSync('meta.json');
202
+ const metaData = JSON.parse(
203
+ new util.TextDecoder().decodeToString(content),
204
+ ) as Record<string, string | number | boolean | null | undefined>;
205
+ if (metaData.pakta_build_time) {
206
+ UpdateContext.cachedBuildTime = String(metaData.pakta_build_time);
207
+ return UpdateContext.cachedBuildTime;
208
+ }
209
+ } catch (error) {
210
+ logger.error(
211
+ TAG,
212
+ `Failed to read build time from raw file: ${getErrorMessage(error)}`,
213
+ );
214
+ }
215
+ return '';
216
+ }
217
+
218
+ /**
219
+ * 读取宿主 rawfile/meta.json 中固定的原生渠道。渠道属于安装包身份,
220
+ * 不接受 JS 配置覆盖;未配置时显式归入 default。
221
+ */
222
+ public getChannel(): string {
223
+ if (UpdateContext.cachedChannel) {
224
+ return UpdateContext.cachedChannel;
225
+ }
226
+ try {
227
+ const content =
228
+ this.context.resourceManager.getRawFileContentSync('meta.json');
229
+ const metaData = JSON.parse(
230
+ new util.TextDecoder().decodeToString(content),
231
+ ) as Record<string, string | number | boolean | null | undefined>;
232
+ if (typeof metaData.channel === 'string') {
233
+ const value = metaData.channel.trim();
234
+ if (value) {
235
+ UpdateContext.cachedChannel = value;
236
+ return value;
237
+ }
238
+ }
239
+ } catch (error) {
240
+ logger.error(
241
+ TAG,
242
+ `Failed to read channel from raw file: ${getErrorMessage(error)}`,
243
+ );
244
+ }
245
+ UpdateContext.cachedChannel = 'default';
246
+ return UpdateContext.cachedChannel;
247
+ }
248
+
249
+ private readString(key: string): string {
250
+ const value = this.preferences.getSync(key, '') as
251
+ | string
252
+ | boolean
253
+ | number
254
+ | null
255
+ | undefined;
256
+ if (typeof value === 'string') {
257
+ return value;
258
+ }
259
+ if (typeof value === 'number') {
260
+ return String(value);
261
+ }
262
+ if (typeof value === 'boolean') {
263
+ return value ? 'true' : 'false';
264
+ }
265
+ return '';
266
+ }
267
+
268
+ private readBoolean(key: string, defaultValue: boolean): boolean {
269
+ const value = this.preferences.getSync(key, defaultValue) as
270
+ | string
271
+ | boolean
272
+ | number
273
+ | null
274
+ | undefined;
275
+ if (typeof value === 'boolean') {
276
+ return value;
277
+ }
278
+ if (typeof value === 'string') {
279
+ if (value === 'true') {
280
+ return true;
281
+ }
282
+ if (value === 'false') {
283
+ return false;
284
+ }
285
+ }
286
+ if (typeof value === 'number') {
287
+ return value !== 0;
288
+ }
289
+ return defaultValue;
290
+ }
291
+
292
+ // >0 while a multi-write commit is open: putSync/deleteSync still apply in
293
+ // memory, the single flush happens when the outermost batch closes. The
294
+ // cold-start round's three writes (hash info, activation, response cache)
295
+ // thus reach disk as one preferences file write, not three.
296
+ private flushBatchDepth = 0;
297
+
298
+ private beginFlushBatch(): void {
299
+ this.flushBatchDepth += 1;
300
+ }
301
+
302
+ /** 关闭最外层批次时执行唯一一次落盘;返回该次落盘的 promise。 */
303
+ private endFlushBatch(reason: string): Promise<void> {
304
+ this.flushBatchDepth = Math.max(0, this.flushBatchDepth - 1);
305
+ if (this.flushBatchDepth === 0) {
306
+ return this.flushPreferences(reason);
307
+ }
308
+ return Promise.resolve();
309
+ }
310
+
311
+ /**
312
+ * 落盘。flushSync(API 14)可用时同步完成;否则返回 preferences.flush() 的
313
+ * promise。有 promise 可拒绝的操作(切换、markSuccess、setKv…)必须 await
314
+ * 它——切换只有真正写进磁盘后才能向 JS 报成功,reloadUpdate 紧接着就会
315
+ * 杀进程(SR-5,Android 是 persistEditorOrThrow)。无法 await 的同步路径
316
+ * (启动解析、getConstants)用 flushInBackground,失败只记日志。
317
+ * 批次开着时不落盘,由 endFlushBatch 统一执行。
318
+ */
319
+ private flushPreferences(reason: string): Promise<void> {
320
+ if (this.flushBatchDepth > 0) {
321
+ return Promise.resolve();
322
+ }
323
+ const api = this.optionalPreferencesApi();
324
+ if (typeof api.flushSync === 'function') {
325
+ try {
326
+ api.flushSync();
327
+ return Promise.resolve();
328
+ } catch (error) {
329
+ logger.error(
330
+ TAG,
331
+ `flushSync failed for ${reason}, falling back to flush(): ` +
332
+ getErrorMessage(error),
333
+ );
334
+ // fall through to the async flush rather than failing outright
335
+ }
336
+ }
337
+ return this.preferences.flush().then(
338
+ () => undefined,
339
+ (error: Object) => {
340
+ logger.error(
341
+ TAG,
342
+ `Failed to flush preferences for ${reason}: ${getErrorMessage(error)}`,
343
+ );
344
+ throw error;
345
+ },
346
+ );
347
+ }
348
+
349
+ private flushInBackground(reason: string): void {
350
+ this.flushPreferences(reason).catch(() => {
351
+ // 已在 flushPreferences 里记录。
352
+ });
353
+ }
354
+
355
+ private putNullableString(key: string, value?: string): void {
356
+ if (value) {
357
+ this.preferences.putSync(key, value);
358
+ return;
359
+ }
360
+ this.preferences.deleteSync(key);
361
+ }
362
+
363
+ private getBundlePath(hash: string): string {
364
+ return `${this.rootDir}/${hash}/bundle.harmony.js`;
365
+ }
366
+
367
+ private getStateSnapshot(): StateCoreResult {
368
+ return {
369
+ packageVersion: this.readString('packageVersion'),
370
+ buildTime: this.readString('buildTime'),
371
+ currentVersion: this.readString('currentVersion'),
372
+ lastVersion: this.readString('lastVersion'),
373
+ firstTime: this.readBoolean('firstTime', false),
374
+ firstTimeOk: this.readBoolean('firstTimeOk', true),
375
+ rolledBackVersion: this.readString('rolledBackVersion'),
376
+ };
377
+ }
378
+
379
+ private applyState(state: StateCoreResult): void {
380
+ this.putNullableString('packageVersion', state.packageVersion);
381
+ this.putNullableString('buildTime', state.buildTime);
382
+ this.putNullableString('currentVersion', state.currentVersion);
383
+ this.putNullableString('lastVersion', state.lastVersion);
384
+ this.preferences.putSync('firstTime', !!state.firstTime);
385
+ this.preferences.putSync('firstTimeOk', state.firstTimeOk !== false);
386
+ this.putNullableString('rolledBackVersion', state.rolledBackVersion);
387
+ }
388
+
389
+ /** 内存写入(不落盘):状态字段 + 可选的陈旧 hash / 首载标记 / 清理。 */
390
+ private writeState(state: StateCoreResult, options: PersistOptions): void {
391
+ this.applyState(state);
392
+ if (options.removeStaleHash && state.staleVersionToDelete) {
393
+ this.preferences.deleteSync(`hash_${state.staleVersionToDelete}`);
394
+ }
395
+ if (options.markFirstLoadMarker) {
396
+ this.preferences.putSync('firstLoadMarked', 'true');
397
+ }
398
+ if (options.clearFirstLoadMarker) {
399
+ this.preferences.deleteSync('firstLoadMarked');
400
+ }
401
+ if (options.cleanUp) {
402
+ this.cleanUp();
403
+ }
404
+ }
405
+
406
+ private persistState(
407
+ state: StateCoreResult,
408
+ options: PersistOptions = {},
409
+ ): Promise<void> {
410
+ this.writeState(state, options);
411
+ return this.flushPreferences('persist state');
412
+ }
413
+
414
+ /** 跑一步状态机并写入内存;落盘由调用方决定(await 或后台)。 */
415
+ private runStateOperation(
416
+ operation: number,
417
+ stringArg: string = '',
418
+ options: PersistOptions = {},
419
+ ): StateCoreResult {
420
+ const nextState = NativePatchCore.runStateCore(
421
+ operation,
422
+ this.getStateSnapshot(),
423
+ stringArg,
424
+ );
425
+ this.writeState(nextState, options);
426
+ return nextState;
427
+ }
428
+
429
+ private createTaskParams(
430
+ type: number,
431
+ url: string,
432
+ hash: string,
433
+ ): DownloadTaskParams {
434
+ const params = new DownloadTaskParams();
435
+ params.type = type;
436
+ params.url = url;
437
+ params.hash = assertSafePathComponent(hash);
438
+ return params;
439
+ }
440
+
441
+ // 串行化下载/补丁任务与破坏性清理(reset 的全量删除、按 mtime 的常规清理):
442
+ // Android 靠单线程 download executor 天然串行,Harmony 的 NAPI 任务跑在
443
+ // libuv worker 池上,若不排队,reset 的 RemovePathRecursively 可能与正在
444
+ // 写入的解压/打补丁并发,产出"bundle 在、资源半删"的目录且可能被后续
445
+ // switchVersion 激活。
446
+ private taskChain: Promise<void> = Promise.resolve();
447
+
448
+ private enqueueSerialTask<T>(job: () => Promise<T>): Promise<T> {
449
+ const run = this.taskChain.then(job);
450
+ this.taskChain = run.then(
451
+ () => undefined,
452
+ () => undefined,
453
+ );
454
+ return run;
455
+ }
456
+
457
+ private async executeTask(params: DownloadTaskParams): Promise<void> {
458
+ await this.enqueueSerialTask(() => {
459
+ const isPatchTask =
460
+ params.type === DownloadTaskParams.TASK_TYPE_PATCH_FULL ||
461
+ params.type === DownloadTaskParams.TASK_TYPE_PATCH_FROM_APP ||
462
+ params.type === DownloadTaskParams.TASK_TYPE_PATCH_FROM_PPK;
463
+ // Re-check only when this queued job actually starts. A JS download may
464
+ // have completed while the cold-start duplicate waited behind it.
465
+ if (isPatchTask && this.hasDownloadedVersion(params.hash)) {
466
+ return Promise.resolve();
467
+ }
468
+ const downloadTask = new DownloadTask(this.context);
469
+ return downloadTask.execute(params);
470
+ });
471
+ }
472
+
473
+ public syncStateWithBinaryVersion(
474
+ packageVersion: string,
475
+ buildTime: string,
476
+ forceReset: boolean = false,
477
+ ): void {
478
+ if ((!packageVersion || !buildTime) && !forceReset) {
479
+ return;
480
+ }
481
+ const currentState = this.getStateSnapshot();
482
+ const nextState = forceReset
483
+ ? {
484
+ packageVersion: packageVersion || currentState.packageVersion,
485
+ buildTime: buildTime || currentState.buildTime,
486
+ currentVersion: '',
487
+ lastVersion: '',
488
+ firstTime: false,
489
+ firstTimeOk: true,
490
+ rolledBackVersion: '',
491
+ changed: true,
492
+ }
493
+ : NativePatchCore.syncStateWithBinaryVersion(
494
+ packageVersion,
495
+ buildTime,
496
+ currentState,
497
+ );
498
+ if (!nextState.changed) {
499
+ return;
500
+ }
501
+
502
+ logger.info(
503
+ TAG,
504
+ `binary version changed, resetting update state id=${this.instanceId}`,
505
+ );
506
+ UpdateContext.ignoreRollback = false;
507
+ if (forceReset) {
508
+ UpdateContext.resetGeneration += 1;
509
+ }
510
+ this.cleanUp();
511
+ if (forceReset) {
512
+ const api = this.optionalPreferencesApi();
513
+ if (typeof api.getAllSync === 'function') {
514
+ try {
515
+ const all = api.getAllSync();
516
+ for (const key of Object.keys(all)) {
517
+ if (key.startsWith('hash_')) {
518
+ this.preferences.deleteSync(key);
519
+ }
520
+ }
521
+ } catch (e) {
522
+ logger.error(
523
+ TAG,
524
+ `Failed to clear channel hash info: ${getErrorMessage(e)}`,
525
+ );
526
+ }
527
+ }
528
+ this.preferences.deleteSync(KEY_RESP_CACHE);
529
+ }
530
+ // 仅重置状态机字段(currentVersion / lastVersion / firstTime / firstTimeOk /
531
+ // rolledBackVersion)。不再 clearExisting,避免连带清除 uuid / firstLoadMarked /
532
+ // hash_* 等与 binary 版本无关的 KV —— 它们在多实例场景下本就脆弱,连带清除会
533
+ // 让 getConstants() 永远读到空,从而 isFirstTime=false、markSuccess 永不执行。
534
+ this.writeState(nextState, {});
535
+ this.flushInBackground('sync binary version');
536
+ }
537
+
538
+ /** 写入并落盘;flushSync 不可用时以 flush() 的结果拒绝。 */
539
+ public setKv(key: string, value: string): Promise<void> {
540
+ this.preferences.putSync(key, value);
541
+ return this.flushPreferences(`set key ${key}`);
542
+ }
543
+
544
+ public getKv(key: string): string {
545
+ return this.readString(key);
546
+ }
547
+
548
+ public removeKv(key: string): Promise<void> {
549
+ this.preferences.deleteSync(key);
550
+ return this.flushPreferences(`remove key ${key}`);
551
+ }
552
+
553
+ public isFirstTime(): boolean {
554
+ return this.getStateSnapshot().firstTime;
555
+ }
556
+
557
+ public rolledBackVersion(): string {
558
+ return this.getStateSnapshot().rolledBackVersion || '';
559
+ }
560
+
561
+ public async markSuccess(expectedHash: string): Promise<boolean> {
562
+ if (UpdateContext.DEBUG) {
563
+ return true;
564
+ }
565
+
566
+ // expectedHash 必须同时对应本进程实际解析并加载的 bundle;只看持久化
567
+ // currentVersion 会把冷启动检查在 JS 初始化前切换的版本误报成功。
568
+ if (!UpdateContext.launchVersion || expectedHash !== UpdateContext.launchVersion) {
569
+ return false;
570
+ }
571
+
572
+ const nextState = NativePatchCore.runStateCore(
573
+ STATE_OP_MARK_SUCCESS,
574
+ this.getStateSnapshot(),
575
+ expectedHash,
576
+ );
577
+ if (!nextState.markSuccessAccepted) {
578
+ return false;
579
+ }
580
+ await this.persistState(nextState, {
581
+ removeStaleHash: true,
582
+ cleanUp: true,
583
+ });
584
+ return true;
585
+ }
586
+
587
+ public async clearFirstTime(): Promise<void> {
588
+ this.runStateOperation(STATE_OP_CLEAR_FIRST_TIME, '', {
589
+ cleanUp: true,
590
+ clearFirstLoadMarker: true,
591
+ });
592
+ await this.flushPreferences('clear first time');
593
+ }
594
+
595
+ /** getConstants(同步)里调用:落盘失败只记日志。 */
596
+ public clearRollbackMark(): void {
597
+ this.runStateOperation(STATE_OP_CLEAR_ROLLBACK_MARK, '', {
598
+ cleanUp: true,
599
+ });
600
+ this.flushInBackground('clear rollback mark');
601
+ }
602
+
603
+ /**
604
+ * 恢复到二进制内置包:清空整个更新状态机(下次启动即回内置 bundle)并删除
605
+ * 已下载版本——仅保留当前运行版本的目录(静默 reset 不能破坏运行中 bundle
606
+ * 的按需资源加载)。uuid 保留 —— 它标识安装实例、用于灰度分桶,reset 不应改变。
607
+ * 状态与响应缓存一次落盘;落盘失败拒绝(JS 按 RESET_FAILED 处理)。
608
+ */
609
+ public async resetToPackagedBundle(): Promise<void> {
610
+ this.trace('resetToPackagedBundle:before');
611
+ // 实时读取二进制身份(与 Android/iOS 对齐),而非 preferences 快照:
612
+ // meta.json 读取失败时快照可能为空,reset 持久化空值会让下次启动误判
613
+ // binary 变更多做一轮 cleanUp+persist。
614
+ const resetState: StateCoreResult = {
615
+ packageVersion: this.getPackageVersion(),
616
+ buildTime: this.getBuildTime(),
617
+ currentVersion: '',
618
+ lastVersion: '',
619
+ firstTime: false,
620
+ firstTimeOk: true,
621
+ rolledBackVersion: '',
622
+ };
623
+ // 先让在飞的原生检测轮次失效,再清理状态:随后在同一(单线程)执行序里
624
+ // 提交的轮次会看到新代数并整轮丢弃。
625
+ UpdateContext.resetGeneration += 1;
626
+ this.beginFlushBatch();
627
+ let flushed: Promise<void> = Promise.resolve();
628
+ try {
629
+ // 删除已下载版本的 hash_* 元信息(不走 clear():它是异步的,且会连带清掉
630
+ // uuid —— 见 syncStateWithBinaryVersion 的注释)。getAllSync 在旧 SDK 上
631
+ // 可能不存在,此时残留的 hash_* 只是无害孤儿数据,不影响 reset 语义。
632
+ const api = this.optionalPreferencesApi();
633
+ if (typeof api.getAllSync === 'function') {
634
+ try {
635
+ const all = api.getAllSync();
636
+ for (const key of Object.keys(all)) {
637
+ if (key.startsWith('hash_')) {
638
+ this.preferences.deleteSync(key);
639
+ }
640
+ }
641
+ } catch (e) {
642
+ logger.error(
643
+ TAG,
644
+ `Failed to clear hash info on reset: ${getErrorMessage(e)}`,
645
+ );
646
+ }
647
+ }
648
+ this.writeState(resetState, { clearFirstLoadMarker: true });
649
+ // 缓存里的响应仍在宣告本次 reset 刚删掉的版本,一并丢弃,避免 JS 侧复用。
650
+ this.preferences.deleteSync(KEY_RESP_CACHE);
651
+ } finally {
652
+ flushed = this.endFlushBatch('reset to packaged bundle');
653
+ }
654
+ UpdateContext.ignoreRollback = false;
655
+ await flushed;
656
+
657
+ // maxAgeDays=0:删除下载目录内容,仅保留当前运行版本的目录(残留目录由
658
+ // 下次常规清理回收)。挂到串行任务链尾,避免与在飞的解压/打补丁并发。
659
+ this.enqueueSerialTask(() =>
660
+ NativePatchCore.cleanupOldEntries(
661
+ this.rootDir,
662
+ [UpdateContext.launchVersion].filter(name => name.length > 0),
663
+ 0,
664
+ ),
665
+ ).catch((error: Object) => {
666
+ logger.error(TAG, `reset cleanup failed: ${getErrorMessage(error)}`);
667
+ });
668
+ this.trace('resetToPackagedBundle:after');
669
+ }
670
+
671
+ /** 供原生检测编排器采样/比对的 reset 代数(见 resetGeneration 注释)。 */
672
+ public getResetGeneration(): number {
673
+ return UpdateContext.resetGeneration;
674
+ }
675
+
676
+ /**
677
+ * 一次性提交原生检测轮次的全部持久化结果(版本元信息、激活、响应缓存)。
678
+ * 切换校验(含工作线程上的 bundle 摘要复核)放在第一个 putSync 之前:校验
679
+ * 失败时什么都不写,不会出现"元信息已落盘、切换没发生"的半提交。校验后
680
+ * 复核 reset 代数,之后到写入完成之间没有 await(ArkTS 单线程),因此不存在
681
+ * 可插入 reset 的窗口(iOS/Android 用锁达到同一效果)。三项写入以一次
682
+ * flush 落盘,失败拒绝。返回是否提交成功。
683
+ */
684
+ public async commitNativeCheckResult(
685
+ expectedGeneration: number,
686
+ hash: string,
687
+ hashInfoJson: string,
688
+ activate: boolean,
689
+ responseCacheJson: string,
690
+ ): Promise<boolean> {
691
+ if (UpdateContext.resetGeneration !== expectedGeneration) {
692
+ return false;
693
+ }
694
+ const shouldSwitch = activate && !!hash;
695
+ if (shouldSwitch) {
696
+ await this.verifyActivation(hash);
697
+ if (UpdateContext.resetGeneration !== expectedGeneration) {
698
+ return false;
699
+ }
700
+ }
701
+ // One flush for the whole round (see beginFlushBatch): version info,
702
+ // activation and response cache land together or not at all.
703
+ this.beginFlushBatch();
704
+ let flushed: Promise<void> = Promise.resolve();
705
+ try {
706
+ if (hash && hashInfoJson) {
707
+ this.preferences.putSync(`hash_${hash}`, hashInfoJson);
708
+ }
709
+ if (shouldSwitch) {
710
+ this.applySwitch(hash);
711
+ }
712
+ if (responseCacheJson) {
713
+ this.preferences.putSync(KEY_RESP_CACHE, responseCacheJson);
714
+ }
715
+ } finally {
716
+ flushed = this.endFlushBatch('commit native check result');
717
+ }
718
+ await flushed;
719
+ return true;
720
+ }
721
+
722
+ public async downloadFullUpdate(
723
+ url: string,
724
+ hash: string,
725
+ deadlineUptimeMs: number = 0,
726
+ ): Promise<void> {
727
+ try {
728
+ const params = this.createTaskParams(
729
+ DownloadTaskParams.TASK_TYPE_PATCH_FULL,
730
+ url,
731
+ hash,
732
+ );
733
+ params.targetFile = `${this.rootDir}/${hash}.ppk`;
734
+ params.unzipDirectory = `${this.rootDir}/${hash}`;
735
+ params.deadlineUptimeMs = deadlineUptimeMs;
736
+ await this.executeTask(params);
737
+ } catch (e) {
738
+ logger.error(TAG, `Failed to download full update: ${getErrorMessage(e)}`);
739
+ throw e;
740
+ }
741
+ }
742
+
743
+ public async downloadPatchFromPpk(
744
+ url: string,
745
+ hash: string,
746
+ originHash: string,
747
+ deadlineUptimeMs: number = 0,
748
+ ): Promise<void> {
749
+ const params = this.createTaskParams(
750
+ DownloadTaskParams.TASK_TYPE_PATCH_FROM_PPK,
751
+ url,
752
+ hash,
753
+ );
754
+ params.originHash = assertSafePathComponent(originHash);
755
+ params.targetFile = `${this.rootDir}/${originHash}_${hash}.ppk.patch`;
756
+ params.unzipDirectory = `${this.rootDir}/${hash}`;
757
+ params.originDirectory = `${this.rootDir}/${params.originHash}`;
758
+ params.deadlineUptimeMs = deadlineUptimeMs;
759
+ await this.executeTask(params);
760
+ }
761
+
762
+ public async downloadPatchFromPackage(
763
+ url: string,
764
+ hash: string,
765
+ deadlineUptimeMs: number = 0,
766
+ ): Promise<void> {
767
+ try {
768
+ const params = this.createTaskParams(
769
+ DownloadTaskParams.TASK_TYPE_PATCH_FROM_APP,
770
+ url,
771
+ hash,
772
+ );
773
+ params.targetFile = `${this.rootDir}/${hash}.app.patch`;
774
+ params.unzipDirectory = `${this.rootDir}/${hash}`;
775
+ params.deadlineUptimeMs = deadlineUptimeMs;
776
+ return await this.executeTask(params);
777
+ } catch (e) {
778
+ logger.error(
779
+ TAG,
780
+ `Failed to download package patch: ${getErrorMessage(e)}`,
781
+ );
782
+ throw e;
783
+ }
784
+ }
785
+
786
+ // 运行中热更版本安装记录里的 bundleSha256(崩溃归因用);内置 bundle /
787
+ // 历史安装 / 记录不可读时为空串。
788
+ public currentBundleSha256(hash: string): string {
789
+ if (!hash) {
790
+ return '';
791
+ }
792
+ try {
793
+ const record = readInstallRecord(
794
+ `${this.rootDir}/${assertSafePathComponent(hash)}`,
795
+ );
796
+ return record?.bundleSha256 ?? '';
797
+ } catch (e) {
798
+ return '';
799
+ }
800
+ }
801
+
802
+ // 原生冷启动检测(NativeCheckOrchestrator)用来跳过已就绪版本的重复下载
803
+ // ——alert 类策略下版本已下载但未激活,若不判在这里会每次冷启动重下一遍。
804
+ public hasDownloadedVersion(hash: string): boolean {
805
+ try {
806
+ const safeHash = assertSafePathComponent(hash);
807
+ return fileIo.accessSync(this.getBundlePath(safeHash))
808
+ && isInstallComplete(`${this.rootDir}/${safeHash}`, safeHash);
809
+ } catch (e) {
810
+ return false;
811
+ }
812
+ }
813
+
814
+ /**
815
+ * 激活前置校验(同步,不写任何东西):bundle 在盘上,且要么是本 SDK 记录为
816
+ * 完整安装的版本(bundle + 记录),要么是标记机制之前就激活过的历史版本
817
+ * (current/last 里有它)。其他无记录的目录可能是崩溃留下的半成品。
818
+ * 返回是否还需复核安装记录里的 bundle 摘要(历史版本无记录可核)。
819
+ */
820
+ private assertActivatable(safeHash: string): boolean {
821
+ if (!fileIo.accessSync(this.getBundlePath(safeHash))) {
822
+ throw createUpdateError(
823
+ ERROR_SWITCH_VERSION_FAILED,
824
+ `Bundle version ${safeHash} not found.`,
825
+ );
826
+ }
827
+ const legacyActivated =
828
+ this.readString('currentVersion') === safeHash ||
829
+ this.readString('lastVersion') === safeHash;
830
+ if (!this.hasDownloadedVersion(safeHash) && !legacyActivated) {
831
+ throw createUpdateError(
832
+ ERROR_SWITCH_VERSION_FAILED,
833
+ `Bundle version ${safeHash} is incomplete.`,
834
+ );
835
+ }
836
+ return !legacyActivated;
837
+ }
838
+
839
+ /**
840
+ * 完整的激活校验(含 native 工作线程上的 bundle 摘要复核),不写状态。
841
+ * 记录里的 bundle 摘要必须与盘上字节一致,才能把下次启动指向它。
842
+ */
843
+ public async verifyActivation(hash: string): Promise<void> {
844
+ const safeHash = assertSafePathComponent(hash);
845
+ if (this.assertActivatable(safeHash)) {
846
+ await verifyInstallForActivation(
847
+ `${this.rootDir}/${safeHash}`,
848
+ safeHash,
849
+ this.getBundlePath(safeHash),
850
+ );
851
+ }
852
+ }
853
+
854
+ /** 内存里切换状态(不落盘);调用方负责 flush。 */
855
+ private applySwitch(hash: string): void {
856
+ this.trace(`switchVersion:before ${hash}`);
857
+ this.runStateOperation(STATE_OP_SWITCH_VERSION, hash);
858
+ UpdateContext.ignoreRollback = false;
859
+ this.trace(`switchVersion:after ${hash}`);
860
+ }
861
+
862
+ /** 校验 + 切换 + 落盘;任一步失败拒绝(SWITCH_VERSION_FAILED)。 */
863
+ public async switchVersion(hash: string): Promise<void> {
864
+ try {
865
+ const safeHash = assertSafePathComponent(hash);
866
+ await this.verifyActivation(safeHash);
867
+ this.applySwitch(safeHash);
868
+ await this.flushPreferences(`switch version ${safeHash}`);
869
+ } catch (e) {
870
+ logger.error(TAG, `Failed to switch version: ${getErrorMessage(e)}`);
871
+ throw toUpdateError(e, ERROR_SWITCH_VERSION_FAILED);
872
+ }
873
+ }
874
+
875
+ public consumeFirstLoadMarker(): boolean {
876
+ const marked = this.readString('firstLoadMarked') === 'true';
877
+ this.trace(`consumeFirstLoadMarker:marked=${marked}`);
878
+ if (marked) {
879
+ this.preferences.deleteSync('firstLoadMarked');
880
+ this.flushInBackground('clear first load marker');
881
+ }
882
+ return marked;
883
+ }
884
+
885
+ public getBundleUrl() {
886
+ UpdateContext.isUsingBundleUrl = true;
887
+ this.trace('getBundleUrl:enter');
888
+ let nativeCheckRolledBackVersion = '';
889
+ try {
890
+ const stateBeforeLaunch = this.getStateSnapshot();
891
+ const launchState = NativePatchCore.runStateCore(
892
+ STATE_OP_RESOLVE_LAUNCH,
893
+ stateBeforeLaunch,
894
+ '',
895
+ UpdateContext.ignoreRollback,
896
+ true,
897
+ );
898
+ nativeCheckRolledBackVersion = launchState.rolledBackVersion || '';
899
+ if (launchState.didRollback) {
900
+ // The crash-protection rollback: the new version never called
901
+ // markSuccess. Keep this visible in release logs.
902
+ logger.error(
903
+ TAG,
904
+ `Version ${stateBeforeLaunch.currentVersion} was not marked as successful,` +
905
+ ` rolled back to ${launchState.currentVersion}`,
906
+ );
907
+ }
908
+ if (launchState.didRollback || launchState.consumedFirstTime) {
909
+ // 同步启动路径:落盘失败只记日志(状态已在内存里生效)。
910
+ this.persistState(launchState, {
911
+ markFirstLoadMarker: launchState.consumedFirstTime,
912
+ }).catch(() => {});
913
+ }
914
+ if (launchState.consumedFirstTime) {
915
+ UpdateContext.ignoreRollback = true;
916
+ }
917
+ this.trace(
918
+ `getBundleUrl:load=${launchState.loadVersion}` +
919
+ ` consumed=${launchState.consumedFirstTime}` +
920
+ ` rollback=${launchState.didRollback}`,
921
+ );
922
+
923
+ let version = launchState.loadVersion || '';
924
+ // Guard the rollback chain against cycles: a corrupted state returning an
925
+ // already-visited version would otherwise spin this loop forever during
926
+ // startup (Android has the same guard).
927
+ const visitedVersions = new Set<string>();
928
+ while (version && !visitedVersions.has(version)) {
929
+ visitedVersions.add(version);
930
+ const bundleFile = this.getBundlePath(version);
931
+ try {
932
+ if (!fileIo.accessSync(bundleFile)) {
933
+ logger.error(TAG, `Bundle version ${version} not found.`);
934
+ version = this.rollBack();
935
+ nativeCheckRolledBackVersion = this.rolledBackVersion();
936
+ continue;
937
+ }
938
+ UpdateContext.launchVersion = version;
939
+ nativeCheckRolledBackVersion = this.rolledBackVersion();
940
+ return bundleFile;
941
+ } catch (e) {
942
+ logger.error(TAG, `Failed to access bundle file: ${getErrorMessage(e)}`);
943
+ version = this.rollBack();
944
+ nativeCheckRolledBackVersion = this.rolledBackVersion();
945
+ }
946
+ }
947
+ nativeCheckRolledBackVersion = this.rolledBackVersion();
948
+ return '';
949
+ } finally {
950
+ // State corruption is exactly when the native rescue check is needed;
951
+ // schedule even if state parsing/rollback throws before a normal exit.
952
+ scheduleNativeCheck(this, nativeCheckRolledBackVersion);
953
+ }
954
+ }
955
+
956
+ public getCurrentVersion(): string {
957
+ const cv = this.getStateSnapshot().currentVersion || '';
958
+ this.trace(`getCurrentVersion:${cv}`);
959
+ return cv;
960
+ }
961
+
962
+ private rollBack(): string {
963
+ const stateBefore = this.getStateSnapshot();
964
+ const nextState = this.runStateOperation(STATE_OP_ROLLBACK);
965
+ this.flushInBackground('rollback');
966
+ logger.error(
967
+ TAG,
968
+ `Rolling back version ${stateBefore.currentVersion} to ${nextState.currentVersion}`,
969
+ );
970
+ return nextState.currentVersion || '';
971
+ }
972
+
973
+ /**
974
+ * 常规清理(best-effort 后台维护,无人等待其完成):删除 3 天未触碰且不在
975
+ * 保留名单里的条目。保留 current/last 与本进程启动的版本。挂到串行任务链
976
+ * 上——下载可能正在追加超过 3 天的续传 partial 或填充 staging,按 mtime
977
+ * 的清理若并发跑会把它们当陈旧条目删掉(Android 与下载共用同一单线程
978
+ * executor)。
979
+ */
980
+ public cleanUp(): void {
981
+ const state = this.getStateSnapshot();
982
+ const keepNames = [
983
+ state.currentVersion || '',
984
+ state.lastVersion || '',
985
+ UpdateContext.launchVersion,
986
+ ].filter(name => name.length > 0);
987
+ this.enqueueSerialTask(() =>
988
+ NativePatchCore.cleanupOldEntries(
989
+ this.rootDir,
990
+ keepNames,
991
+ CLEANUP_MAX_AGE_DAYS,
992
+ ),
993
+ ).catch((error: Object) => {
994
+ logger.error(TAG, `cleanupOldEntries failed: ${getErrorMessage(error)}`);
995
+ });
996
+ }
997
+
998
+ public getIsUsingBundleUrl(): boolean {
999
+ return UpdateContext.isUsingBundleUrl;
1000
+ }
1001
+
1002
+ // bundleHash 缓存:"<packageVersion>|<updateTime>|<sha256hex>"。键标识当前
1003
+ // 安装的二进制,每次(覆盖)安装 updateTime 都会变,每个安装只算一次。
1004
+ private static readonly KEY_BUNDLE_HASH_CACHE = 'bundleHashCache';
1005
+
1006
+ private getBundleUpdateTime(): number {
1007
+ try {
1008
+ const bundleInfo = bundleManager.getBundleInfoForSelfSync(
1009
+ this.getBundleFlags(),
1010
+ );
1011
+ return bundleInfo?.updateTime ?? 0;
1012
+ } catch (error) {
1013
+ logger.error(
1014
+ TAG,
1015
+ `Failed to get bundle update time: ${getErrorMessage(error)}`,
1016
+ );
1017
+ return 0;
1018
+ }
1019
+ }
1020
+
1021
+ /**
1022
+ * bundleHash = 二进制内嵌 JS bundle 的 sha256 —— 标识二进制本身,与当前运行
1023
+ * 的热更版本无关。哈希对象与 pdiff 的源读取完全一致:rawfile 的
1024
+ * bundle.harmony.js(DownloadTask.doPatchFromApp 同一读法)。懒计算 + 缓存;
1025
+ * 永不失败——空串表示"未知",服务端回退 buildTime 启发式。
1026
+ */
1027
+ public async getBundleHash(): Promise<string> {
1028
+ if (UpdateContext.DEBUG) {
1029
+ // debug 下 bundle 由 metro 提供,与 dev 删 buildTime 的行为对齐。
1030
+ return '';
1031
+ }
1032
+ const cachePrefix = `${this.getPackageVersion()}|${this.getBundleUpdateTime()}|`;
1033
+ const cached = this.readString(UpdateContext.KEY_BUNDLE_HASH_CACHE);
1034
+ if (cached.startsWith(cachePrefix)) {
1035
+ return cached.slice(cachePrefix.length);
1036
+ }
1037
+ let hash = '';
1038
+ try {
1039
+ // 异步读:TurboModule 跑在 UI 线程,同步读几 MB 会卡主线程一次。C++
1040
+ // 哈希本身毫秒级,同步无妨。
1041
+ const content =
1042
+ await this.context.resourceManager.getRawFileContent('bundle.harmony.js');
1043
+ hash = NativePatchCore.sha256Hex(content);
1044
+ } catch (error) {
1045
+ // rawfile 缺 bundle(未打包 release bundle)是合法的"未知",不是错误。
1046
+ logger.info(TAG, `Cannot hash embedded bundle: ${getErrorMessage(error)}`);
1047
+ return '';
1048
+ }
1049
+ if (hash) {
1050
+ this.preferences.putSync(
1051
+ UpdateContext.KEY_BUNDLE_HASH_CACHE,
1052
+ cachePrefix + hash,
1053
+ );
1054
+ // 缓存落盘失败不影响返回值(下次重算即可)。
1055
+ this.flushInBackground('cache bundle hash');
1056
+ }
1057
+ return hash;
1058
+ }
1059
+ }