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.
- package/LICENSE +22 -0
- package/README-CN.md +97 -0
- package/README.md +97 -0
- package/THIRD_PARTY_NOTICES.md +8 -0
- package/android/build.gradle +253 -0
- package/android/jni/Android.mk +41 -0
- package/android/jni/Application.mk +20 -0
- package/android/jni/HDiffPatch/.travis.yml +33 -0
- package/android/jni/HDiffPatch/CHANGELOG.md +153 -0
- package/android/jni/HDiffPatch/LICENSE +48 -0
- package/android/jni/HDiffPatch/Makefile +157 -0
- package/android/jni/HDiffPatch/README.md +307 -0
- package/android/jni/HDiffPatch/_atosize.h +83 -0
- package/android/jni/HDiffPatch/_clock_for_demo.h +47 -0
- package/android/jni/HDiffPatch/_dir_ignore.h +191 -0
- package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/Android.mk +37 -0
- package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/Application.mk +7 -0
- package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/build_libs.bat +1 -0
- package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/build_libs.sh +1 -0
- package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/hpatch.c +18 -0
- package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/hpatch.h +20 -0
- package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/hpatch_jni.c +28 -0
- package/android/jni/HDiffPatch/builds/android_ndk_jni_mk/java/com/github/sisong/HPatch.java +8 -0
- package/android/jni/HDiffPatch/builds/codeblocks/HDiffPatch.workspace +8 -0
- package/android/jni/HDiffPatch/builds/codeblocks/HDiffZ.cbp +219 -0
- package/android/jni/HDiffPatch/builds/codeblocks/HPatchZ.cbp +156 -0
- package/android/jni/HDiffPatch/builds/codeblocks/unitTest.cbp +65 -0
- package/android/jni/HDiffPatch/builds/vc/HDiffPatch.sln +105 -0
- package/android/jni/HDiffPatch/builds/vc/HDiffZ.vcxproj +237 -0
- package/android/jni/HDiffPatch/builds/vc/HDiffZ.vcxproj.user +3 -0
- package/android/jni/HDiffPatch/builds/vc/HPatchZ.vcxproj +318 -0
- package/android/jni/HDiffPatch/builds/vc/HPatchZ.vcxproj.user +3 -0
- package/android/jni/HDiffPatch/builds/vc/unitTest.vcxproj +182 -0
- package/android/jni/HDiffPatch/builds/vc/unitTest.vcxproj.user +3 -0
- package/android/jni/HDiffPatch/builds/xcode/HDiffPatch.xcworkspace/contents.xcworkspacedata +30 -0
- package/android/jni/HDiffPatch/builds/xcode/HDiffPatch.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/android/jni/HDiffPatch/builds/xcode/bestParams.xcodeproj/project.pbxproj +408 -0
- package/android/jni/HDiffPatch/builds/xcode/bestParams.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/android/jni/HDiffPatch/builds/xcode/hdiffz.xcodeproj/project.pbxproj +573 -0
- package/android/jni/HDiffPatch/builds/xcode/hdiffz.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/android/jni/HDiffPatch/builds/xcode/hdiffz.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/android/jni/HDiffPatch/builds/xcode/hpatchz.xcodeproj/project.pbxproj +396 -0
- package/android/jni/HDiffPatch/builds/xcode/hpatchz.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/android/jni/HDiffPatch/builds/xcode/lz4.xcodeproj/project.pbxproj +268 -0
- package/android/jni/HDiffPatch/builds/xcode/lz4.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/android/jni/HDiffPatch/builds/xcode/lzma.xcodeproj/project.pbxproj +361 -0
- package/android/jni/HDiffPatch/builds/xcode/lzma.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/android/jni/HDiffPatch/builds/xcode/testHashClash.xcodeproj/project.pbxproj +301 -0
- package/android/jni/HDiffPatch/builds/xcode/testHashClash.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/android/jni/HDiffPatch/builds/xcode/testHashClash.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/android/jni/HDiffPatch/builds/xcode/unitTest.xcodeproj/project.pbxproj +411 -0
- package/android/jni/HDiffPatch/builds/xcode/unitTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/android/jni/HDiffPatch/builds/xcode/zstd.xcodeproj/project.pbxproj +504 -0
- package/android/jni/HDiffPatch/builds/xcode/zstd.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/android/jni/HDiffPatch/checksum_plugin_demo.h +344 -0
- package/android/jni/HDiffPatch/compress_parallel.cpp +166 -0
- package/android/jni/HDiffPatch/compress_parallel.h +59 -0
- package/android/jni/HDiffPatch/compress_plugin_demo.h +1152 -0
- package/android/jni/HDiffPatch/decompress_plugin_demo.h +995 -0
- package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff.cpp +797 -0
- package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff.h +65 -0
- package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff_tools.cpp +200 -0
- package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_diff_tools.h +178 -0
- package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_manifest.cpp +357 -0
- package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/dir_manifest.h +87 -0
- package/android/jni/HDiffPatch/dirDiffPatch/dir_diff/file_for_dirDiff.h +151 -0
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch.c +770 -0
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch.h +236 -0
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_private.h +47 -0
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_tools.c +112 -0
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_tools.h +53 -0
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/dir_patch_types.h +61 -0
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_dir_output.c +331 -0
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_dir_output.h +144 -0
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_stream.c +176 -0
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/new_stream.h +84 -0
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/ref_stream.c +146 -0
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/ref_stream.h +61 -0
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/res_handle_limit.c +152 -0
- package/android/jni/HDiffPatch/dirDiffPatch/dir_patch/res_handle_limit.h +76 -0
- package/android/jni/HDiffPatch/file_for_patch.c +524 -0
- package/android/jni/HDiffPatch/file_for_patch.h +259 -0
- package/android/jni/HDiffPatch/hdiffz.cpp +1570 -0
- package/android/jni/HDiffPatch/hpatch_dir_listener.h +290 -0
- package/android/jni/HDiffPatch/hpatchz.c +1221 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/diff.cpp +1025 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/diff.h +116 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/diff_types.h +72 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/bytes_rle.cpp +213 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/bytes_rle.h +63 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/compress_detect.cpp +170 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/compress_detect.h +86 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/config.h +89 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.c +13 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.c.inc.h +398 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort.h +194 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort64.c +13 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort64.h +204 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/divsufsort_private.h +207 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/sssort.c.inc.h +815 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/trsort.c.inc.h +586 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/libdivsufsort/utils.c.inc.h +381 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/adler_roll.c +352 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/adler_roll.h +137 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/bloom_filter.h +137 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/covers.h +70 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/digest_matcher.cpp +628 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/digest_matcher.h +87 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/stream_serialize.cpp +363 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/limit_mem_diff/stream_serialize.h +139 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/mem_buf.h +68 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/pack_uint.h +115 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/suffix_string.cpp +342 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HDiff/private_diff/suffix_string.h +94 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HPatch/checksum_plugin.h +52 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HPatch/patch.c +2292 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HPatch/patch.h +215 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HPatch/patch_private.h +165 -0
- package/android/jni/HDiffPatch/libHDiffPatch/HPatch/patch_types.h +251 -0
- package/android/jni/HDiffPatch/libParallel/parallel_channel.cpp +174 -0
- package/android/jni/HDiffPatch/libParallel/parallel_channel.h +73 -0
- package/android/jni/HDiffPatch/libParallel/parallel_import.cpp +367 -0
- package/android/jni/HDiffPatch/libParallel/parallel_import.h +92 -0
- package/android/jni/hpatch.c +232 -0
- package/android/jni/hpatch.h +43 -0
- package/android/jni/lzma/Asm/arm/7zCrcOpt.asm +100 -0
- package/android/jni/lzma/Asm/x86/7zAsm.asm +147 -0
- package/android/jni/lzma/Asm/x86/7zCrcOpt.asm +147 -0
- package/android/jni/lzma/Asm/x86/AesOpt.asm +237 -0
- package/android/jni/lzma/Asm/x86/LzmaDecOpt.asm +1258 -0
- package/android/jni/lzma/Asm/x86/XzCrc64Opt.asm +205 -0
- package/android/jni/lzma/C/7z.h +202 -0
- package/android/jni/lzma/C/7zAlloc.c +80 -0
- package/android/jni/lzma/C/7zAlloc.h +19 -0
- package/android/jni/lzma/C/7zArcIn.c +1771 -0
- package/android/jni/lzma/C/7zBuf.c +36 -0
- package/android/jni/lzma/C/7zBuf.h +35 -0
- package/android/jni/lzma/C/7zBuf2.c +52 -0
- package/android/jni/lzma/C/7zCrc.c +128 -0
- package/android/jni/lzma/C/7zCrc.h +25 -0
- package/android/jni/lzma/C/7zCrcOpt.c +115 -0
- package/android/jni/lzma/C/7zDec.c +591 -0
- package/android/jni/lzma/C/7zFile.c +286 -0
- package/android/jni/lzma/C/7zFile.h +83 -0
- package/android/jni/lzma/C/7zStream.c +176 -0
- package/android/jni/lzma/C/7zTypes.h +375 -0
- package/android/jni/lzma/C/7zVersion.h +27 -0
- package/android/jni/lzma/C/7zVersion.rc +55 -0
- package/android/jni/lzma/C/Aes.c +306 -0
- package/android/jni/lzma/C/Aes.h +38 -0
- package/android/jni/lzma/C/AesOpt.c +184 -0
- package/android/jni/lzma/C/Alloc.c +455 -0
- package/android/jni/lzma/C/Alloc.h +51 -0
- package/android/jni/lzma/C/Bcj2.c +257 -0
- package/android/jni/lzma/C/Bcj2.h +146 -0
- package/android/jni/lzma/C/Bcj2Enc.c +311 -0
- package/android/jni/lzma/C/Bra.c +230 -0
- package/android/jni/lzma/C/Bra.h +64 -0
- package/android/jni/lzma/C/Bra86.c +82 -0
- package/android/jni/lzma/C/BraIA64.c +53 -0
- package/android/jni/lzma/C/Compiler.h +33 -0
- package/android/jni/lzma/C/CpuArch.c +218 -0
- package/android/jni/lzma/C/CpuArch.h +336 -0
- package/android/jni/lzma/C/Delta.c +64 -0
- package/android/jni/lzma/C/Delta.h +19 -0
- package/android/jni/lzma/C/DllSecur.c +108 -0
- package/android/jni/lzma/C/DllSecur.h +20 -0
- package/android/jni/lzma/C/LzFind.c +1127 -0
- package/android/jni/lzma/C/LzFind.h +121 -0
- package/android/jni/lzma/C/LzFindMt.c +853 -0
- package/android/jni/lzma/C/LzFindMt.h +101 -0
- package/android/jni/lzma/C/LzHash.h +57 -0
- package/android/jni/lzma/C/Lzma2Dec.c +488 -0
- package/android/jni/lzma/C/Lzma2Dec.h +120 -0
- package/android/jni/lzma/C/Lzma2DecMt.c +1082 -0
- package/android/jni/lzma/C/Lzma2DecMt.h +79 -0
- package/android/jni/lzma/C/Lzma2Enc.c +803 -0
- package/android/jni/lzma/C/Lzma2Enc.h +55 -0
- package/android/jni/lzma/C/Lzma86.h +111 -0
- package/android/jni/lzma/C/Lzma86Dec.c +54 -0
- package/android/jni/lzma/C/Lzma86Enc.c +106 -0
- package/android/jni/lzma/C/LzmaDec.c +1185 -0
- package/android/jni/lzma/C/LzmaDec.h +234 -0
- package/android/jni/lzma/C/LzmaEnc.c +2976 -0
- package/android/jni/lzma/C/LzmaEnc.h +76 -0
- package/android/jni/lzma/C/LzmaLib.c +40 -0
- package/android/jni/lzma/C/LzmaLib.h +131 -0
- package/android/jni/lzma/C/MtCoder.c +601 -0
- package/android/jni/lzma/C/MtCoder.h +141 -0
- package/android/jni/lzma/C/MtDec.c +1138 -0
- package/android/jni/lzma/C/MtDec.h +201 -0
- package/android/jni/lzma/C/Ppmd.h +85 -0
- package/android/jni/lzma/C/Ppmd7.c +712 -0
- package/android/jni/lzma/C/Ppmd7.h +142 -0
- package/android/jni/lzma/C/Ppmd7Dec.c +191 -0
- package/android/jni/lzma/C/Ppmd7Enc.c +187 -0
- package/android/jni/lzma/C/Precomp.h +10 -0
- package/android/jni/lzma/C/RotateDefs.h +30 -0
- package/android/jni/lzma/C/Sha256.c +248 -0
- package/android/jni/lzma/C/Sha256.h +26 -0
- package/android/jni/lzma/C/Sort.c +141 -0
- package/android/jni/lzma/C/Sort.h +18 -0
- package/android/jni/lzma/C/Threads.c +95 -0
- package/android/jni/lzma/C/Threads.h +70 -0
- package/android/jni/lzma/C/ThreadsP.c +396 -0
- package/android/jni/lzma/C/ThreadsP.h +31 -0
- package/android/jni/lzma/C/Util/7z/7z.dsp +241 -0
- package/android/jni/lzma/C/Util/7z/7z.dsw +29 -0
- package/android/jni/lzma/C/Util/7z/7zMain.c +686 -0
- package/android/jni/lzma/C/Util/7z/Precomp.c +4 -0
- package/android/jni/lzma/C/Util/7z/Precomp.h +10 -0
- package/android/jni/lzma/C/Util/7z/makefile +40 -0
- package/android/jni/lzma/C/Util/7z/makefile.gcc +75 -0
- package/android/jni/lzma/C/Util/Lzma/LzmaUtil.c +258 -0
- package/android/jni/lzma/C/Util/Lzma/LzmaUtil.dsp +168 -0
- package/android/jni/lzma/C/Util/Lzma/LzmaUtil.dsw +29 -0
- package/android/jni/lzma/C/Util/Lzma/makefile +28 -0
- package/android/jni/lzma/C/Util/Lzma/makefile.gcc +44 -0
- package/android/jni/lzma/C/Util/LzmaLib/LzmaLib.def +4 -0
- package/android/jni/lzma/C/Util/LzmaLib/LzmaLib.dsp +178 -0
- package/android/jni/lzma/C/Util/LzmaLib/LzmaLib.dsw +29 -0
- package/android/jni/lzma/C/Util/LzmaLib/LzmaLibExports.c +14 -0
- package/android/jni/lzma/C/Util/LzmaLib/makefile +34 -0
- package/android/jni/lzma/C/Util/LzmaLib/resource.rc +3 -0
- package/android/jni/lzma/C/Util/SfxSetup/Precomp.c +4 -0
- package/android/jni/lzma/C/Util/SfxSetup/Precomp.h +10 -0
- package/android/jni/lzma/C/Util/SfxSetup/SfxSetup.c +640 -0
- package/android/jni/lzma/C/Util/SfxSetup/SfxSetup.dsp +231 -0
- package/android/jni/lzma/C/Util/SfxSetup/SfxSetup.dsw +29 -0
- package/android/jni/lzma/C/Util/SfxSetup/makefile +37 -0
- package/android/jni/lzma/C/Util/SfxSetup/makefile_con +38 -0
- package/android/jni/lzma/C/Util/SfxSetup/resource.rc +5 -0
- package/android/jni/lzma/C/Util/SfxSetup/setup.ico +0 -0
- package/android/jni/lzma/C/Xz.c +90 -0
- package/android/jni/lzma/C/Xz.h +460 -0
- package/android/jni/lzma/C/XzCrc64.c +86 -0
- package/android/jni/lzma/C/XzCrc64.h +26 -0
- package/android/jni/lzma/C/XzCrc64Opt.c +69 -0
- package/android/jni/lzma/C/XzDec.c +2766 -0
- package/android/jni/lzma/C/XzEnc.c +1329 -0
- package/android/jni/lzma/C/XzEnc.h +60 -0
- package/android/jni/lzma/C/XzIn.c +319 -0
- package/android/jni/lzma/CPP/7zip/7zip.mak +240 -0
- package/android/jni/lzma/CPP/7zip/Aes.mak +7 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zCompressionMode.cpp +3 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zCompressionMode.h +76 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zDecode.cpp +569 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zDecode.h +70 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zEncode.cpp +678 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zEncode.h +92 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zExtract.cpp +423 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zFolderInStream.cpp +139 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zFolderInStream.h +61 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zHandler.cpp +763 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zHandler.h +181 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zHandlerOut.cpp +942 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zHeader.cpp +19 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zHeader.h +148 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zIn.cpp +1666 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zIn.h +445 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zItem.h +202 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zOut.cpp +901 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zOut.h +335 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zProperties.cpp +174 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zProperties.h +22 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zRegister.cpp +21 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zSpecStream.cpp +22 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zSpecStream.h +35 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zUpdate.cpp +2500 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/7zUpdate.h +139 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/StdAfx.cpp +3 -0
- package/android/jni/lzma/CPP/7zip/Archive/7z/StdAfx.h +8 -0
- package/android/jni/lzma/CPP/7zip/Archive/Archive.def +12 -0
- package/android/jni/lzma/CPP/7zip/Archive/Archive2.def +19 -0
- package/android/jni/lzma/CPP/7zip/Archive/ArchiveExports.cpp +151 -0
- package/android/jni/lzma/CPP/7zip/Archive/Common/CoderMixer2.cpp +1125 -0
- package/android/jni/lzma/CPP/7zip/Archive/Common/CoderMixer2.h +447 -0
- package/android/jni/lzma/CPP/7zip/Archive/Common/DummyOutStream.cpp +17 -0
- package/android/jni/lzma/CPP/7zip/Archive/Common/DummyOutStream.h +25 -0
- package/android/jni/lzma/CPP/7zip/Archive/Common/HandlerOut.cpp +232 -0
- package/android/jni/lzma/CPP/7zip/Archive/Common/HandlerOut.h +110 -0
- package/android/jni/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.cpp +46 -0
- package/android/jni/lzma/CPP/7zip/Archive/Common/InStreamWithCRC.h +67 -0
- package/android/jni/lzma/CPP/7zip/Archive/Common/ItemNameUtils.cpp +88 -0
- package/android/jni/lzma/CPP/7zip/Archive/Common/ItemNameUtils.h +28 -0
- package/android/jni/lzma/CPP/7zip/Archive/Common/MultiStream.cpp +191 -0
- package/android/jni/lzma/CPP/7zip/Archive/Common/MultiStream.h +89 -0
- package/android/jni/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.cpp +18 -0
- package/android/jni/lzma/CPP/7zip/Archive/Common/OutStreamWithCRC.h +37 -0
- package/android/jni/lzma/CPP/7zip/Archive/Common/ParseProperties.cpp +3 -0
- package/android/jni/lzma/CPP/7zip/Archive/Common/ParseProperties.h +6 -0
- package/android/jni/lzma/CPP/7zip/Archive/Common/StdAfx.h +8 -0
- package/android/jni/lzma/CPP/7zip/Archive/DllExports2.cpp +122 -0
- package/android/jni/lzma/CPP/7zip/Archive/IArchive.h +608 -0
- package/android/jni/lzma/CPP/7zip/Archive/Icons/7z.ico +0 -0
- package/android/jni/lzma/CPP/7zip/Archive/LzmaHandler.cpp +629 -0
- package/android/jni/lzma/CPP/7zip/Archive/SplitHandler.cpp +359 -0
- package/android/jni/lzma/CPP/7zip/Archive/StdAfx.h +8 -0
- package/android/jni/lzma/CPP/7zip/Archive/XzHandler.cpp +1308 -0
- package/android/jni/lzma/CPP/7zip/Archive/XzHandler.h +11 -0
- package/android/jni/lzma/CPP/7zip/Asm.mak +9 -0
- package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsp +1910 -0
- package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/Alone.dsw +29 -0
- package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.cpp +3 -0
- package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/StdAfx.h +8 -0
- package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/makefile +154 -0
- package/android/jni/lzma/CPP/7zip/Bundles/Alone7z/resource.rc +7 -0
- package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.cpp +3 -0
- package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/StdAfx.h +8 -0
- package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/makefile +96 -0
- package/android/jni/lzma/CPP/7zip/Bundles/Format7zExtractR/resource.rc +5 -0
- package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.cpp +3 -0
- package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/StdAfx.h +8 -0
- package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/makefile +116 -0
- package/android/jni/lzma/CPP/7zip/Bundles/Format7zR/resource.rc +5 -0
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/LzmaAlone.cpp +799 -0
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/LzmaCon.dsp +477 -0
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/LzmaCon.dsw +29 -0
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/StdAfx.cpp +3 -0
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/StdAfx.h +8 -0
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/makefile +59 -0
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/makefile.gcc +195 -0
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaCon/resource.rc +3 -0
- package/android/jni/lzma/CPP/7zip/Bundles/LzmaSpec/LzmaSpec.cpp +715 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/7z.ico +0 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/SFXCon.dsp +912 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/SFXCon.dsw +29 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/SfxCon.cpp +482 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/StdAfx.cpp +3 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/StdAfx.h +8 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/makefile +134 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXCon/resource.rc +5 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.cpp +246 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractCallbackSfx.h +86 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.cpp +137 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/ExtractEngine.h +11 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/SFXSetup.dsp +803 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/SFXSetup.dsw +29 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/SfxSetup.cpp +364 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/StdAfx.cpp +3 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/StdAfx.h +13 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/makefile +117 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/resource.h +6 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/resource.rc +16 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXSetup/setup.ico +0 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/7z.ico +0 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/SFXWin.dsp +988 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/SFXWin.dsw +29 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/SfxWin.cpp +241 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/StdAfx.cpp +3 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/StdAfx.h +14 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/makefile +153 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/resource.h +1 -0
- package/android/jni/lzma/CPP/7zip/Bundles/SFXWin/resource.rc +50 -0
- package/android/jni/lzma/CPP/7zip/Common/CWrappers.cpp +250 -0
- package/android/jni/lzma/CPP/7zip/Common/CWrappers.h +120 -0
- package/android/jni/lzma/CPP/7zip/Common/CreateCoder.cpp +536 -0
- package/android/jni/lzma/CPP/7zip/Common/CreateCoder.h +192 -0
- package/android/jni/lzma/CPP/7zip/Common/FilePathAutoRename.cpp +46 -0
- package/android/jni/lzma/CPP/7zip/Common/FilePathAutoRename.h +10 -0
- package/android/jni/lzma/CPP/7zip/Common/FileStreams.cpp +475 -0
- package/android/jni/lzma/CPP/7zip/Common/FileStreams.h +166 -0
- package/android/jni/lzma/CPP/7zip/Common/FilterCoder.cpp +435 -0
- package/android/jni/lzma/CPP/7zip/Common/FilterCoder.h +205 -0
- package/android/jni/lzma/CPP/7zip/Common/InBuffer.cpp +163 -0
- package/android/jni/lzma/CPP/7zip/Common/InBuffer.h +92 -0
- package/android/jni/lzma/CPP/7zip/Common/InOutTempBuffer.cpp +127 -0
- package/android/jni/lzma/CPP/7zip/Common/InOutTempBuffer.h +48 -0
- package/android/jni/lzma/CPP/7zip/Common/LimitedStreams.cpp +367 -0
- package/android/jni/lzma/CPP/7zip/Common/LimitedStreams.h +252 -0
- package/android/jni/lzma/CPP/7zip/Common/LockedStream.cpp +3 -0
- package/android/jni/lzma/CPP/7zip/Common/LockedStream.h +6 -0
- package/android/jni/lzma/CPP/7zip/Common/MethodId.cpp +3 -0
- package/android/jni/lzma/CPP/7zip/Common/MethodId.h +10 -0
- package/android/jni/lzma/CPP/7zip/Common/MethodProps.cpp +509 -0
- package/android/jni/lzma/CPP/7zip/Common/MethodProps.h +264 -0
- package/android/jni/lzma/CPP/7zip/Common/OffsetStream.cpp +39 -0
- package/android/jni/lzma/CPP/7zip/Common/OffsetStream.h +26 -0
- package/android/jni/lzma/CPP/7zip/Common/OutBuffer.cpp +111 -0
- package/android/jni/lzma/CPP/7zip/Common/OutBuffer.h +66 -0
- package/android/jni/lzma/CPP/7zip/Common/ProgressUtils.cpp +51 -0
- package/android/jni/lzma/CPP/7zip/Common/ProgressUtils.h +35 -0
- package/android/jni/lzma/CPP/7zip/Common/PropId.cpp +108 -0
- package/android/jni/lzma/CPP/7zip/Common/RegisterArc.h +78 -0
- package/android/jni/lzma/CPP/7zip/Common/RegisterCodec.h +106 -0
- package/android/jni/lzma/CPP/7zip/Common/StdAfx.h +8 -0
- package/android/jni/lzma/CPP/7zip/Common/StreamBinder.cpp +156 -0
- package/android/jni/lzma/CPP/7zip/Common/StreamBinder.h +60 -0
- package/android/jni/lzma/CPP/7zip/Common/StreamObjects.cpp +285 -0
- package/android/jni/lzma/CPP/7zip/Common/StreamObjects.h +157 -0
- package/android/jni/lzma/CPP/7zip/Common/StreamUtils.cpp +56 -0
- package/android/jni/lzma/CPP/7zip/Common/StreamUtils.h +13 -0
- package/android/jni/lzma/CPP/7zip/Common/UniqBlocks.cpp +57 -0
- package/android/jni/lzma/CPP/7zip/Common/UniqBlocks.h +26 -0
- package/android/jni/lzma/CPP/7zip/Common/VirtThread.cpp +48 -0
- package/android/jni/lzma/CPP/7zip/Common/VirtThread.h +24 -0
- package/android/jni/lzma/CPP/7zip/Compress/Bcj2Coder.cpp +666 -0
- package/android/jni/lzma/CPP/7zip/Compress/Bcj2Coder.h +120 -0
- package/android/jni/lzma/CPP/7zip/Compress/Bcj2Register.cpp +24 -0
- package/android/jni/lzma/CPP/7zip/Compress/BcjCoder.cpp +24 -0
- package/android/jni/lzma/CPP/7zip/Compress/BcjCoder.h +31 -0
- package/android/jni/lzma/CPP/7zip/Compress/BcjRegister.cpp +17 -0
- package/android/jni/lzma/CPP/7zip/Compress/BranchMisc.cpp +23 -0
- package/android/jni/lzma/CPP/7zip/Compress/BranchMisc.h +35 -0
- package/android/jni/lzma/CPP/7zip/Compress/BranchRegister.cpp +41 -0
- package/android/jni/lzma/CPP/7zip/Compress/ByteSwap.cpp +92 -0
- package/android/jni/lzma/CPP/7zip/Compress/CodecExports.cpp +344 -0
- package/android/jni/lzma/CPP/7zip/Compress/CopyCoder.cpp +120 -0
- package/android/jni/lzma/CPP/7zip/Compress/CopyCoder.h +49 -0
- package/android/jni/lzma/CPP/7zip/Compress/CopyRegister.cpp +15 -0
- package/android/jni/lzma/CPP/7zip/Compress/DeltaFilter.cpp +128 -0
- package/android/jni/lzma/CPP/7zip/Compress/Lzma2Decoder.cpp +265 -0
- package/android/jni/lzma/CPP/7zip/Compress/Lzma2Decoder.h +96 -0
- package/android/jni/lzma/CPP/7zip/Compress/Lzma2Encoder.cpp +122 -0
- package/android/jni/lzma/CPP/7zip/Compress/Lzma2Encoder.h +42 -0
- package/android/jni/lzma/CPP/7zip/Compress/Lzma2Register.cpp +22 -0
- package/android/jni/lzma/CPP/7zip/Compress/LzmaDecoder.cpp +343 -0
- package/android/jni/lzma/CPP/7zip/Compress/LzmaDecoder.h +113 -0
- package/android/jni/lzma/CPP/7zip/Compress/LzmaEncoder.cpp +182 -0
- package/android/jni/lzma/CPP/7zip/Compress/LzmaEncoder.h +46 -0
- package/android/jni/lzma/CPP/7zip/Compress/LzmaRegister.cpp +22 -0
- package/android/jni/lzma/CPP/7zip/Compress/PpmdDecoder.cpp +170 -0
- package/android/jni/lzma/CPP/7zip/Compress/PpmdDecoder.h +86 -0
- package/android/jni/lzma/CPP/7zip/Compress/PpmdEncoder.cpp +152 -0
- package/android/jni/lzma/CPP/7zip/Compress/PpmdEncoder.h +58 -0
- package/android/jni/lzma/CPP/7zip/Compress/PpmdRegister.cpp +22 -0
- package/android/jni/lzma/CPP/7zip/Compress/StdAfx.h +8 -0
- package/android/jni/lzma/CPP/7zip/Compress/XzDecoder.cpp +150 -0
- package/android/jni/lzma/CPP/7zip/Compress/XzDecoder.h +92 -0
- package/android/jni/lzma/CPP/7zip/Compress/XzEncoder.cpp +245 -0
- package/android/jni/lzma/CPP/7zip/Compress/XzEncoder.h +46 -0
- package/android/jni/lzma/CPP/7zip/Crc.mak +8 -0
- package/android/jni/lzma/CPP/7zip/Crc64.mak +8 -0
- package/android/jni/lzma/CPP/7zip/Crypto/7zAes.cpp +280 -0
- package/android/jni/lzma/CPP/7zip/Crypto/7zAes.h +118 -0
- package/android/jni/lzma/CPP/7zip/Crypto/7zAesRegister.cpp +17 -0
- package/android/jni/lzma/CPP/7zip/Crypto/MyAes.cpp +112 -0
- package/android/jni/lzma/CPP/7zip/Crypto/MyAes.h +57 -0
- package/android/jni/lzma/CPP/7zip/Crypto/MyAesReg.cpp +16 -0
- package/android/jni/lzma/CPP/7zip/Crypto/RandGen.cpp +233 -0
- package/android/jni/lzma/CPP/7zip/Crypto/RandGen.h +40 -0
- package/android/jni/lzma/CPP/7zip/Crypto/StdAfx.h +8 -0
- package/android/jni/lzma/CPP/7zip/GuiCommon.rc +84 -0
- package/android/jni/lzma/CPP/7zip/Guid.txt +220 -0
- package/android/jni/lzma/CPP/7zip/ICoder.h +399 -0
- package/android/jni/lzma/CPP/7zip/IDecl.h +28 -0
- package/android/jni/lzma/CPP/7zip/IPassword.h +23 -0
- package/android/jni/lzma/CPP/7zip/IProgress.h +19 -0
- package/android/jni/lzma/CPP/7zip/IStream.h +127 -0
- package/android/jni/lzma/CPP/7zip/LzmaDec.mak +5 -0
- package/android/jni/lzma/CPP/7zip/MyVersion.h +2 -0
- package/android/jni/lzma/CPP/7zip/MyVersionInfo.rc +2 -0
- package/android/jni/lzma/CPP/7zip/PropID.h +127 -0
- package/android/jni/lzma/CPP/7zip/SubBuild.mak +3 -0
- package/android/jni/lzma/CPP/7zip/UI/Client7z/Client7z.cpp +993 -0
- package/android/jni/lzma/CPP/7zip/UI/Client7z/Client7z.dsp +235 -0
- package/android/jni/lzma/CPP/7zip/UI/Client7z/Client7z.dsw +29 -0
- package/android/jni/lzma/CPP/7zip/UI/Client7z/StdAfx.cpp +3 -0
- package/android/jni/lzma/CPP/7zip/UI/Client7z/StdAfx.h +8 -0
- package/android/jni/lzma/CPP/7zip/UI/Client7z/makefile +28 -0
- package/android/jni/lzma/CPP/7zip/UI/Client7z/resource.rc +3 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.cpp +1295 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveCommandLine.h +136 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.cpp +1715 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveExtractCallback.h +403 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveName.cpp +155 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveName.h +10 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.cpp +161 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/ArchiveOpenCallback.h +112 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/Bench.cpp +3618 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/Bench.h +77 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/DefaultName.cpp +37 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/DefaultName.h +11 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/DirItem.h +190 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/EnumDirItems.cpp +1096 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/EnumDirItems.h +42 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/ExitCode.h +27 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/Extract.cpp +482 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/Extract.h +94 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/ExtractMode.h +34 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/ExtractingFilePath.cpp +280 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/ExtractingFilePath.h +31 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/HashCalc.cpp +347 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/HashCalc.h +110 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/IFileExtractCallback.h +114 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/LoadCodecs.cpp +1074 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/LoadCodecs.h +424 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/OpenArchive.cpp +3553 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/OpenArchive.h +436 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/PropIDUtils.cpp +668 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/PropIDUtils.h +18 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/Property.h +14 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/SetProperties.cpp +80 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/SetProperties.h +10 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/SortUtils.cpp +25 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/SortUtils.h +10 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/StdAfx.h +8 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/TempFiles.cpp +19 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/TempFiles.h +16 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/Update.cpp +1704 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/Update.h +200 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/UpdateAction.cpp +64 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/UpdateAction.h +66 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/UpdateCallback.cpp +771 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/UpdateCallback.h +162 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/UpdatePair.cpp +233 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/UpdatePair.h +27 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/UpdateProduce.cpp +70 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/UpdateProduce.h +55 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/WorkDir.cpp +94 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/WorkDir.h +26 -0
- package/android/jni/lzma/CPP/7zip/UI/Common/ZipRegistry.h +130 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/BenchCon.cpp +41 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/BenchCon.h +14 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/Console.mak +43 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/Console.manifest +13 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/ConsoleClose.cpp +69 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/ConsoleClose.h +33 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.cpp +825 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/ExtractCallbackConsole.h +164 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/HashCon.cpp +367 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/HashCon.h +48 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/List.cpp +1359 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/List.h +27 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/Main.cpp +1154 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/MainAr.cpp +175 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.cpp +115 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/OpenCallbackConsole.h +66 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/PercentPrinter.cpp +183 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/PercentPrinter.h +62 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/StdAfx.cpp +3 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/StdAfx.h +8 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.cpp +702 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/UpdateCallbackConsole.h +124 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/UserInputUtils.cpp +110 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/UserInputUtils.h +27 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/makefile +64 -0
- package/android/jni/lzma/CPP/7zip/UI/Console/resource.rc +7 -0
- package/android/jni/lzma/CPP/7zip/UI/Explorer/MyMessages.cpp +37 -0
- package/android/jni/lzma/CPP/7zip/UI/Explorer/MyMessages.h +16 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/BrowseDialog.cpp +1025 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/BrowseDialog.h +21 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/BrowseDialogRes.h +9 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ComboDialog.cpp +64 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ComboDialog.h +28 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ComboDialogRes.h +4 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/DialogSize.h +16 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ExtractCallback.cpp +1037 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ExtractCallback.h +328 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/FormatUtils.cpp +28 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/FormatUtils.h +14 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/LangUtils.h +40 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/MyWindowsNew.h +76 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.cpp +122 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.h +69 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.rc +91 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/OverwriteDialogRes.h +17 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialog.cpp +58 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialog.h +28 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialog.rc +14 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/PasswordDialogRes.h +5 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog.cpp +196 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog.h +170 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog.rc +12 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.cpp +1337 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.h +351 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2.rc +40 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2Res.h +48 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialog2a.rc +80 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/ProgressDialogRes.h +3 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/PropertyName.cpp +23 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/PropertyName.h +10 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/PropertyNameRes.h +95 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/SysIconUtils.cpp +255 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/SysIconUtils.h +62 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/resource.h +177 -0
- package/android/jni/lzma/CPP/7zip/UI/FileManager/resourceGui.h +15 -0
- package/android/jni/lzma/CPP/7zip/UI/GUI/Extract.rc +59 -0
- package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialog.cpp +418 -0
- package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialog.h +113 -0
- package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialog.rc +98 -0
- package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractDialogRes.h +24 -0
- package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractGUI.cpp +280 -0
- package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractGUI.h +38 -0
- package/android/jni/lzma/CPP/7zip/UI/GUI/ExtractRes.h +51 -0
- package/android/jni/lzma/CPP/7zip/UI/GUI/HashGUI.h +27 -0
- package/android/jni/lzma/CPP/7zip/UI/GUI/resource2.h +2 -0
- package/android/jni/lzma/CPP/Build.mak +156 -0
- package/android/jni/lzma/CPP/Common/AutoPtr.h +35 -0
- package/android/jni/lzma/CPP/Common/CRC.cpp +7 -0
- package/android/jni/lzma/CPP/Common/C_FileIO.cpp +92 -0
- package/android/jni/lzma/CPP/Common/C_FileIO.h +53 -0
- package/android/jni/lzma/CPP/Common/ComTry.h +21 -0
- package/android/jni/lzma/CPP/Common/CommandLineParser.cpp +197 -0
- package/android/jni/lzma/CPP/Common/CommandLineParser.h +63 -0
- package/android/jni/lzma/CPP/Common/Common.h +43 -0
- package/android/jni/lzma/CPP/Common/CrcReg.cpp +98 -0
- package/android/jni/lzma/CPP/Common/Defs.h +15 -0
- package/android/jni/lzma/CPP/Common/DynamicBuffer.h +64 -0
- package/android/jni/lzma/CPP/Common/IntToString.cpp +193 -0
- package/android/jni/lzma/CPP/Common/IntToString.h +28 -0
- package/android/jni/lzma/CPP/Common/Lang.h +23 -0
- package/android/jni/lzma/CPP/Common/ListFileUtils.cpp +132 -0
- package/android/jni/lzma/CPP/Common/ListFileUtils.h +18 -0
- package/android/jni/lzma/CPP/Common/MyBuffer.h +259 -0
- package/android/jni/lzma/CPP/Common/MyBuffer2.h +100 -0
- package/android/jni/lzma/CPP/Common/MyCom.h +277 -0
- package/android/jni/lzma/CPP/Common/MyException.h +14 -0
- package/android/jni/lzma/CPP/Common/MyGuidDef.h +54 -0
- package/android/jni/lzma/CPP/Common/MyInitGuid.h +45 -0
- package/android/jni/lzma/CPP/Common/MyLinux.h +42 -0
- package/android/jni/lzma/CPP/Common/MyString.cpp +1659 -0
- package/android/jni/lzma/CPP/Common/MyString.h +868 -0
- package/android/jni/lzma/CPP/Common/MyTypes.h +35 -0
- package/android/jni/lzma/CPP/Common/MyUnknown.h +17 -0
- package/android/jni/lzma/CPP/Common/MyVector.cpp +3 -0
- package/android/jni/lzma/CPP/Common/MyVector.h +634 -0
- package/android/jni/lzma/CPP/Common/MyWindows.cpp +145 -0
- package/android/jni/lzma/CPP/Common/MyWindows.h +231 -0
- package/android/jni/lzma/CPP/Common/NewHandler.cpp +163 -0
- package/android/jni/lzma/CPP/Common/NewHandler.h +88 -0
- package/android/jni/lzma/CPP/Common/Sha256Reg.cpp +40 -0
- package/android/jni/lzma/CPP/Common/StdAfx.h +8 -0
- package/android/jni/lzma/CPP/Common/StdInStream.cpp +89 -0
- package/android/jni/lzma/CPP/Common/StdInStream.h +38 -0
- package/android/jni/lzma/CPP/Common/StdOutStream.cpp +163 -0
- package/android/jni/lzma/CPP/Common/StdOutStream.h +71 -0
- package/android/jni/lzma/CPP/Common/StringConvert.cpp +319 -0
- package/android/jni/lzma/CPP/Common/StringConvert.h +88 -0
- package/android/jni/lzma/CPP/Common/StringToInt.cpp +144 -0
- package/android/jni/lzma/CPP/Common/StringToInt.h +21 -0
- package/android/jni/lzma/CPP/Common/TextConfig.cpp +124 -0
- package/android/jni/lzma/CPP/Common/TextConfig.h +19 -0
- package/android/jni/lzma/CPP/Common/UTFConvert.cpp +288 -0
- package/android/jni/lzma/CPP/Common/UTFConvert.h +12 -0
- package/android/jni/lzma/CPP/Common/Wildcard.cpp +676 -0
- package/android/jni/lzma/CPP/Common/Wildcard.h +149 -0
- package/android/jni/lzma/CPP/Common/XzCrc64Init.cpp +7 -0
- package/android/jni/lzma/CPP/Common/XzCrc64Reg.cpp +42 -0
- package/android/jni/lzma/CPP/Windows/COM.h +70 -0
- package/android/jni/lzma/CPP/Windows/CommonDialog.cpp +185 -0
- package/android/jni/lzma/CPP/Windows/CommonDialog.h +23 -0
- package/android/jni/lzma/CPP/Windows/Control/ComboBox.cpp +66 -0
- package/android/jni/lzma/CPP/Windows/Control/ComboBox.h +65 -0
- package/android/jni/lzma/CPP/Windows/Control/CommandBar.h +52 -0
- package/android/jni/lzma/CPP/Windows/Control/Dialog.cpp +251 -0
- package/android/jni/lzma/CPP/Windows/Control/Dialog.h +170 -0
- package/android/jni/lzma/CPP/Windows/Control/Edit.h +19 -0
- package/android/jni/lzma/CPP/Windows/Control/ImageList.cpp +10 -0
- package/android/jni/lzma/CPP/Windows/Control/ImageList.h +87 -0
- package/android/jni/lzma/CPP/Windows/Control/ListView.cpp +155 -0
- package/android/jni/lzma/CPP/Windows/Control/ListView.h +146 -0
- package/android/jni/lzma/CPP/Windows/Control/ProgressBar.h +35 -0
- package/android/jni/lzma/CPP/Windows/Control/PropertyPage.cpp +143 -0
- package/android/jni/lzma/CPP/Windows/Control/PropertyPage.h +50 -0
- package/android/jni/lzma/CPP/Windows/Control/ReBar.h +34 -0
- package/android/jni/lzma/CPP/Windows/Control/Static.h +28 -0
- package/android/jni/lzma/CPP/Windows/Control/StatusBar.h +42 -0
- package/android/jni/lzma/CPP/Windows/Control/StdAfx.h +8 -0
- package/android/jni/lzma/CPP/Windows/Control/ToolBar.h +43 -0
- package/android/jni/lzma/CPP/Windows/Control/Trackbar.h +27 -0
- package/android/jni/lzma/CPP/Windows/Control/Window2.cpp +200 -0
- package/android/jni/lzma/CPP/Windows/Control/Window2.h +51 -0
- package/android/jni/lzma/CPP/Windows/DLL.cpp +109 -0
- package/android/jni/lzma/CPP/Windows/DLL.h +58 -0
- package/android/jni/lzma/CPP/Windows/Defs.h +17 -0
- package/android/jni/lzma/CPP/Windows/ErrorMsg.cpp +66 -0
- package/android/jni/lzma/CPP/Windows/ErrorMsg.h +15 -0
- package/android/jni/lzma/CPP/Windows/FileDir.cpp +714 -0
- package/android/jni/lzma/CPP/Windows/FileDir.h +117 -0
- package/android/jni/lzma/CPP/Windows/FileFind.cpp +749 -0
- package/android/jni/lzma/CPP/Windows/FileFind.h +161 -0
- package/android/jni/lzma/CPP/Windows/FileIO.cpp +432 -0
- package/android/jni/lzma/CPP/Windows/FileIO.h +212 -0
- package/android/jni/lzma/CPP/Windows/FileLink.cpp +440 -0
- package/android/jni/lzma/CPP/Windows/FileMapping.cpp +12 -0
- package/android/jni/lzma/CPP/Windows/FileMapping.h +66 -0
- package/android/jni/lzma/CPP/Windows/FileName.cpp +839 -0
- package/android/jni/lzma/CPP/Windows/FileName.h +115 -0
- package/android/jni/lzma/CPP/Windows/FileSystem.cpp +131 -0
- package/android/jni/lzma/CPP/Windows/FileSystem.h +27 -0
- package/android/jni/lzma/CPP/Windows/Handle.h +37 -0
- package/android/jni/lzma/CPP/Windows/MemoryLock.cpp +112 -0
- package/android/jni/lzma/CPP/Windows/MemoryLock.h +40 -0
- package/android/jni/lzma/CPP/Windows/NtCheck.h +46 -0
- package/android/jni/lzma/CPP/Windows/PropVariant.cpp +347 -0
- package/android/jni/lzma/CPP/Windows/PropVariant.h +114 -0
- package/android/jni/lzma/CPP/Windows/PropVariantConv.cpp +138 -0
- package/android/jni/lzma/CPP/Windows/PropVariantConv.h +37 -0
- package/android/jni/lzma/CPP/Windows/Registry.cpp +390 -0
- package/android/jni/lzma/CPP/Windows/Registry.h +84 -0
- package/android/jni/lzma/CPP/Windows/ResourceString.cpp +103 -0
- package/android/jni/lzma/CPP/Windows/ResourceString.h +16 -0
- package/android/jni/lzma/CPP/Windows/SecurityUtils.cpp +181 -0
- package/android/jni/lzma/CPP/Windows/SecurityUtils.h +167 -0
- package/android/jni/lzma/CPP/Windows/Shell.cpp +358 -0
- package/android/jni/lzma/CPP/Windows/Shell.h +94 -0
- package/android/jni/lzma/CPP/Windows/StdAfx.h +8 -0
- package/android/jni/lzma/CPP/Windows/Synchronization.cpp +10 -0
- package/android/jni/lzma/CPP/Windows/Synchronization.h +164 -0
- package/android/jni/lzma/CPP/Windows/System.cpp +142 -0
- package/android/jni/lzma/CPP/Windows/System.h +40 -0
- package/android/jni/lzma/CPP/Windows/Thread.h +38 -0
- package/android/jni/lzma/CPP/Windows/TimeUtils.cpp +213 -0
- package/android/jni/lzma/CPP/Windows/TimeUtils.h +32 -0
- package/android/jni/lzma/CPP/Windows/Window.cpp +179 -0
- package/android/jni/lzma/CPP/Windows/Window.h +284 -0
- package/android/jni/lzma/CS/7zip/Common/CRC.cs +55 -0
- package/android/jni/lzma/CS/7zip/Common/CommandLineParser.cs +274 -0
- package/android/jni/lzma/CS/7zip/Common/InBuffer.cs +72 -0
- package/android/jni/lzma/CS/7zip/Common/OutBuffer.cs +47 -0
- package/android/jni/lzma/CS/7zip/Compress/LZ/IMatchFinder.cs +24 -0
- package/android/jni/lzma/CS/7zip/Compress/LZ/LzBinTree.cs +367 -0
- package/android/jni/lzma/CS/7zip/Compress/LZ/LzInWindow.cs +132 -0
- package/android/jni/lzma/CS/7zip/Compress/LZ/LzOutWindow.cs +110 -0
- package/android/jni/lzma/CS/7zip/Compress/LZMA/LzmaBase.cs +76 -0
- package/android/jni/lzma/CS/7zip/Compress/LZMA/LzmaDecoder.cs +398 -0
- package/android/jni/lzma/CS/7zip/Compress/LZMA/LzmaEncoder.cs +1480 -0
- package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.cs +364 -0
- package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.csproj +90 -0
- package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaAlone.sln +20 -0
- package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/LzmaBench.cs +340 -0
- package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/Properties/AssemblyInfo.cs +29 -0
- package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/Properties/Resources.cs +70 -0
- package/android/jni/lzma/CS/7zip/Compress/LzmaAlone/Properties/Settings.cs +42 -0
- package/android/jni/lzma/CS/7zip/Compress/RangeCoder/RangeCoder.cs +234 -0
- package/android/jni/lzma/CS/7zip/Compress/RangeCoder/RangeCoderBit.cs +117 -0
- package/android/jni/lzma/CS/7zip/Compress/RangeCoder/RangeCoderBitTree.cs +157 -0
- package/android/jni/lzma/CS/7zip/ICoder.cs +157 -0
- package/android/jni/lzma/DOC/7zC.txt +187 -0
- package/android/jni/lzma/DOC/7zFormat.txt +469 -0
- package/android/jni/lzma/DOC/Methods.txt +173 -0
- package/android/jni/lzma/DOC/installer.txt +166 -0
- package/android/jni/lzma/DOC/lzma-history.txt +446 -0
- package/android/jni/lzma/DOC/lzma-sdk.txt +357 -0
- package/android/jni/lzma/DOC/lzma-specification.txt +1176 -0
- package/android/jni/lzma/DOC/lzma.txt +328 -0
- package/android/jni/lzma/Java/SevenZip/CRC.java +52 -0
- package/android/jni/lzma/Java/SevenZip/Compression/LZ/BinTree.java +382 -0
- package/android/jni/lzma/Java/SevenZip/Compression/LZ/InWindow.java +131 -0
- package/android/jni/lzma/Java/SevenZip/Compression/LZ/OutWindow.java +85 -0
- package/android/jni/lzma/Java/SevenZip/Compression/LZMA/Base.java +88 -0
- package/android/jni/lzma/Java/SevenZip/Compression/LZMA/Decoder.java +329 -0
- package/android/jni/lzma/Java/SevenZip/Compression/LZMA/Encoder.java +1416 -0
- package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeDecoder.java +55 -0
- package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeEncoder.java +99 -0
- package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/Decoder.java +88 -0
- package/android/jni/lzma/Java/SevenZip/Compression/RangeCoder/Encoder.java +151 -0
- package/android/jni/lzma/Java/SevenZip/ICodeProgress.java +6 -0
- package/android/jni/lzma/Java/SevenZip/LzmaAlone.java +253 -0
- package/android/jni/lzma/Java/SevenZip/LzmaBench.java +392 -0
- package/android/jni/lzma/bin/7zS2.sfx +0 -0
- package/android/jni/lzma/bin/7zS2con.sfx +0 -0
- package/android/jni/lzma/bin/7zSD.sfx +0 -0
- package/android/jni/lzma/bin/installer/config.txt +5 -0
- package/android/jni/lzma/bin/installer/cr.bat +5 -0
- package/android/lib/arm64-v8a/librnupdate.so +0 -0
- package/android/lib/armeabi-v7a/librnupdate.so +0 -0
- package/android/lib/x86/librnupdate.so +0 -0
- package/android/lib/x86_64/librnupdate.so +0 -0
- package/android/proguard.pro +83 -0
- package/android/src/main/AndroidManifest.xml +14 -0
- package/android/src/main/AndroidManifestNew.xml +13 -0
- package/android/src/main/java/cn/reactnative/modules/update/ApkInstaller.java +292 -0
- package/android/src/main/java/cn/reactnative/modules/update/ArchiveLimits.java +50 -0
- package/android/src/main/java/cn/reactnative/modules/update/ArchivePatchPlanResult.java +11 -0
- package/android/src/main/java/cn/reactnative/modules/update/BundledResourceCopier.java +394 -0
- package/android/src/main/java/cn/reactnative/modules/update/CleanupKeepNames.java +30 -0
- package/android/src/main/java/cn/reactnative/modules/update/CopyGroupResult.java +11 -0
- package/android/src/main/java/cn/reactnative/modules/update/CrashRescue.java +120 -0
- package/android/src/main/java/cn/reactnative/modules/update/DownloadTask.java +954 -0
- package/android/src/main/java/cn/reactnative/modules/update/DownloadTaskParams.java +64 -0
- package/android/src/main/java/cn/reactnative/modules/update/ErrorCodes.java +32 -0
- package/android/src/main/java/cn/reactnative/modules/update/FileOperationException.java +20 -0
- package/android/src/main/java/cn/reactnative/modules/update/HttpUtils.java +64 -0
- package/android/src/main/java/cn/reactnative/modules/update/InstallRecord.java +156 -0
- package/android/src/main/java/cn/reactnative/modules/update/NativeCheckOrchestrator.java +725 -0
- package/android/src/main/java/cn/reactnative/modules/update/NativeUpdateCore.java +43 -0
- package/android/src/main/java/cn/reactnative/modules/update/NativeUpdateFlow.java +30 -0
- package/android/src/main/java/cn/reactnative/modules/update/PackageInstallerStatusReceiver.java +17 -0
- package/android/src/main/java/cn/reactnative/modules/update/PatchFailedException.java +21 -0
- package/android/src/main/java/cn/reactnative/modules/update/ReactReloadManager.java +274 -0
- package/android/src/main/java/cn/reactnative/modules/update/SafeZipFile.java +187 -0
- package/android/src/main/java/cn/reactnative/modules/update/StateCoreResult.java +22 -0
- package/android/src/main/java/cn/reactnative/modules/update/StateSerialRunner.java +70 -0
- package/android/src/main/java/cn/reactnative/modules/update/UiThreadRunner.java +42 -0
- package/android/src/main/java/cn/reactnative/modules/update/UpdateContext.java +952 -0
- package/android/src/main/java/cn/reactnative/modules/update/UpdateEventEmitter.java +70 -0
- package/android/src/main/java/cn/reactnative/modules/update/UpdateFileUtils.java +110 -0
- package/android/src/main/java/cn/reactnative/modules/update/UpdateModuleImpl.java +403 -0
- package/android/src/main/java/cn/reactnative/modules/update/UpdatePackage.java +51 -0
- package/android/src/main/java/expo/modules/pakta/ExpoPaktaModule.kt +15 -0
- package/android/src/main/java/expo/modules/pakta/ExpoPaktaPackage.java +29 -0
- package/android/src/newarch/cn/reactnative/modules/update/UpdateModule.java +126 -0
- package/android/src/oldarch/cn/reactnative/modules/update/UpdateModule.java +130 -0
- package/cpp/patch_core/archive_limits.h +49 -0
- package/cpp/patch_core/archive_patch_core.cpp +146 -0
- package/cpp/patch_core/archive_patch_core.h +69 -0
- package/cpp/patch_core/digest.cpp +235 -0
- package/cpp/patch_core/digest.h +66 -0
- package/cpp/patch_core/error_codes.h +57 -0
- package/cpp/patch_core/hbc_transform.cpp +152 -0
- package/cpp/patch_core/hbc_transform.h +58 -0
- package/cpp/patch_core/hbc_transform_wire.cpp +332 -0
- package/cpp/patch_core/hbc_transform_wire.h +57 -0
- package/cpp/patch_core/install_record.h +41 -0
- package/cpp/patch_core/jni_util.h +65 -0
- package/cpp/patch_core/patch_core.cpp +849 -0
- package/cpp/patch_core/patch_core.h +103 -0
- package/cpp/patch_core/patch_core_android.cpp +102 -0
- package/cpp/patch_core/state_core.cpp +122 -0
- package/cpp/patch_core/state_core.h +66 -0
- package/cpp/patch_core/state_ops.h +29 -0
- package/cpp/patch_core/update_core_android.cpp +502 -0
- package/cpp/update_flow_core/flow_json.cpp +660 -0
- package/cpp/update_flow_core/flow_json.h +121 -0
- package/cpp/update_flow_core/update_flow_core.cpp +418 -0
- package/cpp/update_flow_core/update_flow_core.h +100 -0
- package/cpp/update_flow_core/update_flow_jni.cpp +157 -0
- package/expo-module.config.json +13 -0
- package/harmony/hvigor-plugin.ts +212 -0
- package/harmony/pakta/src/README.md +74 -0
- package/harmony/pakta/src/main/cpp/CMakeLists.txt +92 -0
- package/harmony/pakta/src/main/cpp/PaktaPackage.h +60 -0
- package/harmony/pakta/src/main/cpp/PaktaTurboModule.cpp +123 -0
- package/harmony/pakta/src/main/cpp/PaktaTurboModule.h +43 -0
- package/harmony/pakta/src/main/cpp/pakta.cpp +1243 -0
- package/harmony/pakta/src/main/ets/ArchiveLimits.ts +144 -0
- package/harmony/pakta/src/main/ets/DownloadTask.ts +1375 -0
- package/harmony/pakta/src/main/ets/DownloadTaskParams.ts +27 -0
- package/harmony/pakta/src/main/ets/ErrorCodes.ts +80 -0
- package/harmony/pakta/src/main/ets/EventHub.ts +46 -0
- package/harmony/pakta/src/main/ets/InstallRecord.ts +192 -0
- package/harmony/pakta/src/main/ets/Logger.ts +83 -0
- package/harmony/pakta/src/main/ets/MonotonicClock.ts +18 -0
- package/harmony/pakta/src/main/ets/NativeCheckOrchestrator.ts +640 -0
- package/harmony/pakta/src/main/ets/NativePatchCore.ts +123 -0
- package/harmony/pakta/src/main/ets/PaktaFileJSBundleProvider.ets +54 -0
- package/harmony/pakta/src/main/ets/PaktaPackage.ets +15 -0
- package/harmony/pakta/src/main/ets/PaktaPackageCompat.ts +15 -0
- package/harmony/pakta/src/main/ets/PaktaPackageFactory.ts +19 -0
- package/harmony/pakta/src/main/ets/PaktaTurboModule.ts +433 -0
- package/harmony/pakta/src/main/ets/PathUtils.ts +32 -0
- package/harmony/pakta/src/main/ets/SaveFile.ts +39 -0
- package/harmony/pakta/src/main/ets/UpdateContext.ts +1059 -0
- package/harmony/pakta/src/main/module.json5 +14 -0
- package/harmony/pakta/src/main/resources/base/element/string.json +8 -0
- package/harmony/pakta/src/main/resources/en_US/element/string.json +8 -0
- package/harmony/pakta/src/main/resources/zh_CN/element/string.json +8 -0
- package/harmony/pakta.har +0 -0
- package/ios/Expo/ExpoPaktaModule.swift +12 -0
- package/ios/Expo/ExpoPaktaReactDelegateHandler.swift +25 -0
- package/ios/ImportReact.h +7 -0
- package/ios/PrivacyInfo.xcprivacy +84 -0
- package/ios/RCTPakta/RCTPakta.h +14 -0
- package/ios/RCTPakta/RCTPakta.mm +2775 -0
- package/ios/RCTPakta/RCTPaktaDownloader.h +29 -0
- package/ios/RCTPakta/RCTPaktaDownloader.mm +625 -0
- package/ios/pakta_build_time.txt +1 -0
- package/package.json +88 -0
- package/react-native.config.js +6 -0
- package/rn-update.podspec +221 -0
- package/src/NativePakta.ts +85 -0
- package/src/client.ts +1839 -0
- package/src/context.ts +102 -0
- package/src/core.ts +190 -0
- package/src/endpoint.ts +204 -0
- package/src/error.ts +168 -0
- package/src/errorReporting.ts +141 -0
- package/src/globals.d.ts +6 -0
- package/src/i18n.ts +113 -0
- package/src/index.ts +46 -0
- package/src/locales/en.ts +77 -0
- package/src/locales/zh.ts +71 -0
- package/src/metadata.ts +175 -0
- package/src/provider.tsx +629 -0
- package/src/telemetry.ts +104 -0
- package/src/type.ts +243 -0
- package/src/updateFlowCore.ts +428 -0
- 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
|
+
}
|