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