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,952 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* [INPUT]: 依赖 Android Context/SharedPreferences/包信息、DownloadTask 单线程队列、patch_core 状态机 JNI 与原生检查编排器
|
|
3
|
+
* [OUTPUT]: 对外提供 UpdateContext 单例、下载/切包、按启动版本身份确认成功、回滚/重置、bundle URL/hash、KV 与提交代际能力
|
|
4
|
+
* [POS]: Android 更新聚合上下文和持久状态权威,协调磁盘事务、启动选择与救砖提交,桥层只通过它发起用例
|
|
5
|
+
*/
|
|
6
|
+
package cn.reactnative.modules.update;
|
|
7
|
+
|
|
8
|
+
import android.content.Context;
|
|
9
|
+
import android.content.SharedPreferences;
|
|
10
|
+
import android.content.pm.PackageInfo;
|
|
11
|
+
import android.content.pm.PackageManager;
|
|
12
|
+
import android.util.Log;
|
|
13
|
+
import androidx.annotation.Nullable;
|
|
14
|
+
import com.facebook.react.ReactInstanceManager;
|
|
15
|
+
import java.io.File;
|
|
16
|
+
import org.json.JSONObject;
|
|
17
|
+
import java.io.IOException;
|
|
18
|
+
import java.io.InputStream;
|
|
19
|
+
import java.security.MessageDigest;
|
|
20
|
+
import java.security.NoSuchAlgorithmException;
|
|
21
|
+
import java.util.concurrent.Executor;
|
|
22
|
+
import java.util.concurrent.Executors;
|
|
23
|
+
import java.util.concurrent.ThreadFactory;
|
|
24
|
+
|
|
25
|
+
public class UpdateContext {
|
|
26
|
+
static {
|
|
27
|
+
NativeUpdateCore.ensureLoaded();
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
static final String TAG = "react-native-update";
|
|
31
|
+
static final boolean DEBUG = BuildConfig.DEBUG;
|
|
32
|
+
|
|
33
|
+
private final Context context;
|
|
34
|
+
private final File rootDir;
|
|
35
|
+
private final Executor executor;
|
|
36
|
+
private final SharedPreferences sp;
|
|
37
|
+
// Our own PackageInfo, looked up once: every getPackageInfo call is a
|
|
38
|
+
// Binder IPC, and the constructor, the bundle-hash cache and the native
|
|
39
|
+
// check all need the version name / install time.
|
|
40
|
+
@Nullable
|
|
41
|
+
private final PackageInfo packageInfo;
|
|
42
|
+
|
|
43
|
+
// Written under sLock (setCustomInstanceManager), read on the restart
|
|
44
|
+
// path without it.
|
|
45
|
+
private volatile ReactInstanceManager reactInstanceManager;
|
|
46
|
+
// Written on the launch path, read from executor/JS threads.
|
|
47
|
+
private volatile boolean isUsingBundleUrl;
|
|
48
|
+
private volatile boolean ignoreRollback;
|
|
49
|
+
// The version whose bundle this process actually loaded (resolved in
|
|
50
|
+
// getBundleUrl). resetToPackagedBundle must not delete its directory:
|
|
51
|
+
// update assets (images/fonts) are read from it on demand at runtime, so
|
|
52
|
+
// wiping it under a silent (no-restart) reset would break every image the
|
|
53
|
+
// running app has not loaded yet. Volatile: written during launch, read
|
|
54
|
+
// from the state serial and download executors.
|
|
55
|
+
private volatile String launchVersion;
|
|
56
|
+
private static final int STATE_OP_SWITCH_VERSION = 1;
|
|
57
|
+
private static final int STATE_OP_MARK_SUCCESS = 2;
|
|
58
|
+
private static final int STATE_OP_ROLLBACK = 3;
|
|
59
|
+
// 4 (clear first time) exists in the state core but has no Android caller.
|
|
60
|
+
private static final int STATE_OP_CLEAR_ROLLBACK_MARK = 5;
|
|
61
|
+
private static final int STATE_OP_RESOLVE_LAUNCH = 6;
|
|
62
|
+
private static final String KEY_FIRST_LOAD_MARKED = "firstLoadMarked";
|
|
63
|
+
private static final String KEY_BINARY_CHANNEL = "binaryChannel";
|
|
64
|
+
static final String VERSION_COMPLETE_FILE = InstallRecord.FILE_NAME;
|
|
65
|
+
// Bumped by resetToPackagedBundle. The cold-start check runs for minutes
|
|
66
|
+
// and may already hold a decision when the app resets to the packaged
|
|
67
|
+
// bundle; the orchestrator samples this counter and abandons activation
|
|
68
|
+
// (and its response cache) when the value moved, so an in-flight rescue
|
|
69
|
+
// can never resurrect the version the app just reset away from.
|
|
70
|
+
private static final java.util.concurrent.atomic.AtomicLong resetGeneration =
|
|
71
|
+
new java.util.concurrent.atomic.AtomicLong(0);
|
|
72
|
+
// The one mutex for every snapshot -> state core -> commit sequence
|
|
73
|
+
// (switchVersion, markSuccess, the launch resolution and its rollback,
|
|
74
|
+
// the launch markers, the cold-start round's commit,
|
|
75
|
+
// resetToPackagedBundle). They are read-modify-write cycles on the same
|
|
76
|
+
// SharedPreferences from different threads (state serial executor,
|
|
77
|
+
// native check thread, JS thread); without a common lock a commit built
|
|
78
|
+
// on an older snapshot silently undoes an earlier one — e.g. a JS
|
|
79
|
+
// markSuccess erasing the activation a crash-rescue round just committed
|
|
80
|
+
// (CODE_AUDIT 2.1). Intrinsic locks are reentrant, so nested takers such
|
|
81
|
+
// as getBundleUrl -> rollBack are fine. Nothing slow runs inside it: the
|
|
82
|
+
// bundle digest of a switch is verified before the lock is taken.
|
|
83
|
+
private static final Object commitLock = new Object();
|
|
84
|
+
// Cleanup and activation share this lock from directory verification through
|
|
85
|
+
// deletion/state commit. Slow filesystem work still stays outside commitLock.
|
|
86
|
+
private static final Object versionFilesLock = new Object();
|
|
87
|
+
|
|
88
|
+
// Singleton instance
|
|
89
|
+
private static volatile UpdateContext sInstance;
|
|
90
|
+
private static final Object sLock = new Object();
|
|
91
|
+
private static ReactInstanceManager pendingReactInstanceManager;
|
|
92
|
+
|
|
93
|
+
private static native StateCoreResult syncStateWithBinaryVersion(
|
|
94
|
+
String packageVersion,
|
|
95
|
+
String buildTime,
|
|
96
|
+
StateCoreResult state
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
private static native StateCoreResult runStateCore(
|
|
100
|
+
int operation,
|
|
101
|
+
StateCoreResult state,
|
|
102
|
+
String stringArg,
|
|
103
|
+
boolean flagA,
|
|
104
|
+
boolean flagB
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
private UpdateContext(Context context) {
|
|
108
|
+
this.context = context.getApplicationContext();
|
|
109
|
+
this.executor = Executors.newSingleThreadExecutor(new ThreadFactory() {
|
|
110
|
+
@Override
|
|
111
|
+
public Thread newThread(Runnable r) {
|
|
112
|
+
return new Thread(r, "pakta-download");
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
this.rootDir = new File(this.context.getFilesDir(), "_update");
|
|
117
|
+
|
|
118
|
+
if (!rootDir.exists() && !rootDir.mkdirs() && !rootDir.exists()) {
|
|
119
|
+
throw new IllegalStateException("Failed to create update root dir: " + rootDir);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
this.sp = this.context.getSharedPreferences("update", Context.MODE_PRIVATE);
|
|
123
|
+
this.packageInfo = lookupPackageInfo(this.context);
|
|
124
|
+
this.reactInstanceManager = pendingReactInstanceManager;
|
|
125
|
+
|
|
126
|
+
String packageVersion = getPackageVersion();
|
|
127
|
+
String buildTime = getBuildTime();
|
|
128
|
+
String channel = getChannel();
|
|
129
|
+
String previousChannel = sp.getString(KEY_BINARY_CHANNEL, null);
|
|
130
|
+
boolean channelChanged = previousChannel != null && !previousChannel.equals(channel);
|
|
131
|
+
StateCoreResult nextState = syncStateWithBinaryVersion(
|
|
132
|
+
packageVersion,
|
|
133
|
+
buildTime,
|
|
134
|
+
getStateSnapshot()
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
if (channelChanged) {
|
|
138
|
+
// 渠道是安装包身份的一部分。覆盖安装另一渠道时,只撤销热更
|
|
139
|
+
// 状态与响应缓存,保留 uuid/nativeConfig 等跨渠道安装级数据。
|
|
140
|
+
resetGeneration.incrementAndGet();
|
|
141
|
+
nextState = new StateCoreResult();
|
|
142
|
+
nextState.packageVersion = packageVersion;
|
|
143
|
+
nextState.buildTime = buildTime;
|
|
144
|
+
nextState.firstTime = false;
|
|
145
|
+
nextState.firstTimeOk = true;
|
|
146
|
+
nextState.changed = true;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
if (nextState.changed || channelChanged) {
|
|
150
|
+
// Execute cleanUp before clearing SharedPreferences to avoid race condition
|
|
151
|
+
this.cleanUp();
|
|
152
|
+
SharedPreferences.Editor editor = this.sp.edit();
|
|
153
|
+
if (channelChanged) {
|
|
154
|
+
for (String key : sp.getAll().keySet()) {
|
|
155
|
+
if (key.startsWith("hash_")) {
|
|
156
|
+
editor.remove(key);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
editor.remove(NativeCheckOrchestrator.KEY_RESP_CACHE);
|
|
160
|
+
} else {
|
|
161
|
+
editor.clear();
|
|
162
|
+
}
|
|
163
|
+
applyState(editor, nextState);
|
|
164
|
+
editor.putString(KEY_BINARY_CHANNEL, channel);
|
|
165
|
+
persistEditor(editor, "sync state with binary version");
|
|
166
|
+
} else if (previousChannel == null) {
|
|
167
|
+
sp.edit().putString(KEY_BINARY_CHANNEL, channel).apply();
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
public String getRootDir() {
|
|
172
|
+
return rootDir.toString();
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
@Nullable
|
|
176
|
+
private static PackageInfo lookupPackageInfo(Context context) {
|
|
177
|
+
try {
|
|
178
|
+
return context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
|
|
179
|
+
} catch (PackageManager.NameNotFoundException e) {
|
|
180
|
+
// Our own package is always installed; a failure here is a
|
|
181
|
+
// platform bug worth a log line, not a crash on the launch path.
|
|
182
|
+
Log.e(TAG, "Unable to read own package info", e);
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
public String getPackageVersion() {
|
|
188
|
+
return packageInfo == null ? null : packageInfo.versionName;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
public String getBuildTime() {
|
|
192
|
+
return context.getString(R.string.pakta_build_time);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/** Reads the immutable distribution channel from the host manifest. */
|
|
196
|
+
public String getChannel() {
|
|
197
|
+
try {
|
|
198
|
+
android.content.pm.ApplicationInfo info = context.getPackageManager()
|
|
199
|
+
.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
|
|
200
|
+
if (info.metaData != null) {
|
|
201
|
+
String value = info.metaData.getString("channel");
|
|
202
|
+
if (value != null && !value.trim().isEmpty()) {
|
|
203
|
+
return value.trim();
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
} catch (PackageManager.NameNotFoundException ignored) {
|
|
207
|
+
Log.w(TAG, "Unable to read channel from host manifest");
|
|
208
|
+
}
|
|
209
|
+
return "default";
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
public boolean getIsUsingBundleUrl() {
|
|
213
|
+
return isUsingBundleUrl;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// bundleHash cache: "<packageVersion>|<lastUpdateTime>|<sha256hex>". The
|
|
217
|
+
// key identifies the installed binary; every (re)install changes
|
|
218
|
+
// lastUpdateTime, so the hash is recomputed once per install.
|
|
219
|
+
private static final String KEY_BUNDLE_HASH_CACHE = "bundleHashCache";
|
|
220
|
+
|
|
221
|
+
public interface BundleHashListener {
|
|
222
|
+
void onBundleHash(String hash);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* bundleHash = sha256 of the JS bundle embedded in the binary — the
|
|
227
|
+
* identity of the binary itself, not of whatever hot update is currently
|
|
228
|
+
* running. Hashes exactly the bytes pdiff patches from: the hardcoded
|
|
229
|
+
* "index.android.bundle" asset read via AssetManager, same as
|
|
230
|
+
* DownloadTask.copyBundledAssetToFile. Runs on the download executor;
|
|
231
|
+
* never fails — an empty string means "unknown" and the server falls back
|
|
232
|
+
* to the buildTime heuristic.
|
|
233
|
+
*
|
|
234
|
+
* Deliberately java.security.MessageDigest instead of the C++
|
|
235
|
+
* pakta::digest: librnupdate.so is a prebuilt artifact and this must not
|
|
236
|
+
* force a rebuild. The NIST vectors in the patch_core tests anchor both
|
|
237
|
+
* implementations to the same standard.
|
|
238
|
+
*/
|
|
239
|
+
public void getBundleHash(final BundleHashListener listener) {
|
|
240
|
+
if (DEBUG) {
|
|
241
|
+
// Metro serves the bundle in debug; mirror the dev buildTime behaviour.
|
|
242
|
+
listener.onBundleHash("");
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
executor.execute(new Runnable() {
|
|
246
|
+
@Override
|
|
247
|
+
public void run() {
|
|
248
|
+
listener.onBundleHash(computeBundleHash());
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// Package-private: also the native cold-start check's request input
|
|
254
|
+
// (NativeCheckOrchestrator). Blocking — call off the main thread.
|
|
255
|
+
String computeBundleHash() {
|
|
256
|
+
String cachePrefix = getPackageVersion() + "|" + getPackageLastUpdateTime() + "|";
|
|
257
|
+
String cached = sp.getString(KEY_BUNDLE_HASH_CACHE, null);
|
|
258
|
+
if (cached != null && cached.startsWith(cachePrefix)) {
|
|
259
|
+
return cached.substring(cachePrefix.length());
|
|
260
|
+
}
|
|
261
|
+
String hash = sha256OfBundledAsset("index.android.bundle");
|
|
262
|
+
if (!hash.isEmpty()) {
|
|
263
|
+
SharedPreferences.Editor editor = sp.edit();
|
|
264
|
+
editor.putString(KEY_BUNDLE_HASH_CACHE, cachePrefix + hash);
|
|
265
|
+
persistEditor(editor, "cache bundle hash");
|
|
266
|
+
}
|
|
267
|
+
return hash;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
private long getPackageLastUpdateTime() {
|
|
271
|
+
return packageInfo == null ? 0 : packageInfo.lastUpdateTime;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
private String sha256OfBundledAsset(String assetName) {
|
|
275
|
+
try (InputStream in = context.getAssets().open(assetName)) {
|
|
276
|
+
MessageDigest md = MessageDigest.getInstance("SHA-256");
|
|
277
|
+
byte[] buffer = new byte[64 * 1024];
|
|
278
|
+
int read;
|
|
279
|
+
while ((read = in.read(buffer)) != -1) {
|
|
280
|
+
md.update(buffer, 0, read);
|
|
281
|
+
}
|
|
282
|
+
byte[] digest = md.digest();
|
|
283
|
+
StringBuilder hex = new StringBuilder(digest.length * 2);
|
|
284
|
+
for (byte b : digest) {
|
|
285
|
+
hex.append(Character.forDigit((b >> 4) & 0xf, 16));
|
|
286
|
+
hex.append(Character.forDigit(b & 0xf, 16));
|
|
287
|
+
}
|
|
288
|
+
return hex.toString();
|
|
289
|
+
} catch (IOException | NoSuchAlgorithmException e) {
|
|
290
|
+
// Expected when there is no embedded bundle (custom name, no
|
|
291
|
+
// release bundle); "unknown" is a valid answer, not an error.
|
|
292
|
+
Log.i(TAG, "Cannot hash bundled asset " + assetName + ": " + e);
|
|
293
|
+
return "";
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
private void enqueue(DownloadTaskParams params) {
|
|
298
|
+
executor.execute(new DownloadTask(context, params));
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
private static boolean rejectUnsafeComponent(String name, DownloadFileListener listener) {
|
|
302
|
+
if (UpdateFileUtils.isSafePathComponent(name)) {
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
listener.onDownloadFailed(new IllegalArgumentException("Invalid path component: " + name));
|
|
306
|
+
return true;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
public interface DownloadFileListener {
|
|
310
|
+
void onDownloadCompleted(DownloadTaskParams params);
|
|
311
|
+
void onDownloadFailed(Throwable error);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
public void downloadFullUpdate(String url, String hash, DownloadFileListener listener) {
|
|
315
|
+
downloadFullUpdate(url, hash, listener, 0);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* The deadline-taking overloads (native cold-start check) return the
|
|
320
|
+
* queued task's params so the orchestrator can cancel the task when its
|
|
321
|
+
* phase budget expires (CODE_AUDIT 2.12); null when the request was
|
|
322
|
+
* rejected up front (the listener has already been told).
|
|
323
|
+
*/
|
|
324
|
+
@Nullable
|
|
325
|
+
DownloadTaskParams downloadFullUpdate(
|
|
326
|
+
String url, String hash, DownloadFileListener listener, long deadlineNanos
|
|
327
|
+
) {
|
|
328
|
+
if (rejectUnsafeComponent(hash, listener)) {
|
|
329
|
+
return null;
|
|
330
|
+
}
|
|
331
|
+
DownloadTaskParams params = new DownloadTaskParams();
|
|
332
|
+
params.type = DownloadTaskParams.TASK_TYPE_PATCH_FULL;
|
|
333
|
+
params.url = url;
|
|
334
|
+
params.hash = hash;
|
|
335
|
+
params.listener = listener;
|
|
336
|
+
params.deadlineNanos = deadlineNanos;
|
|
337
|
+
params.targetFile = new File(rootDir, hash + ".ppk");
|
|
338
|
+
params.unzipDirectory = new File(rootDir, hash);
|
|
339
|
+
enqueue(params);
|
|
340
|
+
return params;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
public void downloadFile(String url, String hash, String fileName, DownloadFileListener listener) {
|
|
344
|
+
if (rejectUnsafeComponent(fileName, listener)) {
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
DownloadTaskParams params = new DownloadTaskParams();
|
|
348
|
+
params.type = DownloadTaskParams.TASK_TYPE_PLAIN_DOWNLOAD;
|
|
349
|
+
params.url = url;
|
|
350
|
+
params.hash = hash;
|
|
351
|
+
params.listener = listener;
|
|
352
|
+
|
|
353
|
+
params.targetFile = new File(rootDir, fileName);
|
|
354
|
+
// params.unzipDirectory = new File(rootDir, hash);
|
|
355
|
+
enqueue(params);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
public void downloadPatchFromApk(String url, String hash, DownloadFileListener listener) {
|
|
359
|
+
downloadPatchFromApk(url, hash, listener, 0);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
@Nullable
|
|
363
|
+
DownloadTaskParams downloadPatchFromApk(
|
|
364
|
+
String url, String hash, DownloadFileListener listener, long deadlineNanos
|
|
365
|
+
) {
|
|
366
|
+
if (rejectUnsafeComponent(hash, listener)) {
|
|
367
|
+
return null;
|
|
368
|
+
}
|
|
369
|
+
DownloadTaskParams params = new DownloadTaskParams();
|
|
370
|
+
params.type = DownloadTaskParams.TASK_TYPE_PATCH_FROM_APK;
|
|
371
|
+
params.url = url;
|
|
372
|
+
params.hash = hash;
|
|
373
|
+
params.listener = listener;
|
|
374
|
+
params.deadlineNanos = deadlineNanos;
|
|
375
|
+
params.targetFile = new File(rootDir, hash + ".apk.patch");
|
|
376
|
+
params.unzipDirectory = new File(rootDir, hash);
|
|
377
|
+
enqueue(params);
|
|
378
|
+
return params;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
public void downloadPatchFromPpk(String url, String hash, String originHash, DownloadFileListener listener) {
|
|
382
|
+
downloadPatchFromPpk(url, hash, originHash, listener, 0);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
@Nullable
|
|
386
|
+
DownloadTaskParams downloadPatchFromPpk(
|
|
387
|
+
String url,
|
|
388
|
+
String hash,
|
|
389
|
+
String originHash,
|
|
390
|
+
DownloadFileListener listener,
|
|
391
|
+
long deadlineNanos
|
|
392
|
+
) {
|
|
393
|
+
if (rejectUnsafeComponent(hash, listener) || rejectUnsafeComponent(originHash, listener)) {
|
|
394
|
+
return null;
|
|
395
|
+
}
|
|
396
|
+
DownloadTaskParams params = new DownloadTaskParams();
|
|
397
|
+
params.type = DownloadTaskParams.TASK_TYPE_PATCH_FROM_PPK;
|
|
398
|
+
params.url = url;
|
|
399
|
+
params.hash = hash;
|
|
400
|
+
params.originHash = originHash;
|
|
401
|
+
params.listener = listener;
|
|
402
|
+
params.deadlineNanos = deadlineNanos;
|
|
403
|
+
params.targetFile = new File(rootDir, originHash + "-" + hash + ".ppk.patch");
|
|
404
|
+
params.unzipDirectory = new File(rootDir, hash);
|
|
405
|
+
params.originDirectory = new File(rootDir, originHash);
|
|
406
|
+
enqueue(params);
|
|
407
|
+
return params;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
private StateCoreResult getStateSnapshot() {
|
|
411
|
+
StateCoreResult state = new StateCoreResult();
|
|
412
|
+
state.packageVersion = sp.getString("packageVersion", null);
|
|
413
|
+
state.buildTime = sp.getString("buildTime", null);
|
|
414
|
+
state.currentVersion = sp.getString("currentVersion", null);
|
|
415
|
+
state.lastVersion = sp.getString("lastVersion", null);
|
|
416
|
+
state.firstTime = sp.getBoolean("firstTime", false);
|
|
417
|
+
state.firstTimeOk = sp.getBoolean("firstTimeOk", true);
|
|
418
|
+
state.rolledBackVersion = sp.getString("rolledBackVersion", null);
|
|
419
|
+
return state;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
private static void putNullableString(
|
|
423
|
+
SharedPreferences.Editor editor,
|
|
424
|
+
String key,
|
|
425
|
+
String value
|
|
426
|
+
) {
|
|
427
|
+
if (value == null) {
|
|
428
|
+
editor.remove(key);
|
|
429
|
+
} else {
|
|
430
|
+
editor.putString(key, value);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
private void applyState(SharedPreferences.Editor editor, StateCoreResult state) {
|
|
435
|
+
putNullableString(editor, "packageVersion", state.packageVersion);
|
|
436
|
+
putNullableString(editor, "buildTime", state.buildTime);
|
|
437
|
+
putNullableString(editor, "currentVersion", state.currentVersion);
|
|
438
|
+
putNullableString(editor, "lastVersion", state.lastVersion);
|
|
439
|
+
editor.putBoolean("firstTime", state.firstTime);
|
|
440
|
+
editor.putBoolean("firstTimeOk", state.firstTimeOk);
|
|
441
|
+
putNullableString(editor, "rolledBackVersion", state.rolledBackVersion);
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/**
|
|
445
|
+
* Best-effort persistence for launch-path bookkeeping (binary-version
|
|
446
|
+
* sync, first-load markers, rollback resolution): a failure is logged but
|
|
447
|
+
* must not take the app down while it is resolving which bundle to run.
|
|
448
|
+
*/
|
|
449
|
+
private boolean persistEditor(SharedPreferences.Editor editor, String reason) {
|
|
450
|
+
// A lost state write can mean a missed rollback or a version switch
|
|
451
|
+
// that silently never happens, so this must be visible in release too.
|
|
452
|
+
if (!editor.commit()) {
|
|
453
|
+
Log.e(TAG, "Failed to persist update state for " + reason);
|
|
454
|
+
return false;
|
|
455
|
+
}
|
|
456
|
+
return true;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
/**
|
|
460
|
+
* Persistence for operations whose result is promised to a caller
|
|
461
|
+
* (switchVersion / markSuccess / setLocalHashInfo / the cold-start round):
|
|
462
|
+
* a commit that did not reach disk is a failed operation, never a
|
|
463
|
+
* resolved promise whose effect silently evaporates on the next launch.
|
|
464
|
+
*/
|
|
465
|
+
private void persistEditorOrThrow(SharedPreferences.Editor editor, String reason) {
|
|
466
|
+
if (!persistEditor(editor, reason)) {
|
|
467
|
+
throw new IllegalStateException("Failed to persist update state for " + reason);
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
/**
|
|
472
|
+
* Validates that {@code hash} is a switchable version: the slow half of
|
|
473
|
+
* a switch (file checks and the bundle digest of a multi-MB bundle),
|
|
474
|
+
* deliberately run without commitLock. The state snapshot read here only
|
|
475
|
+
* decides whether a markerless directory is grandfathered; a concurrent
|
|
476
|
+
* commit cannot make an unverified directory pass.
|
|
477
|
+
*/
|
|
478
|
+
private void verifySwitchTarget(String hash) {
|
|
479
|
+
if (!UpdateFileUtils.isSafePathComponent(hash)) {
|
|
480
|
+
throw new IllegalArgumentException("Invalid hash: " + hash);
|
|
481
|
+
}
|
|
482
|
+
File versionDir = new File(rootDir, hash);
|
|
483
|
+
File bundleFile = new File(versionDir, "index.bundlejs");
|
|
484
|
+
if (!bundleFile.isFile()) {
|
|
485
|
+
throw new IllegalStateException("Bundle version " + hash + " not found.");
|
|
486
|
+
}
|
|
487
|
+
StateCoreResult currentState = getStateSnapshot();
|
|
488
|
+
boolean isLegacyActivatedVersion = hash.equals(currentState.currentVersion)
|
|
489
|
+
|| hash.equals(currentState.lastVersion);
|
|
490
|
+
if (isLegacyActivatedVersion) {
|
|
491
|
+
// Versions activated before completion markers were introduced are
|
|
492
|
+
// explicitly grandfathered through current/last state.
|
|
493
|
+
return;
|
|
494
|
+
}
|
|
495
|
+
if (!InstallRecord.isComplete(versionDir, hash)) {
|
|
496
|
+
// An arbitrary markerless directory may be a crash-left partial
|
|
497
|
+
// install.
|
|
498
|
+
throw new IllegalStateException("Bundle version " + hash + " is incomplete.");
|
|
499
|
+
}
|
|
500
|
+
// The record's bundle digest must match the bytes on disk before
|
|
501
|
+
// the next launch is pointed at them.
|
|
502
|
+
try {
|
|
503
|
+
InstallRecord.verifyForActivation(versionDir, hash, bundleFile);
|
|
504
|
+
} catch (IOException e) {
|
|
505
|
+
throw new IllegalStateException(e.getMessage(), e);
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
/**
|
|
510
|
+
* The fast half of a switch: snapshot -> state core, without persisting,
|
|
511
|
+
* so callers can fold it into a larger single-commit transaction. Caller
|
|
512
|
+
* holds commitLock and has run verifySwitchTarget.
|
|
513
|
+
*/
|
|
514
|
+
private StateCoreResult computeSwitchState(String hash) {
|
|
515
|
+
return runStateCore(
|
|
516
|
+
STATE_OP_SWITCH_VERSION,
|
|
517
|
+
getStateSnapshot(),
|
|
518
|
+
hash,
|
|
519
|
+
false,
|
|
520
|
+
false
|
|
521
|
+
);
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
public void switchVersion(String hash) {
|
|
525
|
+
synchronized (versionFilesLock) {
|
|
526
|
+
verifySwitchTarget(hash);
|
|
527
|
+
synchronized (commitLock) {
|
|
528
|
+
StateCoreResult nextState = computeSwitchState(hash);
|
|
529
|
+
SharedPreferences.Editor editor = sp.edit();
|
|
530
|
+
applyState(editor, nextState);
|
|
531
|
+
persistEditorOrThrow(editor, "switch version");
|
|
532
|
+
ignoreRollback = false;
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
public void setKv(String key, String value) {
|
|
538
|
+
SharedPreferences.Editor editor = sp.edit();
|
|
539
|
+
editor.putString(key, value);
|
|
540
|
+
persistEditorOrThrow(editor, "set key " + key);
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
public String getKv(String key) {
|
|
544
|
+
return sp.getString(key, null);
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
void removeKv(String key) {
|
|
548
|
+
SharedPreferences.Editor editor = sp.edit();
|
|
549
|
+
editor.remove(key);
|
|
550
|
+
persistEditorOrThrow(editor, "remove key " + key);
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
public String getCurrentVersion() {
|
|
554
|
+
return sp.getString("currentVersion", null);
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
/** The one-shot launch markers getConstants reports, consumed together. */
|
|
558
|
+
static final class LaunchMarkers {
|
|
559
|
+
final boolean isFirstTime;
|
|
560
|
+
@Nullable
|
|
561
|
+
final String rolledBackVersion;
|
|
562
|
+
|
|
563
|
+
LaunchMarkers(boolean isFirstTime, @Nullable String rolledBackVersion) {
|
|
564
|
+
this.isFirstTime = isFirstTime;
|
|
565
|
+
this.rolledBackVersion = rolledBackVersion;
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
/**
|
|
570
|
+
* Reads and clears the first-load marker and the rollback mark in one
|
|
571
|
+
* commit. getConstants runs this synchronously on the JS thread (a
|
|
572
|
+
* TurboModule constant read), so the two writes are folded into a single
|
|
573
|
+
* editor; persistence is best-effort on this launch path.
|
|
574
|
+
*/
|
|
575
|
+
LaunchMarkers consumeLaunchMarkers() {
|
|
576
|
+
LaunchMarkers markers;
|
|
577
|
+
synchronized (commitLock) {
|
|
578
|
+
boolean isFirstLoadMarked = sp.getBoolean(KEY_FIRST_LOAD_MARKED, false);
|
|
579
|
+
String rolledBackVersion = rolledBackVersion();
|
|
580
|
+
markers = new LaunchMarkers(isFirstLoadMarked, rolledBackVersion);
|
|
581
|
+
if (isFirstLoadMarked || rolledBackVersion != null) {
|
|
582
|
+
SharedPreferences.Editor editor = sp.edit();
|
|
583
|
+
if (isFirstLoadMarked) {
|
|
584
|
+
editor.remove(KEY_FIRST_LOAD_MARKED);
|
|
585
|
+
}
|
|
586
|
+
if (rolledBackVersion != null) {
|
|
587
|
+
StateCoreResult nextState = runStateCore(
|
|
588
|
+
STATE_OP_CLEAR_ROLLBACK_MARK,
|
|
589
|
+
getStateSnapshot(),
|
|
590
|
+
null,
|
|
591
|
+
false,
|
|
592
|
+
false
|
|
593
|
+
);
|
|
594
|
+
applyState(editor, nextState);
|
|
595
|
+
}
|
|
596
|
+
persistEditor(editor, "consume launch markers");
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
if (markers.rolledBackVersion != null) {
|
|
600
|
+
// The rolled-back version's directory is now eligible for cleanup.
|
|
601
|
+
this.cleanUp();
|
|
602
|
+
}
|
|
603
|
+
return markers;
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
public String rolledBackVersion() {
|
|
607
|
+
return sp.getString("rolledBackVersion", null);
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
public boolean markSuccess(String expectedHash) {
|
|
611
|
+
if (BuildConfig.DEBUG) {
|
|
612
|
+
return true;
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
synchronized (commitLock) {
|
|
616
|
+
StateCoreResult currentState = getStateSnapshot();
|
|
617
|
+
// expectedHash 还必须是本进程实际解析并加载的 bundle 版本。
|
|
618
|
+
// 仅比较持久化 currentVersion 会把冷启动检查在 JS 初始化前切换的版本误报成功。
|
|
619
|
+
if (expectedHash == null || launchVersion == null || !expectedHash.equals(launchVersion)) {
|
|
620
|
+
Log.w(TAG, "markSuccess rejected before state core: expected=" + expectedHash
|
|
621
|
+
+ ", launch=" + launchVersion
|
|
622
|
+
+ ", current=" + currentState.currentVersion
|
|
623
|
+
+ ", firstTime=" + currentState.firstTime
|
|
624
|
+
+ ", firstTimeOk=" + currentState.firstTimeOk);
|
|
625
|
+
return false;
|
|
626
|
+
}
|
|
627
|
+
StateCoreResult nextState = runStateCore(
|
|
628
|
+
STATE_OP_MARK_SUCCESS,
|
|
629
|
+
currentState,
|
|
630
|
+
expectedHash,
|
|
631
|
+
false,
|
|
632
|
+
false
|
|
633
|
+
);
|
|
634
|
+
if (!nextState.markSuccessAccepted) {
|
|
635
|
+
Log.w(TAG, "markSuccess rejected by state core: expected=" + expectedHash
|
|
636
|
+
+ ", launch=" + launchVersion
|
|
637
|
+
+ ", current=" + currentState.currentVersion
|
|
638
|
+
+ ", firstTime=" + currentState.firstTime
|
|
639
|
+
+ ", firstTimeOk=" + currentState.firstTimeOk);
|
|
640
|
+
return false;
|
|
641
|
+
}
|
|
642
|
+
SharedPreferences.Editor editor = sp.edit();
|
|
643
|
+
applyState(editor, nextState);
|
|
644
|
+
if (nextState.staleVersionToDelete != null) {
|
|
645
|
+
editor.remove("hash_" + nextState.staleVersionToDelete);
|
|
646
|
+
}
|
|
647
|
+
persistEditorOrThrow(editor, "mark success");
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
this.cleanUp();
|
|
651
|
+
return true;
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
/**
|
|
655
|
+
* Reset to the bundle packaged in the binary: wipe the whole update state
|
|
656
|
+
* (so the next launch resolves to the built-in bundle) and delete the
|
|
657
|
+
* downloaded versions, keeping only the directory of the version this
|
|
658
|
+
* process is running from (a silent reset must not break its on-demand
|
|
659
|
+
* asset loads). Only the client uuid survives — it identifies the install
|
|
660
|
+
* for gray release bucketing and must not change on reset.
|
|
661
|
+
*/
|
|
662
|
+
public void resetToPackagedBundle() {
|
|
663
|
+
synchronized (commitLock) {
|
|
664
|
+
resetToPackagedBundleLocked();
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
private void resetToPackagedBundleLocked() {
|
|
669
|
+
// Invalidate any in-flight cold-start round before clearing state: a
|
|
670
|
+
// round committing under the same lock afterwards sees the new
|
|
671
|
+
// generation and drops its result.
|
|
672
|
+
resetGeneration.incrementAndGet();
|
|
673
|
+
StateCoreResult resetState = new StateCoreResult();
|
|
674
|
+
resetState.packageVersion = getPackageVersion();
|
|
675
|
+
resetState.buildTime = getBuildTime();
|
|
676
|
+
resetState.firstTime = false;
|
|
677
|
+
resetState.firstTimeOk = true;
|
|
678
|
+
String uuid = sp.getString("uuid", null);
|
|
679
|
+
SharedPreferences.Editor editor = sp.edit();
|
|
680
|
+
editor.clear();
|
|
681
|
+
applyState(editor, resetState);
|
|
682
|
+
if (uuid != null) {
|
|
683
|
+
editor.putString("uuid", uuid);
|
|
684
|
+
}
|
|
685
|
+
persistEditorOrThrow(editor, "reset to packaged bundle");
|
|
686
|
+
ignoreRollback = false;
|
|
687
|
+
// editor.clear() above already dropped the cached check response; it
|
|
688
|
+
// still advertised the version this reset removed.
|
|
689
|
+
Log.i(TAG, "Reset to packaged bundle");
|
|
690
|
+
|
|
691
|
+
DownloadTaskParams params = new DownloadTaskParams();
|
|
692
|
+
params.type = DownloadTaskParams.TASK_TYPE_CLEANUP;
|
|
693
|
+
params.maxAgeDays = 0;
|
|
694
|
+
// Keep names are resolved by the queued task at execution time, so a
|
|
695
|
+
// later activation is protected too.
|
|
696
|
+
params.unzipDirectory = rootDir;
|
|
697
|
+
enqueue(params);
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
public static void setCustomInstanceManager(ReactInstanceManager instanceManager) {
|
|
701
|
+
synchronized (sLock) {
|
|
702
|
+
pendingReactInstanceManager = instanceManager;
|
|
703
|
+
if (sInstance != null) {
|
|
704
|
+
sInstance.reactInstanceManager = instanceManager;
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
public ReactInstanceManager getCustomReactInstanceManager() {
|
|
710
|
+
return reactInstanceManager;
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
/**
|
|
714
|
+
* Get singleton instance of UpdateContext
|
|
715
|
+
*/
|
|
716
|
+
public static UpdateContext getInstance(Context context) {
|
|
717
|
+
if (sInstance == null) {
|
|
718
|
+
synchronized (sLock) {
|
|
719
|
+
if (sInstance == null) {
|
|
720
|
+
sInstance = new UpdateContext(context.getApplicationContext());
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
return sInstance;
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
public static String getBundleUrl(Context context) {
|
|
728
|
+
return getInstance(context).getBundleUrl();
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
public static String getBundleUrl(Context context, String defaultAssetsUrl) {
|
|
732
|
+
return getInstance(context).getBundleUrl(defaultAssetsUrl);
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
public String getBundleUrl() {
|
|
736
|
+
return this.getBundleUrl((String) null);
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
public String getBundleUrl(String defaultAssetsUrl) {
|
|
740
|
+
isUsingBundleUrl = true;
|
|
741
|
+
String nativeCheckRolledBackVersion = null;
|
|
742
|
+
try {
|
|
743
|
+
// The whole resolution is one read-modify-write on the state
|
|
744
|
+
// (resolve, then possibly roll back missing bundles); see
|
|
745
|
+
// commitLock.
|
|
746
|
+
synchronized (commitLock) {
|
|
747
|
+
StateCoreResult currentState = getStateSnapshot();
|
|
748
|
+
StateCoreResult launchState = runStateCore(
|
|
749
|
+
STATE_OP_RESOLVE_LAUNCH,
|
|
750
|
+
currentState,
|
|
751
|
+
null,
|
|
752
|
+
ignoreRollback,
|
|
753
|
+
true
|
|
754
|
+
);
|
|
755
|
+
nativeCheckRolledBackVersion = launchState.rolledBackVersion;
|
|
756
|
+
if (launchState.didRollback) {
|
|
757
|
+
// The crash-protection rollback: the new version never called
|
|
758
|
+
// markSuccess. Keep this visible in release logs.
|
|
759
|
+
Log.e(TAG, "Version " + currentState.currentVersion
|
|
760
|
+
+ " was not marked as successful, rolling back to "
|
|
761
|
+
+ launchState.currentVersion);
|
|
762
|
+
}
|
|
763
|
+
if (launchState.didRollback || launchState.consumedFirstTime) {
|
|
764
|
+
SharedPreferences.Editor editor = sp.edit();
|
|
765
|
+
applyState(editor, launchState);
|
|
766
|
+
if (launchState.consumedFirstTime) {
|
|
767
|
+
editor.putBoolean(KEY_FIRST_LOAD_MARKED, true);
|
|
768
|
+
}
|
|
769
|
+
persistEditor(editor, "resolve launch");
|
|
770
|
+
}
|
|
771
|
+
if (launchState.consumedFirstTime) {
|
|
772
|
+
// bundleURL may be resolved multiple times in one process.
|
|
773
|
+
ignoreRollback = true;
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
String currentVersion = launchState.loadVersion;
|
|
777
|
+
if (currentVersion == null) {
|
|
778
|
+
return defaultAssetsUrl;
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
// Guard the rollback chain against cycles: a corrupted state returning
|
|
782
|
+
// an already-visited version would otherwise spin this loop forever on
|
|
783
|
+
// the main thread.
|
|
784
|
+
java.util.HashSet<String> visitedVersions = new java.util.HashSet<>();
|
|
785
|
+
while (currentVersion != null && visitedVersions.add(currentVersion)) {
|
|
786
|
+
File bundleFile = new File(rootDir, currentVersion+"/index.bundlejs");
|
|
787
|
+
if (!bundleFile.exists()) {
|
|
788
|
+
Log.e(TAG, "Bundle version " + currentVersion + " not found.");
|
|
789
|
+
currentVersion = this.rollBack();
|
|
790
|
+
nativeCheckRolledBackVersion = rolledBackVersion();
|
|
791
|
+
continue;
|
|
792
|
+
}
|
|
793
|
+
launchVersion = currentVersion;
|
|
794
|
+
nativeCheckRolledBackVersion = rolledBackVersion();
|
|
795
|
+
return bundleFile.toString();
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
nativeCheckRolledBackVersion = rolledBackVersion();
|
|
799
|
+
return defaultAssetsUrl;
|
|
800
|
+
}
|
|
801
|
+
} finally {
|
|
802
|
+
// Even corrupted state or a state-core exception must not disable
|
|
803
|
+
// the next-launch rescue check. A null snapshot simply omits the
|
|
804
|
+
// rollback guard for this exceptional launch.
|
|
805
|
+
NativeCheckOrchestrator.schedule(this, nativeCheckRolledBackVersion);
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
/** Sampled/compared by the native check orchestrator; see resetGeneration. */
|
|
810
|
+
static long getResetGeneration() {
|
|
811
|
+
return resetGeneration.get();
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
/**
|
|
815
|
+
* Commit everything a cold-start round persists — version info, the
|
|
816
|
+
* activation, the response cache — under one lock that first re-checks the
|
|
817
|
+
* reset generation. resetToPackagedBundle takes the same lock, so there is
|
|
818
|
+
* no compare-and-act window: either the whole round lands, or the reset
|
|
819
|
+
* wins and none of it does. Returns whether the round was committed.
|
|
820
|
+
*/
|
|
821
|
+
boolean commitNativeCheckResult(
|
|
822
|
+
long expectedGeneration,
|
|
823
|
+
String hash,
|
|
824
|
+
String hashInfoJson,
|
|
825
|
+
boolean activate,
|
|
826
|
+
String responseCacheJson
|
|
827
|
+
) {
|
|
828
|
+
boolean switching = activate && hash != null;
|
|
829
|
+
if (!switching) {
|
|
830
|
+
return commitNativeCheckResultState(
|
|
831
|
+
expectedGeneration, hash, hashInfoJson, false, responseCacheJson);
|
|
832
|
+
}
|
|
833
|
+
synchronized (versionFilesLock) {
|
|
834
|
+
verifySwitchTarget(hash);
|
|
835
|
+
return commitNativeCheckResultState(
|
|
836
|
+
expectedGeneration, hash, hashInfoJson, true, responseCacheJson);
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
private boolean commitNativeCheckResultState(
|
|
841
|
+
long expectedGeneration,
|
|
842
|
+
String hash,
|
|
843
|
+
String hashInfoJson,
|
|
844
|
+
boolean switching,
|
|
845
|
+
String responseCacheJson
|
|
846
|
+
) {
|
|
847
|
+
synchronized (commitLock) {
|
|
848
|
+
if (resetGeneration.get() != expectedGeneration) {
|
|
849
|
+
return false;
|
|
850
|
+
}
|
|
851
|
+
SharedPreferences.Editor editor = sp.edit();
|
|
852
|
+
if (hash != null && hashInfoJson != null) {
|
|
853
|
+
editor.putString("hash_" + hash, hashInfoJson);
|
|
854
|
+
}
|
|
855
|
+
if (switching) {
|
|
856
|
+
applyState(editor, computeSwitchState(hash));
|
|
857
|
+
}
|
|
858
|
+
if (responseCacheJson != null) {
|
|
859
|
+
editor.putString(NativeCheckOrchestrator.KEY_RESP_CACHE, responseCacheJson);
|
|
860
|
+
}
|
|
861
|
+
persistEditorOrThrow(editor, "commit native check result");
|
|
862
|
+
if (switching) {
|
|
863
|
+
ignoreRollback = false;
|
|
864
|
+
}
|
|
865
|
+
return true;
|
|
866
|
+
}
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
/**
|
|
870
|
+
* bundleSha256 from the running version's install record (see
|
|
871
|
+
* InstallRecord); "" for the embedded bundle, a legacy install or an
|
|
872
|
+
* unreadable record. Exposed to JS for crash-report attribution.
|
|
873
|
+
*/
|
|
874
|
+
String currentBundleSha256(String hash) {
|
|
875
|
+
if (hash == null || hash.isEmpty() || !UpdateFileUtils.isSafePathComponent(hash)) {
|
|
876
|
+
return "";
|
|
877
|
+
}
|
|
878
|
+
JSONObject record = InstallRecord.read(new File(rootDir, hash));
|
|
879
|
+
return record == null ? "" : record.optString("bundleSha256", "");
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
boolean hasCompletedVersion(String hash) {
|
|
883
|
+
if (!UpdateFileUtils.isSafePathComponent(hash)) {
|
|
884
|
+
return false;
|
|
885
|
+
}
|
|
886
|
+
File versionDir = new File(rootDir, hash);
|
|
887
|
+
return new File(versionDir, "index.bundlejs").isFile()
|
|
888
|
+
&& InstallRecord.isComplete(versionDir, hash);
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
private String rollBack() {
|
|
892
|
+
synchronized (commitLock) {
|
|
893
|
+
StateCoreResult currentState = getStateSnapshot();
|
|
894
|
+
StateCoreResult nextState = runStateCore(
|
|
895
|
+
STATE_OP_ROLLBACK,
|
|
896
|
+
currentState,
|
|
897
|
+
null,
|
|
898
|
+
false,
|
|
899
|
+
false
|
|
900
|
+
);
|
|
901
|
+
Log.e(TAG, "Rolling back version " + currentState.currentVersion
|
|
902
|
+
+ " to " + nextState.currentVersion);
|
|
903
|
+
SharedPreferences.Editor editor = sp.edit();
|
|
904
|
+
applyState(editor, nextState);
|
|
905
|
+
persistEditor(editor, "rollback");
|
|
906
|
+
return nextState.currentVersion;
|
|
907
|
+
}
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
/**
|
|
911
|
+
* The version this process is running from (null before getBundleUrl
|
|
912
|
+
* resolved one, or when the packaged bundle runs). Read by DownloadTask
|
|
913
|
+
* to refuse reinstalling that directory in place.
|
|
914
|
+
*/
|
|
915
|
+
@Nullable
|
|
916
|
+
static String runningVersion() {
|
|
917
|
+
UpdateContext instance = sInstance;
|
|
918
|
+
return instance == null ? null : instance.launchVersion;
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
interface CleanupAction {
|
|
922
|
+
void run(@Nullable String keepCurrent, @Nullable String keepPrevious);
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
/** Resolve keep names immediately before deletion, never when enqueued. */
|
|
926
|
+
void runCleanupWithLatestState(CleanupAction action) {
|
|
927
|
+
synchronized (versionFilesLock) {
|
|
928
|
+
final String[] keepNames;
|
|
929
|
+
synchronized (commitLock) {
|
|
930
|
+
keepNames = CleanupKeepNames.select(
|
|
931
|
+
sp.getString("currentVersion", null),
|
|
932
|
+
sp.getString("lastVersion", null),
|
|
933
|
+
launchVersion
|
|
934
|
+
);
|
|
935
|
+
}
|
|
936
|
+
if (keepNames == null) {
|
|
937
|
+
// JNI has only two keep slots; three distinct live versions are
|
|
938
|
+
// safer to defer until the next process than to delete one.
|
|
939
|
+
Log.i(TAG, "Skipping cleanup: three live versions need protection");
|
|
940
|
+
return;
|
|
941
|
+
}
|
|
942
|
+
action.run(keepNames[0], keepNames[1]);
|
|
943
|
+
}
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
private void cleanUp() {
|
|
947
|
+
DownloadTaskParams params = new DownloadTaskParams();
|
|
948
|
+
params.type = DownloadTaskParams.TASK_TYPE_CLEANUP;
|
|
949
|
+
params.unzipDirectory = rootDir;
|
|
950
|
+
enqueue(params);
|
|
951
|
+
}
|
|
952
|
+
}
|