gitextract_2owebcte/ ├── .github/ │ └── ISSUE_TEMPLATE.md ├── .gitignore ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── build.gradle ├── checkstyle.xml ├── findbugs-exclude.xml ├── gradle/ │ ├── PublishArtifact.gradle │ ├── WeChatPublish.gradle │ ├── check.gradle │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat ├── pmd-ruleset.xml ├── settings.gradle ├── suppressions.xml ├── third-party/ │ ├── aosp-dexutils/ │ │ ├── .gitignore │ │ ├── NOTICE │ │ ├── build.gradle │ │ ├── gradle.properties │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── tencent/ │ │ └── tinker/ │ │ └── android/ │ │ ├── dex/ │ │ │ ├── Annotation.java │ │ │ ├── AnnotationSet.java │ │ │ ├── AnnotationSetRefList.java │ │ │ ├── AnnotationsDirectory.java │ │ │ ├── CallSiteId.java │ │ │ ├── ClassData.java │ │ │ ├── ClassDef.java │ │ │ ├── Code.java │ │ │ ├── DebugInfoItem.java │ │ │ ├── Dex.java │ │ │ ├── DexException.java │ │ │ ├── DexFormat.java │ │ │ ├── EncodedValue.java │ │ │ ├── EncodedValueCodec.java │ │ │ ├── EncodedValueReader.java │ │ │ ├── FieldId.java │ │ │ ├── Leb128.java │ │ │ ├── MethodHandle.java │ │ │ ├── MethodId.java │ │ │ ├── Mutf8.java │ │ │ ├── ProtoId.java │ │ │ ├── SizeOf.java │ │ │ ├── StringData.java │ │ │ ├── TableOfContents.java │ │ │ ├── TypeList.java │ │ │ ├── io/ │ │ │ │ └── DexDataBuffer.java │ │ │ └── util/ │ │ │ ├── ByteInput.java │ │ │ ├── ByteOutput.java │ │ │ ├── CompareUtils.java │ │ │ ├── FileUtils.java │ │ │ └── HashCodeHelper.java │ │ ├── dx/ │ │ │ ├── instruction/ │ │ │ │ ├── CodeCursor.java │ │ │ │ ├── InstructionCodec.java │ │ │ │ ├── InstructionComparator.java │ │ │ │ ├── InstructionPromoter.java │ │ │ │ ├── InstructionReader.java │ │ │ │ ├── InstructionVisitor.java │ │ │ │ ├── InstructionWriter.java │ │ │ │ ├── Opcodes.java │ │ │ │ ├── ShortArrayCodeInput.java │ │ │ │ └── ShortArrayCodeOutput.java │ │ │ └── util/ │ │ │ └── Hex.java │ │ └── utils/ │ │ ├── SparseBoolArray.java │ │ └── SparseIntArray.java │ ├── bsdiff-util/ │ │ ├── .gitignore │ │ ├── LICENSE.txt │ │ ├── build.gradle │ │ ├── gradle.properties │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── tencent/ │ │ └── tinker/ │ │ └── bsdiff/ │ │ ├── BSDiff.java │ │ ├── BSPatch.java │ │ └── BSUtil.java │ └── tinker-ziputils/ │ ├── .gitignore │ ├── NOTICE.txt │ ├── build.gradle │ ├── gradle.properties │ └── src/ │ └── main/ │ └── java/ │ └── com/ │ └── tencent/ │ └── tinker/ │ └── ziputils/ │ └── ziputil/ │ ├── AlignedZipOutputStream.java │ ├── Arrays.java │ ├── BufferIterator.java │ ├── HeapBufferIterator.java │ ├── Memory.java │ ├── SizeOf.java │ ├── StandardCharsets.java │ ├── Streams.java │ ├── TinkerZipEntry.java │ ├── TinkerZipFile.java │ ├── TinkerZipOutputStream.java │ ├── TinkerZipUtil.java │ └── ZipConstants.java ├── tinker-android/ │ ├── consumer-proguard.txt │ ├── tinker-android-anno/ │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── gradle.properties │ │ └── src/ │ │ ├── main/ │ │ │ └── resources/ │ │ │ ├── META-INF/ │ │ │ │ └── services/ │ │ │ │ └── javax.annotation.processing.Processor │ │ │ └── TinkerAnnoApplication.tmpl │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── tencent/ │ │ └── tinker/ │ │ └── anno/ │ │ └── test/ │ │ └── TestLifeCycle.java │ ├── tinker-android-anno-support/ │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── gradle.properties │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── tencent/ │ │ └── tinker/ │ │ └── anno/ │ │ ├── AnnotationProcessor.java │ │ ├── DefaultLifeCycle.java │ │ └── Keep.java │ ├── tinker-android-lib/ │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── gradle.properties │ │ ├── proguard-rules.pro │ │ └── src/ │ │ ├── androidTest/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── tencent/ │ │ │ └── tinker/ │ │ │ └── lib/ │ │ │ └── patch/ │ │ │ └── ApplicationTest.java │ │ ├── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── aidl/ │ │ │ │ └── com/ │ │ │ │ └── tencent/ │ │ │ │ └── tinker/ │ │ │ │ └── lib/ │ │ │ │ └── IForeService.aidl │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── tencent/ │ │ │ └── tinker/ │ │ │ ├── entry/ │ │ │ │ ├── ApplicationLifeCycle.java │ │ │ │ ├── ApplicationLike.java │ │ │ │ ├── DefaultApplicationLike.java │ │ │ │ └── TinkerApplicationInlineFence.java │ │ │ └── lib/ │ │ │ ├── filepatch/ │ │ │ │ ├── AbstractFilePatch.java │ │ │ │ ├── BsFilePatch.java │ │ │ │ └── FilePatchFactory.java │ │ │ ├── library/ │ │ │ │ └── TinkerLoadLibrary.java │ │ │ ├── listener/ │ │ │ │ ├── DefaultPatchListener.java │ │ │ │ └── PatchListener.java │ │ │ ├── patch/ │ │ │ │ ├── AbstractPatch.java │ │ │ │ ├── ArkHotDiffPatchInternal.java │ │ │ │ ├── BasePatchInternal.java │ │ │ │ ├── DexDiffPatchInternal.java │ │ │ │ ├── ResDiffPatchInternal.java │ │ │ │ ├── SoDiffPatchInternal.java │ │ │ │ └── UpgradePatch.java │ │ │ ├── reporter/ │ │ │ │ ├── DefaultLoadReporter.java │ │ │ │ ├── DefaultPatchReporter.java │ │ │ │ ├── LoadReporter.java │ │ │ │ └── PatchReporter.java │ │ │ ├── service/ │ │ │ │ ├── AbstractResultService.java │ │ │ │ ├── DefaultTinkerResultService.java │ │ │ │ ├── PatchResult.java │ │ │ │ ├── TinkerPatchForeService.java │ │ │ │ └── TinkerPatchService.java │ │ │ ├── tinker/ │ │ │ │ ├── Tinker.java │ │ │ │ ├── TinkerApplicationHelper.java │ │ │ │ ├── TinkerInstaller.java │ │ │ │ └── TinkerLoadResult.java │ │ │ └── util/ │ │ │ ├── TinkerLog.java │ │ │ ├── TinkerServiceInternals.java │ │ │ └── UpgradePatchRetry.java │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── tencent/ │ │ └── tinker/ │ │ └── recover/ │ │ └── ExampleUnitTest.java │ ├── tinker-android-lib-no-op/ │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── gradle.properties │ │ ├── proguard-rules.pro │ │ └── src/ │ │ ├── androidTest/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── tencent/ │ │ │ └── tinker/ │ │ │ └── lib/ │ │ │ └── patch/ │ │ │ └── ApplicationTest.java │ │ ├── main/ │ │ │ ├── AndroidManifest.xml │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── tencent/ │ │ │ └── tinker/ │ │ │ └── lib/ │ │ │ ├── library/ │ │ │ │ └── TinkerLoadLibrary.java │ │ │ ├── listener/ │ │ │ │ ├── DefaultPatchListener.java │ │ │ │ └── PatchListener.java │ │ │ ├── patch/ │ │ │ │ ├── AbstractPatch.java │ │ │ │ └── UpgradePatch.java │ │ │ ├── reporter/ │ │ │ │ ├── DefaultLoadReporter.java │ │ │ │ ├── DefaultPatchReporter.java │ │ │ │ ├── LoadReporter.java │ │ │ │ └── PatchReporter.java │ │ │ ├── service/ │ │ │ │ ├── AbstractResultService.java │ │ │ │ ├── DefaultTinkerResultService.java │ │ │ │ └── PatchResult.java │ │ │ ├── tinker/ │ │ │ │ ├── Tinker.java │ │ │ │ ├── TinkerApplicationHelper.java │ │ │ │ ├── TinkerInstaller.java │ │ │ │ └── TinkerLoadResult.java │ │ │ └── util/ │ │ │ ├── TinkerLog.java │ │ │ ├── TinkerServiceInternals.java │ │ │ └── UpgradePatchRetry.java │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── tencent/ │ │ └── tinker/ │ │ └── recover/ │ │ └── ExampleUnitTest.java │ ├── tinker-android-loader/ │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── gradle.properties │ │ ├── proguard-rules.pro │ │ ├── src/ │ │ │ ├── androidTest/ │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── tencent/ │ │ │ │ └── tinker/ │ │ │ │ └── loader/ │ │ │ │ └── ApplicationTest.java │ │ │ ├── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── tencent/ │ │ │ │ └── tinker/ │ │ │ │ └── loader/ │ │ │ │ ├── AbstractTinkerLoader.java │ │ │ │ ├── AppInfoChangedBlocker.java │ │ │ │ ├── NewClassLoaderInjector.java │ │ │ │ ├── SystemClassLoaderAdder.java │ │ │ │ ├── TinkerArkHotLoader.java │ │ │ │ ├── TinkerClassLoader.java │ │ │ │ ├── TinkerDexLoader.java │ │ │ │ ├── TinkerDexOptimizer.java │ │ │ │ ├── TinkerLoader.java │ │ │ │ ├── TinkerResourceLoader.java │ │ │ │ ├── TinkerResourcePatcher.java │ │ │ │ ├── TinkerResourcesKey.java │ │ │ │ ├── TinkerRuntimeException.java │ │ │ │ ├── TinkerSoLoader.java │ │ │ │ ├── TinkerTestDexLoad.java │ │ │ │ ├── TinkerUncaughtHandler.java │ │ │ │ ├── app/ │ │ │ │ │ ├── TinkerApplication.java │ │ │ │ │ └── TinkerInlineFenceAction.java │ │ │ │ ├── hotplug/ │ │ │ │ │ ├── ActivityStubManager.java │ │ │ │ │ ├── ActivityStubs.java │ │ │ │ │ ├── ComponentHotplug.java │ │ │ │ │ ├── EnvConsts.java │ │ │ │ │ ├── IncrementComponentManager.java │ │ │ │ │ ├── UnsupportedEnvironmentException.java │ │ │ │ │ ├── handler/ │ │ │ │ │ │ ├── AMSInterceptHandler.java │ │ │ │ │ │ ├── MHMessageHandler.java │ │ │ │ │ │ └── PMSInterceptHandler.java │ │ │ │ │ └── interceptor/ │ │ │ │ │ ├── HandlerMessageInterceptor.java │ │ │ │ │ ├── InterceptFailedException.java │ │ │ │ │ ├── Interceptor.java │ │ │ │ │ ├── ServiceBinderInterceptor.java │ │ │ │ │ └── TinkerHackInstrumentation.java │ │ │ │ └── shareutil/ │ │ │ │ ├── Guard.java │ │ │ │ ├── ShareArkHotDiffPatchInfo.java │ │ │ │ ├── ShareBsDiffPatchInfo.java │ │ │ │ ├── ShareConstants.java │ │ │ │ ├── ShareDexDiffPatchInfo.java │ │ │ │ ├── ShareElfFile.java │ │ │ │ ├── ShareFileLockHelper.java │ │ │ │ ├── ShareIntentUtil.java │ │ │ │ ├── ShareOatUtil.java │ │ │ │ ├── SharePatchFileUtil.java │ │ │ │ ├── SharePatchInfo.java │ │ │ │ ├── ShareReflectUtil.java │ │ │ │ ├── ShareResPatchInfo.java │ │ │ │ ├── ShareSecurityCheck.java │ │ │ │ ├── ShareTinkerInternals.java │ │ │ │ ├── ShareTinkerLog.java │ │ │ │ └── TinkerLogInlineFence.java │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── tencent/ │ │ │ └── tinker/ │ │ │ └── loader/ │ │ │ ├── ExampleUnitTest.java │ │ │ └── shareutil/ │ │ │ └── GuardTest.java │ │ └── stubs/ │ │ └── sysapi-access-stub.jar │ └── tinker-android-loader-no-op/ │ ├── .gitignore │ ├── build.gradle │ ├── gradle.properties │ ├── proguard-rules.pro │ └── src/ │ ├── androidTest/ │ │ └── java/ │ │ └── com/ │ │ └── tencent/ │ │ └── tinker/ │ │ └── loader/ │ │ └── ApplicationTest.java │ ├── main/ │ │ ├── AndroidManifest.xml │ │ └── java/ │ │ └── com/ │ │ └── tencent/ │ │ └── tinker/ │ │ ├── entry/ │ │ │ ├── ApplicationLifeCycle.java │ │ │ ├── ApplicationLike.java │ │ │ └── DefaultApplicationLike.java │ │ └── loader/ │ │ ├── TinkerRuntimeException.java │ │ ├── app/ │ │ │ └── TinkerApplication.java │ │ └── shareutil/ │ │ ├── ShareArkHotDiffPatchInfo.java │ │ ├── ShareBsDiffPatchInfo.java │ │ ├── ShareConstants.java │ │ ├── ShareDexDiffPatchInfo.java │ │ ├── ShareElfFile.java │ │ ├── ShareFileLockHelper.java │ │ ├── ShareIntentUtil.java │ │ ├── ShareOatUtil.java │ │ ├── SharePatchFileUtil.java │ │ ├── SharePatchInfo.java │ │ ├── ShareReflectUtil.java │ │ ├── ShareResPatchInfo.java │ │ ├── ShareSecurityCheck.java │ │ ├── ShareTinkerInternals.java │ │ ├── ShareTinkerLog.java │ │ └── TinkerLogInlineFence.java │ └── test/ │ └── java/ │ └── com/ │ └── tencent/ │ └── tinker/ │ └── loader/ │ └── ExampleUnitTest.java ├── tinker-build/ │ ├── tinker-patch-cli/ │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── tencent/ │ │ │ └── tinker/ │ │ │ └── patch/ │ │ │ ├── CliMain.java │ │ │ └── Test.java │ │ ├── tool_maple/ │ │ │ ├── DexCmp.jar │ │ │ └── build_patch_dexdiff.sh │ │ └── tool_output/ │ │ ├── merge_mapping.py │ │ ├── proguard_warning.py │ │ ├── release.keystore │ │ ├── tinker_config.xml │ │ ├── tinker_multidexkeep.pro │ │ └── tinker_proguard.pro │ ├── tinker-patch-gradle-plugin/ │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── gradle.properties │ │ └── src/ │ │ └── main/ │ │ ├── groovy/ │ │ │ └── com/ │ │ │ └── tencent/ │ │ │ └── tinker/ │ │ │ └── build/ │ │ │ └── gradle/ │ │ │ ├── Compatibilities.groovy │ │ │ ├── TinkerPatchPlugin.groovy │ │ │ ├── common/ │ │ │ │ └── TinkerBuildPath.groovy │ │ │ ├── extension/ │ │ │ │ ├── TinkerArkHotExtension.groovy │ │ │ │ ├── TinkerBuildConfigExtension.groovy │ │ │ │ ├── TinkerDexExtension.groovy │ │ │ │ ├── TinkerLibExtension.groovy │ │ │ │ ├── TinkerPackageConfigExtension.groovy │ │ │ │ ├── TinkerPatchExtension.groovy │ │ │ │ ├── TinkerResourceExtension.groovy │ │ │ │ └── TinkerSevenZipExtension.groovy │ │ │ ├── task/ │ │ │ │ ├── TinkerManifestAction.groovy │ │ │ │ ├── TinkerMultidexConfigTask.groovy │ │ │ │ ├── TinkerPatchSchemaTask.groovy │ │ │ │ ├── TinkerProguardConfigAction.groovy │ │ │ │ └── TinkerResourceIdTask.groovy │ │ │ └── transform/ │ │ │ └── ImmutableDexTransform.groovy │ │ └── resources/ │ │ └── META-INF/ │ │ └── gradle-plugins/ │ │ └── com.tencent.tinker.patch.properties │ └── tinker-patch-lib/ │ ├── .gitignore │ ├── build.gradle │ ├── gradle.properties │ └── src/ │ └── main/ │ ├── java/ │ │ ├── com/ │ │ │ └── tencent/ │ │ │ └── tinker/ │ │ │ └── build/ │ │ │ ├── aapt/ │ │ │ │ ├── AaptResourceCollector.java │ │ │ │ ├── AaptUtil.java │ │ │ │ ├── Constant.java │ │ │ │ ├── FakeRDotTxtEntry.java │ │ │ │ ├── FileCopyException.java │ │ │ │ ├── FileUtil.java │ │ │ │ ├── Generator.java │ │ │ │ ├── JavaXmlUtil.java │ │ │ │ ├── ObjectUtil.java │ │ │ │ ├── PatchUtil.java │ │ │ │ ├── RDotTxtEntry.java │ │ │ │ ├── ResourceDirectory.java │ │ │ │ ├── ResourceEntry.java │ │ │ │ └── StringUtil.java │ │ │ ├── apkparser/ │ │ │ │ └── AndroidParser.java │ │ │ ├── builder/ │ │ │ │ └── PatchBuilder.java │ │ │ ├── decoder/ │ │ │ │ ├── ApkDecoder.java │ │ │ │ ├── ArkHotDecoder.java │ │ │ │ ├── BaseDecoder.java │ │ │ │ ├── DexDiffDecoder.java │ │ │ │ ├── ManifestDecoder.java │ │ │ │ ├── ResDiffDecoder.java │ │ │ │ ├── SoDiffDecoder.java │ │ │ │ └── UniqueDexDiffDecoder.java │ │ │ ├── dexpatcher/ │ │ │ │ ├── DexPatchGenerator.java │ │ │ │ ├── algorithms/ │ │ │ │ │ └── diff/ │ │ │ │ │ ├── AnnotationSectionDiffAlgorithm.java │ │ │ │ │ ├── AnnotationSetRefListSectionDiffAlgorithm.java │ │ │ │ │ ├── AnnotationSetSectionDiffAlgorithm.java │ │ │ │ │ ├── AnnotationsDirectorySectionDiffAlgorithm.java │ │ │ │ │ ├── CallSiteIdSectionDiffAlgorithm.java │ │ │ │ │ ├── ClassDataSectionDiffAlgorithm.java │ │ │ │ │ ├── ClassDefSectionDiffAlgorithm.java │ │ │ │ │ ├── CodeSectionDiffAlgorithm.java │ │ │ │ │ ├── DebugInfoItemSectionDiffAlgorithm.java │ │ │ │ │ ├── DexSectionDiffAlgorithm.java │ │ │ │ │ ├── FieldIdSectionDiffAlgorithm.java │ │ │ │ │ ├── MethodHandleSectionDiffAlgorithm.java │ │ │ │ │ ├── MethodIdSectionDiffAlgorithm.java │ │ │ │ │ ├── ProtoIdSectionDiffAlgorithm.java │ │ │ │ │ ├── StaticValueSectionDiffAlgorithm.java │ │ │ │ │ ├── StringDataSectionDiffAlgorithm.java │ │ │ │ │ ├── TypeIdSectionDiffAlgorithm.java │ │ │ │ │ └── TypeListSectionDiffAlgorithm.java │ │ │ │ └── util/ │ │ │ │ ├── ChangedClassesDexClassInfoCollector.java │ │ │ │ └── PatternUtils.java │ │ │ ├── immutable/ │ │ │ │ ├── ClassSimDef.java │ │ │ │ └── DexRefData.java │ │ │ ├── info/ │ │ │ │ ├── InfoWriter.java │ │ │ │ ├── PatchInfo.java │ │ │ │ └── PatchInfoGen.java │ │ │ ├── patch/ │ │ │ │ ├── Configuration.java │ │ │ │ ├── InputParam.java │ │ │ │ └── Runner.java │ │ │ └── util/ │ │ │ ├── CustomDiff.java │ │ │ ├── DexClassesComparator.java │ │ │ ├── DiffFactory.java │ │ │ ├── ExcludedClassModifiedChecker.java │ │ │ ├── FileOperation.java │ │ │ ├── Logger.java │ │ │ ├── MD5.java │ │ │ ├── TinkerPatchException.java │ │ │ ├── TypedValue.java │ │ │ └── Utils.java │ │ └── org/ │ │ └── jf/ │ │ └── dexlib2/ │ │ └── builder/ │ │ └── BuilderMutableMethodImplementation.java │ └── resources/ │ ├── only_use_to_test_tinker_resource.txt │ └── test.dex ├── tinker-commons/ │ ├── .gitignore │ ├── NOTICE.txt │ ├── build.gradle │ ├── gradle.properties │ └── src/ │ └── main/ │ └── java/ │ └── com/ │ └── tencent/ │ └── tinker/ │ └── commons/ │ ├── dexpatcher/ │ │ ├── DexPatchApplier.java │ │ ├── DexPatcherLogger.java │ │ ├── algorithms/ │ │ │ └── patch/ │ │ │ ├── AnnotationSectionPatchAlgorithm.java │ │ │ ├── AnnotationSetRefListSectionPatchAlgorithm.java │ │ │ ├── AnnotationSetSectionPatchAlgorithm.java │ │ │ ├── AnnotationsDirectorySectionPatchAlgorithm.java │ │ │ ├── CallSiteIdSectionPatchAlgorithm.java │ │ │ ├── ClassDataSectionPatchAlgorithm.java │ │ │ ├── ClassDefSectionPatchAlgorithm.java │ │ │ ├── CodeSectionPatchAlgorithm.java │ │ │ ├── DebugInfoItemSectionPatchAlgorithm.java │ │ │ ├── DexSectionPatchAlgorithm.java │ │ │ ├── FieldIdSectionPatchAlgorithm.java │ │ │ ├── MethodHandleSectionPatchAlgorithm.java │ │ │ ├── MethodIdSectionPatchAlgorithm.java │ │ │ ├── ProtoIdSectionPatchAlgorithm.java │ │ │ ├── StaticValueSectionPatchAlgorithm.java │ │ │ ├── StringDataSectionPatchAlgorithm.java │ │ │ ├── TypeIdSectionPatchAlgorithm.java │ │ │ └── TypeListSectionPatchAlgorithm.java │ │ ├── struct/ │ │ │ ├── DexPatchFile.java │ │ │ └── PatchOperation.java │ │ └── util/ │ │ ├── AbstractIndexMap.java │ │ ├── InstructionTransformer.java │ │ └── SparseIndexMap.java │ └── util/ │ ├── DigestUtil.java │ └── IOHelper.java └── tinker-sample-android/ ├── .gitignore ├── app/ │ ├── .gitignore │ ├── build.gradle │ ├── keystore/ │ │ ├── debug.keystore │ │ └── release.keystore │ ├── proguard-rules.pro │ ├── src/ │ │ ├── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── java/ │ │ │ │ └── tinker/ │ │ │ │ └── sample/ │ │ │ │ └── android/ │ │ │ │ ├── Log/ │ │ │ │ │ └── MyLogImp.java │ │ │ │ ├── app/ │ │ │ │ │ ├── BaseBuildInfo.java │ │ │ │ │ ├── BuildInfo.java │ │ │ │ │ ├── MainActivity.java │ │ │ │ │ └── SampleApplicationLike.java │ │ │ │ ├── crash/ │ │ │ │ │ └── SampleUncaughtExceptionHandler.java │ │ │ │ ├── reporter/ │ │ │ │ │ ├── SampleLoadReporter.java │ │ │ │ │ ├── SamplePatchListener.java │ │ │ │ │ ├── SamplePatchReporter.java │ │ │ │ │ └── SampleTinkerReport.java │ │ │ │ ├── service/ │ │ │ │ │ └── SampleResultService.java │ │ │ │ └── util/ │ │ │ │ ├── SampleApplicationContext.java │ │ │ │ ├── TinkerManager.java │ │ │ │ └── Utils.java │ │ │ └── res/ │ │ │ ├── layout/ │ │ │ │ └── activity_main.xml │ │ │ ├── values/ │ │ │ │ ├── colors.xml │ │ │ │ ├── dimens.xml │ │ │ │ ├── strings.xml │ │ │ │ └── styles.xml │ │ │ └── values-w820dp/ │ │ │ └── dimens.xml │ │ └── test/ │ │ └── java/ │ │ └── tinker/ │ │ └── sample/ │ │ └── android/ │ │ └── ExampleUnitTest.java │ └── tinker_multidexkeep.pro ├── build.gradle ├── gradle/ │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat ├── settings.gradle └── updateTinkerLib.sh