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,10 +6,10 @@ import androidx.annotation.Nullable;
|
|
|
6
6
|
import java.io.IOException;
|
|
7
7
|
import java.nio.charset.Charset;
|
|
8
8
|
import java.nio.charset.StandardCharsets;
|
|
9
|
-
import java.util.HashSet;
|
|
10
9
|
import java.util.concurrent.CountDownLatch;
|
|
11
10
|
import java.util.concurrent.TimeUnit;
|
|
12
11
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
12
|
+
import java.util.concurrent.atomic.AtomicReference;
|
|
13
13
|
import okhttp3.MediaType;
|
|
14
14
|
import okhttp3.OkHttpClient;
|
|
15
15
|
import okhttp3.Request;
|
|
@@ -31,20 +31,22 @@ import org.json.JSONObject;
|
|
|
31
31
|
* version blacklisting.
|
|
32
32
|
*/
|
|
33
33
|
final class SyncCoordinator {
|
|
34
|
-
// Version-info
|
|
35
|
-
private static final String INFO_CRASH_HOLD = Texts.
|
|
36
|
-
private static final String INFO_FORCE_BOOT = Texts.reveal("3c18e6d2aba9674a360d19ead5a695");
|
|
34
|
+
// Version-info flag read by JS (metadata.ts), stored encoded.
|
|
35
|
+
private static final String INFO_CRASH_HOLD = Texts.INFO_CRASH_HOLD;
|
|
37
36
|
|
|
37
|
+
// Shared with Harmony. The response cache lives in its own
|
|
38
|
+
// SharedPreferences file (UpdateContext.getNativeCheckCache).
|
|
39
|
+
// <generated:storage-keys> (scripts/contract.ts; bun scripts/generate-contract.ts)
|
|
40
|
+
// The persisted native check config (JS syncNativeConfig or the host).
|
|
38
41
|
static final String KEY_CONFIG = "nativeConfig";
|
|
39
|
-
// Raw response cache for the JS side to reuse (§10.3), scoped to the
|
|
40
|
-
//
|
|
42
|
+
// Raw response cache for the JS side to reuse (§10.3), scoped to the exact
|
|
43
|
+
// logical request and native config that produced it.
|
|
41
44
|
static final String KEY_RESP_CACHE = "nativeCheckResp";
|
|
42
45
|
// Set when a round starts, cleared when it ends (§11.4). Residue on the
|
|
43
|
-
// next launch means the previous process died mid-round
|
|
44
|
-
//
|
|
46
|
+
// next launch means the previous process died mid-round: that launch
|
|
47
|
+
// resumes immediately instead of waiting 5s.
|
|
45
48
|
static final String KEY_ROUND_INCOMPLETE = "nativeCheckIncomplete";
|
|
46
|
-
|
|
47
|
-
private static final long DOWNLOAD_PHASE_TIMEOUT_SECONDS = 600;
|
|
49
|
+
// </generated:storage-keys>
|
|
48
50
|
// The check response (and a remote queryUrls list) is a small JSON
|
|
49
51
|
// document; anything bigger is a broken or hijacked endpoint.
|
|
50
52
|
private static final long MAX_QUERY_RESPONSE_BYTES = 1024 * 1024;
|
|
@@ -67,7 +69,7 @@ final class SyncCoordinator {
|
|
|
67
69
|
// bumps it, and the late activation must lose to that reset exactly like
|
|
68
70
|
// the round itself would. Written generation-first, read hash-first, so
|
|
69
71
|
// a torn read can only see a stricter (newer) generation.
|
|
70
|
-
|
|
72
|
+
static volatile String unactivatedHash;
|
|
71
73
|
private static volatile long unactivatedGeneration;
|
|
72
74
|
private static volatile UpdateContext sContext;
|
|
73
75
|
private static volatile String sLaunchRolledBackVersion;
|
|
@@ -77,42 +79,50 @@ final class SyncCoordinator {
|
|
|
77
79
|
private static volatile String sJsCompletedConfig;
|
|
78
80
|
// Published after the launch rollback snapshot, before host calls are accepted.
|
|
79
81
|
private static volatile boolean nativeReady;
|
|
80
|
-
|
|
82
|
+
static volatile BundlePreparationResult roundResult =
|
|
81
83
|
BundlePreparationResult.of(BundlePreparationResult.FAILED, "check_failed");
|
|
82
84
|
private static volatile long roundGeneration = -1;
|
|
83
85
|
private static volatile long roundConfigGeneration = -1;
|
|
84
86
|
private static volatile String roundConfigJson;
|
|
85
87
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
88
|
+
// prepareBundle without an explicit timeout waits this long at most: past
|
|
89
|
+
// the longest round (8 query requests, then two 600s download phases).
|
|
90
|
+
// Same default as iOS (kPushyHostPrepareDefaultTimeout).
|
|
91
|
+
static final long DEFAULT_PREPARE_TIMEOUT_MS = 30 * 60 * 1000L;
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Blocking only on the host API's worker; never call on the UI thread.
|
|
95
|
+
* Waits at most timeoutMs for this process's round: on expiry the result
|
|
96
|
+
* is failed/timeout, and the round keeps running in the background (its
|
|
97
|
+
* result still applies to the next launch), as on iOS.
|
|
98
|
+
*/
|
|
99
|
+
static BundlePreparationResult prepareBundle(UpdateContext context, long timeoutMs)
|
|
100
|
+
throws InterruptedException {
|
|
101
|
+
if (BuildConfig.DEBUG) {
|
|
89
102
|
return BundlePreparationResult.of(BundlePreparationResult.SKIPPED, "debug");
|
|
90
103
|
}
|
|
91
104
|
if (!nativeReady || sContext != context || !context.getIsUsingBundleUrl()) {
|
|
92
105
|
return BundlePreparationResult.of(BundlePreparationResult.SKIPPED, "not_initialized");
|
|
93
106
|
}
|
|
94
107
|
String configJson = context.getKv(KEY_CONFIG);
|
|
95
|
-
|
|
96
|
-
|
|
108
|
+
BundlePreparationResult rejection = configRejection(configJson);
|
|
109
|
+
if (rejection != null) {
|
|
110
|
+
return rejection;
|
|
97
111
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
103
|
-
if (config.optString("appKey", "").isEmpty()) {
|
|
104
|
-
return BundlePreparationResult.of(BundlePreparationResult.FAILED, "invalid_config");
|
|
105
|
-
}
|
|
106
|
-
} catch (JSONException e) {
|
|
107
|
-
return BundlePreparationResult.of(BundlePreparationResult.FAILED, "invalid_config");
|
|
112
|
+
// Run the round on its own thread rather than this caller's, so the
|
|
113
|
+
// wait below can be bounded.
|
|
114
|
+
if (claimRound()) {
|
|
115
|
+
Threads.startDaemon("pushy-native-sync", () -> runClaimedRound(0));
|
|
108
116
|
}
|
|
109
|
-
startRound(0);
|
|
110
117
|
if (!roundStarted.get()) {
|
|
111
118
|
return BundlePreparationResult.of(BundlePreparationResult.SKIPPED, "config_changed");
|
|
112
119
|
}
|
|
113
|
-
roundDone.await()
|
|
120
|
+
if (!roundDone.await(Math.max(0, timeoutMs), TimeUnit.MILLISECONDS)) {
|
|
121
|
+
return BundlePreparationResult.of(BundlePreparationResult.FAILED, "timeout");
|
|
122
|
+
}
|
|
114
123
|
if (roundConfigGeneration != UpdateContext.getNativeConfigGeneration()
|
|
115
|
-
|| !
|
|
124
|
+
|| !FlowBridge.configsEquivalent(configJson, roundConfigJson)
|
|
125
|
+
|| !FlowBridge.configsEquivalent(configJson, context.getKv(KEY_CONFIG))) {
|
|
116
126
|
return BundlePreparationResult.of(BundlePreparationResult.CANCELLED, "config_changed");
|
|
117
127
|
}
|
|
118
128
|
if (roundGeneration != UpdateContext.getResetGeneration()) {
|
|
@@ -127,21 +137,49 @@ final class SyncCoordinator {
|
|
|
127
137
|
}
|
|
128
138
|
|
|
129
139
|
/**
|
|
130
|
-
* True when JS already obtained a valid response in this process for
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
140
|
+
* True when JS already obtained a valid response in this process for a
|
|
141
|
+
* config equivalent (FlowBridge.configsEquivalent, contract C1) to
|
|
142
|
+
* the one the native round would use: the delayed round is then a
|
|
143
|
+
* duplicate request. JS and a host may serialize the same config
|
|
144
|
+
* differently, so exact string equality would almost never match. Only
|
|
145
|
+
* the scheduled round consults this — the crash-rescue path still runs,
|
|
146
|
+
* JS is dead by then.
|
|
134
147
|
*/
|
|
135
148
|
private static boolean hasJsRound(UpdateContext context) {
|
|
136
149
|
String jsConfig = sJsCompletedConfig;
|
|
137
|
-
return jsConfig != null
|
|
150
|
+
return jsConfig != null
|
|
151
|
+
&& FlowBridge.configsEquivalent(jsConfig, context.getKv(KEY_CONFIG));
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* The shared gate (FlowBridge.runnableConfig, update_flow_core) every
|
|
156
|
+
* entry point (prepareBundle, the automatic round's gate, the round
|
|
157
|
+
* itself) applies to the persisted config, so they cannot disagree on
|
|
158
|
+
* what is runnable: null when a round may run, otherwise the result —
|
|
159
|
+
* absent is skipped/not_configured, a non-object failed/invalid_config, a
|
|
160
|
+
* truthy disabled skipped/disabled, a blank appKey failed/invalid_config.
|
|
161
|
+
*/
|
|
162
|
+
@Nullable
|
|
163
|
+
static BundlePreparationResult configRejection(@Nullable String json) {
|
|
164
|
+
try {
|
|
165
|
+
String result = FlowBridge.runnableConfig(json);
|
|
166
|
+
if (result == null) {
|
|
167
|
+
return BundlePreparationResult.of(BundlePreparationResult.FAILED, "internal_error");
|
|
168
|
+
}
|
|
169
|
+
JSONObject verdict = new JSONObject(result);
|
|
170
|
+
return verdict.has("status")
|
|
171
|
+
? BundlePreparationResult.of(verdict.getString("status"), verdict.getString("reason"))
|
|
172
|
+
: null;
|
|
173
|
+
} catch (JSONException e) {
|
|
174
|
+
return BundlePreparationResult.of(BundlePreparationResult.FAILED, "invalid_config");
|
|
175
|
+
}
|
|
138
176
|
}
|
|
139
177
|
|
|
140
178
|
private SyncCoordinator() {
|
|
141
179
|
}
|
|
142
180
|
|
|
143
181
|
static void schedule(final UpdateContext context, final String launchRolledBackVersion) {
|
|
144
|
-
if (
|
|
182
|
+
if (BuildConfig.DEBUG) {
|
|
145
183
|
return;
|
|
146
184
|
}
|
|
147
185
|
if (!scheduled.compareAndSet(false, true)) {
|
|
@@ -155,60 +193,35 @@ final class SyncCoordinator {
|
|
|
155
193
|
if (context.getKv(KEY_CONFIG) != null) {
|
|
156
194
|
CrashHold.install();
|
|
157
195
|
}
|
|
158
|
-
Thread
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
"native sync skipped: JS already queried in this process");
|
|
173
|
-
return;
|
|
174
|
-
}
|
|
175
|
-
startRound(0);
|
|
176
|
-
} catch (Throwable e) {
|
|
177
|
-
// The rescue path must never take the app down with it.
|
|
178
|
-
Log.w(Texts.LOG_TAG, "native sync failed: " + e);
|
|
196
|
+
Threads.startDaemon("pushy-native-sync", Thread.MIN_PRIORITY + 1, () -> {
|
|
197
|
+
try {
|
|
198
|
+
// Keep the check away from the cold-start critical path
|
|
199
|
+
// (§7 R5) — unless the previous process died mid-round,
|
|
200
|
+
// in which case every launch second counts (§11.4).
|
|
201
|
+
if (context.getKv(KEY_ROUND_INCOMPLETE) == null) {
|
|
202
|
+
Thread.sleep(5000);
|
|
203
|
+
}
|
|
204
|
+
if (hasJsRound(context)) {
|
|
205
|
+
// Not consuming the round: a later crash rescue may
|
|
206
|
+
// still need it.
|
|
207
|
+
Log.i(Texts.LOG_TAG,
|
|
208
|
+
"native sync skipped: JS already queried in this process");
|
|
209
|
+
return;
|
|
179
210
|
}
|
|
211
|
+
startRound(0);
|
|
212
|
+
} catch (Throwable e) {
|
|
213
|
+
// The rescue path must never take the app down with it.
|
|
214
|
+
Log.w(Texts.LOG_TAG, "native sync failed: " + e);
|
|
180
215
|
}
|
|
181
|
-
}
|
|
182
|
-
thread.setPriority(Thread.MIN_PRIORITY + 1);
|
|
183
|
-
thread.setDaemon(true);
|
|
184
|
-
thread.start();
|
|
216
|
+
});
|
|
185
217
|
}
|
|
186
218
|
|
|
187
219
|
static boolean isRoundInFlight() {
|
|
188
220
|
return roundStarted.get() && !roundCompleted;
|
|
189
221
|
}
|
|
190
222
|
|
|
191
|
-
/**
|
|
192
|
-
* Runs the process's single round on the calling thread if nobody has
|
|
193
|
-
* started it yet. deadlineNanos > 0 (crash rescue) caps every HTTP call
|
|
194
|
-
* and download phase to the remaining budget.
|
|
195
|
-
*/
|
|
196
223
|
private static boolean hasRunnableConfig(UpdateContext context) {
|
|
197
|
-
|
|
198
|
-
return false;
|
|
199
|
-
}
|
|
200
|
-
try {
|
|
201
|
-
String json = context.getKv(KEY_CONFIG);
|
|
202
|
-
if (json == null) {
|
|
203
|
-
return false;
|
|
204
|
-
}
|
|
205
|
-
JSONObject config = new JSONObject(json);
|
|
206
|
-
return !config.optBoolean("disabled", false)
|
|
207
|
-
&& config.opt("appKey") instanceof String
|
|
208
|
-
&& !config.getString("appKey").trim().isEmpty();
|
|
209
|
-
} catch (JSONException e) {
|
|
210
|
-
return false;
|
|
211
|
-
}
|
|
224
|
+
return context != null && configRejection(context.getKv(KEY_CONFIG)) == null;
|
|
212
225
|
}
|
|
213
226
|
|
|
214
227
|
static void onConfigured(UpdateContext context) {
|
|
@@ -217,17 +230,27 @@ final class SyncCoordinator {
|
|
|
217
230
|
}
|
|
218
231
|
}
|
|
219
232
|
|
|
233
|
+
/**
|
|
234
|
+
* Runs the process's single round on the calling thread if nobody has
|
|
235
|
+
* started it yet. deadlineNanos > 0 (crash rescue) caps every HTTP call
|
|
236
|
+
* and download phase to the remaining budget.
|
|
237
|
+
*/
|
|
220
238
|
private static void startRound(long deadlineNanos) {
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
if (!hasRunnableConfig(sContext)) {
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
226
|
-
if (!roundStarted.compareAndSet(false, true)) {
|
|
227
|
-
return;
|
|
239
|
+
if (claimRound()) {
|
|
240
|
+
runClaimedRound(deadlineNanos);
|
|
228
241
|
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
// Claims the process's only round. An automatic check before first-run
|
|
245
|
+
// provisioning must not consume it: hosts may configure later in this
|
|
246
|
+
// launch.
|
|
247
|
+
private static boolean claimRound() {
|
|
248
|
+
return hasRunnableConfig(sContext) && roundStarted.compareAndSet(false, true);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
private static void runClaimedRound(long deadlineNanos) {
|
|
229
252
|
try {
|
|
230
|
-
runOnce(sContext, sLaunchRolledBackVersion, deadlineNanos);
|
|
253
|
+
runOnce(new DeviceRound(sContext, sLaunchRolledBackVersion), deadlineNanos);
|
|
231
254
|
} catch (Throwable e) {
|
|
232
255
|
Log.w(Texts.LOG_TAG, "native sync failed: " + e);
|
|
233
256
|
roundResult = BundlePreparationResult.of(BundlePreparationResult.FAILED, "internal_error");
|
|
@@ -299,253 +322,349 @@ final class SyncCoordinator {
|
|
|
299
322
|
}
|
|
300
323
|
}
|
|
301
324
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
)
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
325
|
+
// The engine's clock: milliseconds on System.nanoTime, offset from this
|
|
326
|
+
// class's load so every value is positive (0 means "no deadline"). The
|
|
327
|
+
// nanoTime origin is arbitrary, so a hold deadline in nanos may be
|
|
328
|
+
// negative: only 0 means none on this side too.
|
|
329
|
+
private static final long CLOCK_ORIGIN_NANOS = System.nanoTime() - TimeUnit.SECONDS.toNanos(1);
|
|
330
|
+
|
|
331
|
+
static double engineMillis(long nanos) {
|
|
332
|
+
return (nanos - CLOCK_ORIGIN_NANOS) / 1e6;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
static long engineNanos(double millis) {
|
|
336
|
+
return CLOCK_ORIGIN_NANOS + (long) (millis * 1e6);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
/** A monotonic clock in nanoseconds (System.nanoTime on the device). */
|
|
340
|
+
interface Clock {
|
|
341
|
+
long nanoTime();
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Everything a round does besides deciding: the engine step, the clock,
|
|
346
|
+
* the persisted state and the IO the engine's commands ask for.
|
|
347
|
+
* DeviceRound is the device's; the JVM tests replay the engine vectors
|
|
348
|
+
* through a scripted one (SyncRoundReplayTest).
|
|
349
|
+
*/
|
|
350
|
+
interface RoundHost extends DownloadStarter, Clock {
|
|
351
|
+
/** FlowBridge.stepRound; null when the engine is unavailable. */
|
|
352
|
+
@Nullable
|
|
353
|
+
String stepRound(@Nullable String state, String event);
|
|
354
|
+
|
|
355
|
+
/** Whether a crash is being held right now (crashHoldActive). */
|
|
356
|
+
boolean crashHold();
|
|
357
|
+
|
|
358
|
+
long resetGeneration();
|
|
359
|
+
|
|
360
|
+
long configGeneration();
|
|
361
|
+
|
|
362
|
+
@Nullable
|
|
363
|
+
String getKv(String key);
|
|
364
|
+
|
|
365
|
+
void setKv(String key, String value);
|
|
366
|
+
|
|
367
|
+
void removeKv(String key);
|
|
368
|
+
|
|
369
|
+
/** This launch as the shared core sees it (native_round.h). */
|
|
370
|
+
JSONObject launchEnv() throws JSONException;
|
|
371
|
+
|
|
372
|
+
/** The response body; null when the request failed. */
|
|
373
|
+
@Nullable
|
|
374
|
+
String httpRequest(String url, @Nullable String postBody, long timeoutMs, long callTimeoutMs);
|
|
375
|
+
|
|
376
|
+
/** Wall-clock seconds, stamped on each response. */
|
|
377
|
+
double wallSeconds();
|
|
378
|
+
|
|
379
|
+
boolean hasCompletedVersion(String hash);
|
|
380
|
+
|
|
381
|
+
/** UpdateContext.commitSyncResult: whether the commit landed. */
|
|
382
|
+
boolean commitSyncResult(
|
|
383
|
+
long expectedGeneration, @Nullable String hash, @Nullable String hashInfoJson,
|
|
384
|
+
boolean activate, String responseCacheJson) throws Exception;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
/** The round on the device: the JNI engine, UpdateContext, OkHttp. */
|
|
388
|
+
private static final class DeviceRound implements RoundHost {
|
|
389
|
+
private final UpdateContext context;
|
|
390
|
+
private final String launchRolledBackVersion;
|
|
391
|
+
|
|
392
|
+
DeviceRound(UpdateContext context, String launchRolledBackVersion) {
|
|
393
|
+
this.context = context;
|
|
394
|
+
this.launchRolledBackVersion = launchRolledBackVersion;
|
|
316
395
|
}
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
roundResult = BundlePreparationResult.of(BundlePreparationResult.FAILED, "invalid_config");
|
|
322
|
-
return;
|
|
396
|
+
|
|
397
|
+
@Override
|
|
398
|
+
public long nanoTime() {
|
|
399
|
+
return System.nanoTime();
|
|
323
400
|
}
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
401
|
+
|
|
402
|
+
@Override
|
|
403
|
+
public String stepRound(String state, String event) {
|
|
404
|
+
return FlowBridge.stepRound(state, event);
|
|
327
405
|
}
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
return;
|
|
406
|
+
|
|
407
|
+
@Override
|
|
408
|
+
public boolean crashHold() {
|
|
409
|
+
return crashHoldActive;
|
|
332
410
|
}
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
411
|
+
|
|
412
|
+
@Override
|
|
413
|
+
public long resetGeneration() {
|
|
414
|
+
return UpdateContext.getResetGeneration();
|
|
337
415
|
}
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
} finally {
|
|
343
|
-
try {
|
|
344
|
-
context.removeKv(KEY_ROUND_INCOMPLETE);
|
|
345
|
-
} catch (IllegalStateException ignored) {
|
|
346
|
-
}
|
|
416
|
+
|
|
417
|
+
@Override
|
|
418
|
+
public long configGeneration() {
|
|
419
|
+
return UpdateContext.getNativeConfigGeneration();
|
|
347
420
|
}
|
|
348
|
-
}
|
|
349
421
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
long deadlineNanos,
|
|
354
|
-
long resetGeneration,
|
|
355
|
-
String configJson,
|
|
356
|
-
JSONObject config,
|
|
357
|
-
String appKey
|
|
358
|
-
) throws JSONException {
|
|
359
|
-
String packageVersion = config.optString(
|
|
360
|
-
"packageVersion", context.getPackageVersion());
|
|
361
|
-
if (packageVersion.isEmpty()) {
|
|
362
|
-
packageVersion = context.getPackageVersion();
|
|
422
|
+
@Override
|
|
423
|
+
public String getKv(String key) {
|
|
424
|
+
return context.getKv(key);
|
|
363
425
|
}
|
|
364
426
|
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
// seconds later, would lose the guard and could forceBoot the version
|
|
369
|
-
// that this very launch just rolled back.
|
|
370
|
-
String rolledBackVersion = launchRolledBackVersion;
|
|
371
|
-
String uuid = context.getKv("uuid");
|
|
372
|
-
if (uuid == null) {
|
|
373
|
-
uuid = "";
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
JSONObject identity = new JSONObject();
|
|
377
|
-
identity.put("packageVersion", packageVersion);
|
|
378
|
-
identity.put(
|
|
379
|
-
"currentVersion",
|
|
380
|
-
currentVersion == null ? JSONObject.NULL : currentVersion
|
|
381
|
-
);
|
|
382
|
-
identity.put("uuid", uuid);
|
|
383
|
-
if (rolledBackVersion != null) {
|
|
384
|
-
identity.put("rolledBackVersion", rolledBackVersion);
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
JSONObject cInfo = new JSONObject();
|
|
388
|
-
cInfo.put("rnu", config.optString("rnu", ""));
|
|
389
|
-
cInfo.put("rn", config.optString("rn", ""));
|
|
390
|
-
// React Native's Platform.Version is the Android SDK integer; use the
|
|
391
|
-
// same value so this request can be fingerprinted against the JS one.
|
|
392
|
-
cInfo.put("os", "android " + Build.VERSION.SDK_INT);
|
|
393
|
-
cInfo.put("uuid", uuid);
|
|
394
|
-
|
|
395
|
-
JSONObject input = new JSONObject();
|
|
396
|
-
input.put("packageVersion", packageVersion);
|
|
397
|
-
input.put(
|
|
398
|
-
"currentVersion",
|
|
399
|
-
currentVersion == null ? JSONObject.NULL : currentVersion
|
|
400
|
-
);
|
|
401
|
-
input.put("buildTime", context.getBuildTime());
|
|
402
|
-
input.put("cInfo", cInfo);
|
|
403
|
-
input.put("supportedDiffVersion", NativeCore.supportedDiffVersion());
|
|
404
|
-
input.put("bundleHash", context.computeBundleHash());
|
|
405
|
-
|
|
406
|
-
String body = FlowBridge.buildRequestBody(input.toString());
|
|
407
|
-
if (body == null) {
|
|
408
|
-
roundResult = BundlePreparationResult.of(BundlePreparationResult.FAILED, "invalid_request");
|
|
409
|
-
return;
|
|
427
|
+
@Override
|
|
428
|
+
public void setKv(String key, String value) {
|
|
429
|
+
context.setKv(key, value);
|
|
410
430
|
}
|
|
411
431
|
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
"native sync: no endpoint reachable, giving up until next launch");
|
|
416
|
-
return;
|
|
432
|
+
@Override
|
|
433
|
+
public void removeKv(String key) {
|
|
434
|
+
context.removeKv(key);
|
|
417
435
|
}
|
|
418
|
-
// Cache freshness is anchored to when the server response arrived,
|
|
419
|
-
// not to when a potentially long download/patch/activation finished.
|
|
420
|
-
final long responseAtSeconds = System.currentTimeMillis() / 1000;
|
|
421
436
|
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
roundResult = BundlePreparationResult.of(BundlePreparationResult.FAILED, "invalid_response");
|
|
426
|
-
return;
|
|
437
|
+
@Override
|
|
438
|
+
public JSONObject launchEnv() throws JSONException {
|
|
439
|
+
return SyncCoordinator.launchEnv(context, launchRolledBackVersion);
|
|
427
440
|
}
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
buildResponseCacheJson(configJson, body, responseText, responseAtSeconds));
|
|
433
|
-
roundResult = committed
|
|
434
|
-
? BundlePreparationResult.of(BundlePreparationResult.NO_UPDATE, decision.optString("reason"))
|
|
435
|
-
: BundlePreparationResult.of(BundlePreparationResult.CANCELLED, "reset");
|
|
436
|
-
Log.i(Texts.LOG_TAG,
|
|
437
|
-
"native sync: nothing to do (" + decision.optString("reason") + ")");
|
|
438
|
-
return;
|
|
441
|
+
|
|
442
|
+
@Override
|
|
443
|
+
public String httpRequest(String url, String postBody, long timeoutMs, long callTimeoutMs) {
|
|
444
|
+
return SyncCoordinator.httpRequest(url, postBody, timeoutMs, callTimeoutMs);
|
|
439
445
|
}
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
return;
|
|
446
|
+
|
|
447
|
+
@Override
|
|
448
|
+
public double wallSeconds() {
|
|
449
|
+
return System.currentTimeMillis() / 1000.0;
|
|
444
450
|
}
|
|
445
451
|
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
context, decision.optJSONArray("attempts"), hash, currentVersion,
|
|
450
|
-
deadlineNanos);
|
|
451
|
-
}
|
|
452
|
-
if (!downloaded) {
|
|
453
|
-
// The native attempt has finished, so JS may safely reuse the
|
|
454
|
-
// response and retry through its own strategy chain.
|
|
455
|
-
boolean committed = context.commitSyncResult(
|
|
456
|
-
resetGeneration, null, null, false,
|
|
457
|
-
buildResponseCacheJson(configJson, body, responseText, responseAtSeconds));
|
|
458
|
-
roundResult = BundlePreparationResult.of(
|
|
459
|
-
committed ? BundlePreparationResult.FAILED : BundlePreparationResult.CANCELLED,
|
|
460
|
-
committed ? "download_failed" : "reset");
|
|
461
|
-
return;
|
|
452
|
+
@Override
|
|
453
|
+
public boolean hasCompletedVersion(String hash) {
|
|
454
|
+
return context.hasCompletedVersion(hash);
|
|
462
455
|
}
|
|
463
456
|
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
457
|
+
@Override
|
|
458
|
+
public boolean commitSyncResult(
|
|
459
|
+
long expectedGeneration, String hash, String hashInfoJson,
|
|
460
|
+
boolean activate, String responseCacheJson) {
|
|
461
|
+
return context.commitSyncResult(
|
|
462
|
+
expectedGeneration, hash, hashInfoJson, activate, responseCacheJson);
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
@Override
|
|
466
|
+
public DownloadTaskParams start(
|
|
467
|
+
String strategy, String url, String hash, String originHash,
|
|
468
|
+
UpdateContext.DownloadFileListener listener, long deadlineNanos) {
|
|
469
|
+
if ("diff".equals(strategy)) {
|
|
470
|
+
return context.downloadPatchFromPpk(url, hash, originHash, listener, deadlineNanos);
|
|
471
|
+
}
|
|
472
|
+
if ("pdiff".equals(strategy)) {
|
|
473
|
+
return context.downloadPatchFromApk(url, hash, listener, deadlineNanos);
|
|
474
|
+
}
|
|
475
|
+
return context.downloadFullUpdate(url, hash, listener, deadlineNanos);
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
/**
|
|
480
|
+
* The round itself is the shared engine's (cpp/update_flow_core
|
|
481
|
+
* round_engine.h, NATIVE_CHECKUPDATE_DESIGN §12): this drives it on the
|
|
482
|
+
* calling thread and runs what it asks for — the breadcrumb, the launch
|
|
483
|
+
* facts, the requests, the downloads and the commit.
|
|
484
|
+
*/
|
|
485
|
+
static void runOnce(RoundHost host, long deadlineNanos) throws JSONException {
|
|
486
|
+
final long resetGeneration = host.resetGeneration();
|
|
487
|
+
final long configGeneration = host.configGeneration();
|
|
488
|
+
roundGeneration = resetGeneration;
|
|
489
|
+
roundConfigGeneration = configGeneration;
|
|
490
|
+
roundResult = BundlePreparationResult.of(BundlePreparationResult.FAILED, "check_failed");
|
|
491
|
+
String configJson = host.getKv(KEY_CONFIG);
|
|
492
|
+
roundConfigJson = configJson;
|
|
493
|
+
|
|
494
|
+
JSONObject event = new JSONObject()
|
|
495
|
+
.put("type", "start")
|
|
496
|
+
.put("config", configJson == null ? "" : configJson)
|
|
497
|
+
.put("resetGeneration", resetGeneration)
|
|
498
|
+
.put("configGeneration", configGeneration)
|
|
499
|
+
.put("sample", Math.random())
|
|
500
|
+
.put("deadline", deadlineNanos != 0 ? engineMillis(deadlineNanos) : 0);
|
|
501
|
+
String state = null;
|
|
502
|
+
boolean marked = false;
|
|
503
|
+
try {
|
|
504
|
+
while (true) {
|
|
505
|
+
event.put("now", engineMillis(host.nanoTime()))
|
|
506
|
+
.put("crashHold", host.crashHold());
|
|
507
|
+
String step = host.stepRound(state, event.toString());
|
|
508
|
+
if (step == null) {
|
|
509
|
+
roundResult = BundlePreparationResult.of(
|
|
510
|
+
BundlePreparationResult.FAILED, "internal_error");
|
|
511
|
+
return;
|
|
512
|
+
}
|
|
513
|
+
JSONObject result = new JSONObject(step);
|
|
514
|
+
state = result.getJSONObject("state").toString();
|
|
515
|
+
JSONArray commands = result.getJSONArray("commands");
|
|
516
|
+
event = new JSONObject();
|
|
517
|
+
for (int i = 0; i < commands.length(); i++) {
|
|
518
|
+
JSONObject command = commands.getJSONObject(i);
|
|
519
|
+
String type = command.getString("type");
|
|
520
|
+
if ("markIncomplete".equals(type)) {
|
|
521
|
+
marked = true;
|
|
522
|
+
try {
|
|
523
|
+
host.setKv(KEY_ROUND_INCOMPLETE, "1");
|
|
524
|
+
} catch (IllegalStateException ignored) {
|
|
525
|
+
}
|
|
526
|
+
} else if ("finish".equals(type)) {
|
|
527
|
+
finishRound(command, resetGeneration);
|
|
528
|
+
return;
|
|
529
|
+
} else {
|
|
530
|
+
event = perform(host, command, configGeneration);
|
|
531
|
+
}
|
|
475
532
|
}
|
|
476
533
|
}
|
|
477
|
-
|
|
478
|
-
//
|
|
479
|
-
//
|
|
480
|
-
//
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
534
|
+
} finally {
|
|
535
|
+
// A committed round already cleared the breadcrumb in its own
|
|
536
|
+
// commit (UpdateContext.commitSyncResult); only rounds that ended
|
|
537
|
+
// without committing need the extra write.
|
|
538
|
+
if (marked) {
|
|
539
|
+
try {
|
|
540
|
+
if (host.getKv(KEY_ROUND_INCOMPLETE) != null) {
|
|
541
|
+
host.removeKv(KEY_ROUND_INCOMPLETE);
|
|
542
|
+
}
|
|
543
|
+
} catch (IllegalStateException ignored) {
|
|
544
|
+
}
|
|
484
545
|
}
|
|
485
|
-
|
|
486
|
-
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
/** Runs one engine command and returns the event that answers it. */
|
|
550
|
+
private static JSONObject perform(RoundHost host, JSONObject command, long configGeneration)
|
|
551
|
+
throws JSONException {
|
|
552
|
+
String type = command.getString("type");
|
|
553
|
+
switch (type) {
|
|
554
|
+
case "collectEnv":
|
|
555
|
+
return new JSONObject()
|
|
556
|
+
.put("type", "env")
|
|
557
|
+
.put("env", host.launchEnv());
|
|
558
|
+
case "http": {
|
|
559
|
+
boolean post = command.optBoolean("post");
|
|
560
|
+
String text = host.httpRequest(
|
|
561
|
+
command.getString("url"),
|
|
562
|
+
post ? command.getString("body") : null,
|
|
563
|
+
(long) command.getDouble("timeoutMs"),
|
|
564
|
+
(long) command.getDouble("callTimeoutMs"));
|
|
565
|
+
JSONObject event = new JSONObject().put("type", "http");
|
|
566
|
+
if (text != null) {
|
|
567
|
+
event.put("text", text).put("at", host.wallSeconds());
|
|
568
|
+
}
|
|
569
|
+
return event;
|
|
487
570
|
}
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
571
|
+
case "checkInstalled":
|
|
572
|
+
return new JSONObject()
|
|
573
|
+
.put("type", "installed")
|
|
574
|
+
.put("installed", host.hasCompletedVersion(command.getString("hash")));
|
|
575
|
+
case "download":
|
|
576
|
+
return download(command, host, host);
|
|
577
|
+
case "commit":
|
|
578
|
+
return commit(host, command, configGeneration);
|
|
579
|
+
default:
|
|
580
|
+
// Unknown to this adapter: the engine finishes the round.
|
|
581
|
+
return new JSONObject().put("type", type);
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
// This launch as the shared core sees it (native_round.h). Absent values
|
|
586
|
+
// (null) are left out.
|
|
587
|
+
private static JSONObject launchEnv(UpdateContext context, String launchRolledBackVersion)
|
|
588
|
+
throws JSONException {
|
|
589
|
+
String currentVersion = context.getCurrentVersion();
|
|
590
|
+
JSONObject env = new JSONObject();
|
|
591
|
+
env.put("packageVersion", context.getPackageVersion());
|
|
592
|
+
// The JS constant's form, so JS can reuse the response cache.
|
|
593
|
+
env.put("currentVersion", currentVersion == null ? JSONObject.NULL : currentVersion);
|
|
594
|
+
env.put("uuid", context.getKv("uuid"));
|
|
595
|
+
// Snapshot captured on the launch path before getConstants consumes
|
|
596
|
+
// the one-shot rollback marker. Reading SharedPreferences here, five
|
|
597
|
+
// seconds later, would lose the guard and could forceBoot the version
|
|
598
|
+
// that this very launch just rolled back.
|
|
599
|
+
env.put("rolledBackVersion", launchRolledBackVersion);
|
|
600
|
+
env.put("buildTime", context.getBuildTime());
|
|
601
|
+
// React Native's Platform.Version is the Android SDK integer; use the
|
|
602
|
+
// same value so this request can be fingerprinted against the JS one.
|
|
603
|
+
env.put("os", "android " + Build.VERSION.SDK_INT);
|
|
604
|
+
env.put("bundleHash", context.computeBundleHash());
|
|
605
|
+
return env;
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
// Version info, the activation and the response cache land in one atomic
|
|
609
|
+
// commit (UpdateContext.commitSyncResult). A config change bumps the
|
|
610
|
+
// reset generation too, so the commit refuses either; the config
|
|
611
|
+
// generation tells the two apart.
|
|
612
|
+
private static JSONObject commit(RoundHost host, JSONObject command, long configGeneration)
|
|
613
|
+
throws JSONException {
|
|
614
|
+
String hash = command.getString("hash");
|
|
615
|
+
String hashInfo = command.getString("hashInfo");
|
|
616
|
+
JSONObject event = new JSONObject().put("type", "committed");
|
|
497
617
|
try {
|
|
498
|
-
committed =
|
|
499
|
-
resetGeneration,
|
|
500
|
-
hash,
|
|
501
|
-
|
|
502
|
-
activate,
|
|
503
|
-
|
|
618
|
+
boolean committed = host.commitSyncResult(
|
|
619
|
+
(long) command.getDouble("resetGeneration"),
|
|
620
|
+
hash.isEmpty() ? null : hash,
|
|
621
|
+
hashInfo.isEmpty() ? null : hashInfo,
|
|
622
|
+
command.getBoolean("activate"),
|
|
623
|
+
command.getString("cache"));
|
|
624
|
+
event.put("ok", committed);
|
|
625
|
+
if (!committed && host.configGeneration() != configGeneration) {
|
|
626
|
+
event.put("reason", "config_changed");
|
|
627
|
+
}
|
|
504
628
|
} catch (Exception e) {
|
|
505
629
|
Log.w(Texts.LOG_TAG, "native sync: commit failed: " + e);
|
|
506
|
-
|
|
630
|
+
event.put("error", true);
|
|
631
|
+
}
|
|
632
|
+
return event;
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
private static void finishRound(JSONObject finish, long resetGeneration) {
|
|
636
|
+
String status = finish.optString("status");
|
|
637
|
+
String reason = finish.optString("reason");
|
|
638
|
+
if (!BundlePreparationResult.DOWNLOADED.equals(status)) {
|
|
639
|
+
Log.i(Texts.LOG_TAG, "native sync: " + status + " (" + reason + ")");
|
|
640
|
+
roundResult = BundlePreparationResult.of(status, reason);
|
|
507
641
|
return;
|
|
508
642
|
}
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
643
|
+
String hash = finish.optString("hash");
|
|
644
|
+
boolean activated = finish.optBoolean("activated");
|
|
645
|
+
if (activated) {
|
|
512
646
|
unactivatedHash = null;
|
|
513
|
-
Log.i(Texts.LOG_TAG,
|
|
514
|
-
"native sync: downloaded " + hash + " and set for next launch");
|
|
647
|
+
Log.i(Texts.LOG_TAG, "native sync: downloaded " + hash + " and set for next launch");
|
|
515
648
|
} else {
|
|
516
649
|
// Remembered so a crash later in this process can still activate
|
|
517
650
|
// it (activatePendingVersion) — JS never will.
|
|
518
651
|
unactivatedGeneration = resetGeneration;
|
|
519
652
|
unactivatedHash = hash;
|
|
520
|
-
Log.i(Texts.LOG_TAG,
|
|
521
|
-
"native sync: downloaded " + hash + ", activation left to JS");
|
|
653
|
+
Log.i(Texts.LOG_TAG, "native sync: downloaded " + hash + ", activation left to JS");
|
|
522
654
|
}
|
|
523
|
-
roundResult =
|
|
524
|
-
? BundlePreparationResult.downloaded(hash, activate)
|
|
525
|
-
: BundlePreparationResult.of(BundlePreparationResult.CANCELLED, "reset");
|
|
526
|
-
}
|
|
527
|
-
|
|
528
|
-
private static String buildResponseCacheJson(
|
|
529
|
-
String configJson,
|
|
530
|
-
String requestBody,
|
|
531
|
-
String responseText,
|
|
532
|
-
long responseAtSeconds
|
|
533
|
-
) throws JSONException {
|
|
534
|
-
JSONObject cacheEntry = new JSONObject();
|
|
535
|
-
cacheEntry.put("ts", responseAtSeconds);
|
|
536
|
-
cacheEntry.put("body", responseText);
|
|
537
|
-
cacheEntry.put("request", requestBody);
|
|
538
|
-
cacheEntry.put("config", configJson);
|
|
539
|
-
return cacheEntry.toString();
|
|
655
|
+
roundResult = BundlePreparationResult.downloaded(hash, activated);
|
|
540
656
|
}
|
|
541
657
|
|
|
542
|
-
private static final OkHttpClient httpClient =
|
|
658
|
+
private static final OkHttpClient httpClient = HttpClients.base().newBuilder()
|
|
543
659
|
.connectTimeout(10, TimeUnit.SECONDS)
|
|
544
660
|
.readTimeout(10, TimeUnit.SECONDS)
|
|
545
661
|
.callTimeout(15, TimeUnit.SECONDS)
|
|
546
662
|
.build();
|
|
547
663
|
|
|
548
|
-
|
|
664
|
+
// The engine's per-request bounds, already capped by the round deadline.
|
|
665
|
+
private static String httpRequest(
|
|
666
|
+
String url, String postBody, long timeoutMs, long callTimeoutMs
|
|
667
|
+
) {
|
|
549
668
|
try {
|
|
550
669
|
Request.Builder builder =
|
|
551
670
|
new Request.Builder().url(url).header("Accept", "application/json");
|
|
@@ -553,25 +672,15 @@ final class SyncCoordinator {
|
|
|
553
672
|
builder.post(RequestBody.create(
|
|
554
673
|
postBody, MediaType.parse("application/json; charset=utf-8")));
|
|
555
674
|
}
|
|
556
|
-
OkHttpClient client = httpClient
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
deadlineNanos - System.nanoTime());
|
|
562
|
-
if (remainingMillis <= 0) {
|
|
563
|
-
return null;
|
|
564
|
-
}
|
|
565
|
-
if (remainingMillis < 15000) {
|
|
566
|
-
client = httpClient.newBuilder()
|
|
567
|
-
.callTimeout(remainingMillis, TimeUnit.MILLISECONDS)
|
|
568
|
-
.build();
|
|
569
|
-
}
|
|
570
|
-
}
|
|
675
|
+
OkHttpClient client = httpClient.newBuilder()
|
|
676
|
+
.connectTimeout(Math.max(1, timeoutMs), TimeUnit.MILLISECONDS)
|
|
677
|
+
.readTimeout(Math.max(1, timeoutMs), TimeUnit.MILLISECONDS)
|
|
678
|
+
.callTimeout(Math.max(1, callTimeoutMs), TimeUnit.MILLISECONDS)
|
|
679
|
+
.build();
|
|
571
680
|
try (Response response = client.newCall(builder.build()).execute()) {
|
|
572
681
|
// Same rule as the artifact download: an https endpoint that
|
|
573
682
|
// redirects to plaintext http is a failed endpoint.
|
|
574
|
-
|
|
683
|
+
HttpClients.rejectProtocolDowngrade(url, response);
|
|
575
684
|
ResponseBody body = response.body();
|
|
576
685
|
if (!response.isSuccessful() || body == null) {
|
|
577
686
|
return null;
|
|
@@ -609,205 +718,70 @@ final class SyncCoordinator {
|
|
|
609
718
|
return source.readString(charset == null ? StandardCharsets.UTF_8 : charset);
|
|
610
719
|
}
|
|
611
720
|
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
721
|
+
/** Queues one download attempt; null when it was rejected up front (the listener was told). */
|
|
722
|
+
interface DownloadStarter {
|
|
723
|
+
@Nullable
|
|
724
|
+
DownloadTaskParams start(
|
|
725
|
+
String strategy, String url, String hash, @Nullable String originHash,
|
|
726
|
+
UpdateContext.DownloadFileListener listener, long deadlineNanos);
|
|
617
727
|
}
|
|
618
728
|
|
|
619
729
|
/**
|
|
620
|
-
*
|
|
621
|
-
*
|
|
622
|
-
* queryUrls discovery merges remote candidates (excluding the
|
|
623
|
-
* already-tried) for one more round. No hedged race on purpose — this
|
|
624
|
-
* path is latency-insensitive.
|
|
730
|
+
* One download attempt the engine asked for, waited on up to its
|
|
731
|
+
* deadline: {"type": "download", ok, code?, timedOut?}.
|
|
625
732
|
*/
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
) {
|
|
629
|
-
JSONArray endpoints = config.optJSONArray("endpoints");
|
|
630
|
-
String orderedJson = FlowBridge.orderEndpointCandidates(
|
|
631
|
-
endpoints == null ? "[]" : endpoints.toString(), Math.random());
|
|
632
|
-
JSONArray ordered;
|
|
633
|
-
try {
|
|
634
|
-
ordered = orderedJson == null ? new JSONArray() : new JSONArray(orderedJson);
|
|
635
|
-
} catch (JSONException e) {
|
|
636
|
-
return null;
|
|
637
|
-
}
|
|
638
|
-
HashSet<String> tried = new HashSet<>();
|
|
639
|
-
int httpAttempts = 0;
|
|
640
|
-
for (int i = 0; i < ordered.length(); i++) {
|
|
641
|
-
String base = HttpUtils.normalizeEndpointBase(ordered.optString(i, ""));
|
|
642
|
-
if (base.isEmpty() || !tried.add(base)) {
|
|
643
|
-
continue;
|
|
644
|
-
}
|
|
645
|
-
if (httpAttempts++ >= MAX_QUERY_HTTP_ATTEMPTS) {
|
|
646
|
-
return null;
|
|
647
|
-
}
|
|
648
|
-
String response = httpRequest(
|
|
649
|
-
base + HttpUtils.QUERY_PATH + appKey, body, deadlineNanos);
|
|
650
|
-
if (isValidResponse(response)) {
|
|
651
|
-
return response;
|
|
652
|
-
}
|
|
653
|
-
}
|
|
654
|
-
JSONArray queryUrls = config.optJSONArray("queryUrls");
|
|
655
|
-
if (queryUrls == null) {
|
|
656
|
-
return null;
|
|
657
|
-
}
|
|
658
|
-
for (int i = 0; i < queryUrls.length(); i++) {
|
|
659
|
-
String listUrl = queryUrls.optString(i, "");
|
|
660
|
-
if (listUrl.isEmpty()) {
|
|
661
|
-
continue;
|
|
662
|
-
}
|
|
663
|
-
if (httpAttempts++ >= MAX_QUERY_HTTP_ATTEMPTS) {
|
|
664
|
-
return null;
|
|
665
|
-
}
|
|
666
|
-
String listText = httpRequest(listUrl, null, deadlineNanos);
|
|
667
|
-
if (listText == null) {
|
|
668
|
-
continue;
|
|
669
|
-
}
|
|
670
|
-
JSONArray remote;
|
|
671
|
-
try {
|
|
672
|
-
remote = new JSONArray(listText);
|
|
673
|
-
} catch (JSONException e) {
|
|
674
|
-
continue;
|
|
675
|
-
}
|
|
676
|
-
for (int j = 0; j < remote.length(); j++) {
|
|
677
|
-
String base = HttpUtils.normalizeEndpointBase(remote.optString(j, ""));
|
|
678
|
-
if (base.isEmpty() || tried.contains(base)) {
|
|
679
|
-
continue;
|
|
680
|
-
}
|
|
681
|
-
if (httpAttempts++ >= MAX_QUERY_HTTP_ATTEMPTS) {
|
|
682
|
-
return null;
|
|
683
|
-
}
|
|
684
|
-
tried.add(base);
|
|
685
|
-
String response = httpRequest(
|
|
686
|
-
base + HttpUtils.QUERY_PATH + appKey, body, deadlineNanos);
|
|
687
|
-
if (isValidResponse(response)) {
|
|
688
|
-
return response;
|
|
689
|
-
}
|
|
690
|
-
}
|
|
691
|
-
// One successfully fetched remote list is enough.
|
|
692
|
-
break;
|
|
693
|
-
}
|
|
694
|
-
return null;
|
|
695
|
-
}
|
|
696
|
-
|
|
697
|
-
private static long capToHoldBudget(long phaseDeadlineNanos, long holdDeadlineNanos) {
|
|
698
|
-
if (holdDeadlineNanos <= 0) {
|
|
699
|
-
return phaseDeadlineNanos;
|
|
700
|
-
}
|
|
701
|
-
return Math.min(phaseDeadlineNanos, holdDeadlineNanos);
|
|
733
|
+
static JSONObject download(JSONObject command, DownloadStarter starter) throws JSONException {
|
|
734
|
+
return download(command, starter, System::nanoTime);
|
|
702
735
|
}
|
|
703
736
|
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
JSONObject attempt = attempts.optJSONObject(i);
|
|
717
|
-
if (attempt == null) {
|
|
718
|
-
continue;
|
|
719
|
-
}
|
|
720
|
-
String type = attempt.optString("type");
|
|
721
|
-
if ("diff".equals(type) && (originHash == null || originHash.isEmpty())) {
|
|
722
|
-
// diff patches from the running version; none is running.
|
|
723
|
-
continue;
|
|
724
|
-
}
|
|
725
|
-
final boolean isFullAttempt = !"diff".equals(type) && !"pdiff".equals(type);
|
|
726
|
-
if (isFullAttempt && fullDeadlineNanos == 0) {
|
|
727
|
-
// Incremental failures must not consume the last-resort full
|
|
728
|
-
// download's budget. Each phase gets one bounded 10min window.
|
|
729
|
-
fullDeadlineNanos = capToHoldBudget(
|
|
730
|
-
System.nanoTime()
|
|
731
|
-
+ TimeUnit.SECONDS.toNanos(DOWNLOAD_PHASE_TIMEOUT_SECONDS),
|
|
732
|
-
holdDeadlineNanos);
|
|
733
|
-
}
|
|
734
|
-
final long deadlineNanos = isFullAttempt
|
|
735
|
-
? fullDeadlineNanos : incrementalDeadlineNanos;
|
|
736
|
-
JSONArray urls = attempt.optJSONArray("urls");
|
|
737
|
-
if (urls == null) {
|
|
738
|
-
continue;
|
|
737
|
+
static JSONObject download(JSONObject command, DownloadStarter starter, Clock clock)
|
|
738
|
+
throws JSONException {
|
|
739
|
+
final String strategy = command.getString("strategy");
|
|
740
|
+
final long deadlineNanos = engineNanos(command.getDouble("deadline"));
|
|
741
|
+
final CountDownLatch latch = new CountDownLatch(1);
|
|
742
|
+
final AtomicBoolean succeeded = new AtomicBoolean(false);
|
|
743
|
+
final AtomicReference<Throwable> failure = new AtomicReference<>();
|
|
744
|
+
UpdateContext.DownloadFileListener listener = new UpdateContext.DownloadFileListener() {
|
|
745
|
+
@Override
|
|
746
|
+
public void onDownloadCompleted(DownloadTaskParams params) {
|
|
747
|
+
succeeded.set(true);
|
|
748
|
+
latch.countDown();
|
|
739
749
|
}
|
|
740
|
-
for (int j = 0; j < urls.length(); j++) {
|
|
741
|
-
String url = urls.optString(j, "");
|
|
742
|
-
if (url.isEmpty()) {
|
|
743
|
-
continue;
|
|
744
|
-
}
|
|
745
|
-
// Check before enqueueing: once the phase budget is gone we
|
|
746
|
-
// must not launch an orphan download that outlives the round.
|
|
747
|
-
long remainingNanos = deadlineNanos - System.nanoTime();
|
|
748
|
-
if (remainingNanos <= 0) {
|
|
749
|
-
if (isFullAttempt) {
|
|
750
|
-
return false;
|
|
751
|
-
}
|
|
752
|
-
break;
|
|
753
|
-
}
|
|
754
|
-
final CountDownLatch latch = new CountDownLatch(1);
|
|
755
|
-
final AtomicBoolean succeeded = new AtomicBoolean(false);
|
|
756
|
-
final String attemptType = type;
|
|
757
|
-
UpdateContext.DownloadFileListener listener =
|
|
758
|
-
new UpdateContext.DownloadFileListener() {
|
|
759
|
-
@Override
|
|
760
|
-
public void onDownloadCompleted(DownloadTaskParams params) {
|
|
761
|
-
succeeded.set(true);
|
|
762
|
-
latch.countDown();
|
|
763
|
-
}
|
|
764
750
|
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
}
|
|
771
|
-
};
|
|
772
|
-
DownloadTaskParams task;
|
|
773
|
-
if ("diff".equals(type)) {
|
|
774
|
-
task = context.downloadPatchFromPpk(
|
|
775
|
-
url, hash, originHash, listener, deadlineNanos);
|
|
776
|
-
} else if ("pdiff".equals(type)) {
|
|
777
|
-
task = context.downloadPatchFromApk(
|
|
778
|
-
url, hash, listener, deadlineNanos);
|
|
779
|
-
} else {
|
|
780
|
-
task = context.downloadFullUpdate(
|
|
781
|
-
url, hash, listener, deadlineNanos);
|
|
782
|
-
}
|
|
783
|
-
try {
|
|
784
|
-
if (!latch.await(remainingNanos, TimeUnit.NANOSECONDS)) {
|
|
785
|
-
Log.w(Texts.LOG_TAG,
|
|
786
|
-
"native sync: download phase timed out during " + type);
|
|
787
|
-
// The task shares one download thread with the next
|
|
788
|
-
// attempt: cancel its transfer (or keep it from
|
|
789
|
-
// starting) instead of queueing behind it
|
|
790
|
-
// (CODE_AUDIT 2.12).
|
|
791
|
-
if (task != null) {
|
|
792
|
-
task.cancel();
|
|
793
|
-
}
|
|
794
|
-
if (isFullAttempt) {
|
|
795
|
-
return false;
|
|
796
|
-
}
|
|
797
|
-
break;
|
|
798
|
-
}
|
|
799
|
-
} catch (InterruptedException e) {
|
|
800
|
-
Thread.currentThread().interrupt();
|
|
801
|
-
if (task != null) {
|
|
802
|
-
task.cancel();
|
|
803
|
-
}
|
|
804
|
-
return false;
|
|
805
|
-
}
|
|
806
|
-
if (succeeded.get()) {
|
|
807
|
-
return true;
|
|
808
|
-
}
|
|
751
|
+
@Override
|
|
752
|
+
public void onDownloadFailed(Throwable error) {
|
|
753
|
+
Log.i(Texts.LOG_TAG, "native sync: " + strategy + " attempt failed: " + error);
|
|
754
|
+
failure.set(error);
|
|
755
|
+
latch.countDown();
|
|
809
756
|
}
|
|
757
|
+
};
|
|
758
|
+
DownloadTaskParams task = starter.start(
|
|
759
|
+
strategy, command.getString("url"), command.getString("hash"),
|
|
760
|
+
command.has("originHash") ? command.getString("originHash") : null,
|
|
761
|
+
listener, deadlineNanos);
|
|
762
|
+
JSONObject event = new JSONObject().put("type", "download");
|
|
763
|
+
boolean settled;
|
|
764
|
+
try {
|
|
765
|
+
settled = latch.await(deadlineNanos - clock.nanoTime(), TimeUnit.NANOSECONDS);
|
|
766
|
+
} catch (InterruptedException e) {
|
|
767
|
+
Thread.currentThread().interrupt();
|
|
768
|
+
settled = false;
|
|
769
|
+
}
|
|
770
|
+
if (!settled) {
|
|
771
|
+
Log.w(Texts.LOG_TAG, "native sync: download phase timed out during " + strategy);
|
|
772
|
+
// The task shares one download thread with the next attempt:
|
|
773
|
+
// cancel its transfer (or keep it from starting) instead of
|
|
774
|
+
// queueing behind it (CODE_AUDIT 2.12).
|
|
775
|
+
if (task != null) {
|
|
776
|
+
task.cancel();
|
|
777
|
+
}
|
|
778
|
+
return event.put("timedOut", true);
|
|
779
|
+
}
|
|
780
|
+
event.put("ok", succeeded.get());
|
|
781
|
+
Throwable error = failure.get();
|
|
782
|
+
if (error != null) {
|
|
783
|
+
event.put("code", ErrorCodes.forDownloadFailure(error));
|
|
810
784
|
}
|
|
811
|
-
return
|
|
785
|
+
return event;
|
|
812
786
|
}
|
|
813
787
|
}
|