├── .gitattributes
├── .github
├── ISSUE_TEMPLATE
│ └── bug_report.md
└── workflows
│ └── android.yml
├── .gitignore
├── .gitmodules
├── LICENSE.md
├── README.md
├── README_CN.md
├── appveyor.yml
├── art
├── README_CN.png
└── README_EN.png
├── build.gradle
├── dalvikdx
├── .gitignore
├── build.gradle
└── src
│ └── main
│ ├── AndroidManifest.xml
│ └── java
│ └── external
│ └── com
│ └── android
│ ├── dex
│ ├── Annotation.java
│ ├── CallSiteId.java
│ ├── ClassData.java
│ ├── ClassDef.java
│ ├── Code.java
│ ├── Dex.java
│ ├── DexException.java
│ ├── DexFormat.java
│ ├── DexIndexOverflowException.java
│ ├── EncodedValue.java
│ ├── EncodedValueCodec.java
│ ├── EncodedValueReader.java
│ ├── FieldId.java
│ ├── Leb128.java
│ ├── MethodHandle.java
│ ├── MethodId.java
│ ├── Mutf8.java
│ ├── ProtoId.java
│ ├── SizeOf.java
│ ├── TableOfContents.java
│ ├── TypeList.java
│ └── util
│ │ ├── ByteArrayByteInput.java
│ │ ├── ByteInput.java
│ │ ├── ByteOutput.java
│ │ ├── ExceptionWithContext.java
│ │ ├── FileUtils.java
│ │ └── Unsigned.java
│ ├── dx
│ ├── Version.java
│ ├── cf
│ │ ├── attrib
│ │ │ ├── AttAnnotationDefault.java
│ │ │ ├── AttBootstrapMethods.java
│ │ │ ├── AttCode.java
│ │ │ ├── AttConstantValue.java
│ │ │ ├── AttDeprecated.java
│ │ │ ├── AttEnclosingMethod.java
│ │ │ ├── AttExceptions.java
│ │ │ ├── AttInnerClasses.java
│ │ │ ├── AttLineNumberTable.java
│ │ │ ├── AttLocalVariableTable.java
│ │ │ ├── AttLocalVariableTypeTable.java
│ │ │ ├── AttRuntimeInvisibleAnnotations.java
│ │ │ ├── AttRuntimeInvisibleParameterAnnotations.java
│ │ │ ├── AttRuntimeVisibleAnnotations.java
│ │ │ ├── AttRuntimeVisibleParameterAnnotations.java
│ │ │ ├── AttSignature.java
│ │ │ ├── AttSourceDebugExtension.java
│ │ │ ├── AttSourceFile.java
│ │ │ ├── AttSynthetic.java
│ │ │ ├── BaseAnnotations.java
│ │ │ ├── BaseAttribute.java
│ │ │ ├── BaseLocalVariables.java
│ │ │ ├── BaseParameterAnnotations.java
│ │ │ ├── InnerClassList.java
│ │ │ ├── RawAttribute.java
│ │ │ └── package.html
│ │ ├── code
│ │ │ ├── BaseMachine.java
│ │ │ ├── BasicBlocker.java
│ │ │ ├── BootstrapMethodArgumentsList.java
│ │ │ ├── BootstrapMethodsList.java
│ │ │ ├── ByteBlock.java
│ │ │ ├── ByteBlockList.java
│ │ │ ├── ByteCatchList.java
│ │ │ ├── ByteOps.java
│ │ │ ├── BytecodeArray.java
│ │ │ ├── ConcreteMethod.java
│ │ │ ├── ExecutionStack.java
│ │ │ ├── Frame.java
│ │ │ ├── LineNumberList.java
│ │ │ ├── LocalVariableList.java
│ │ │ ├── LocalsArray.java
│ │ │ ├── LocalsArraySet.java
│ │ │ ├── Machine.java
│ │ │ ├── Merger.java
│ │ │ ├── OneLocalsArray.java
│ │ │ ├── ReturnAddress.java
│ │ │ ├── Ropper.java
│ │ │ ├── RopperMachine.java
│ │ │ ├── SimException.java
│ │ │ ├── Simulator.java
│ │ │ ├── SwitchList.java
│ │ │ ├── ValueAwareMachine.java
│ │ │ └── package.html
│ │ ├── cst
│ │ │ ├── ConstantPoolParser.java
│ │ │ ├── ConstantTags.java
│ │ │ └── MethodHandleKind.java
│ │ ├── direct
│ │ │ ├── AnnotationParser.java
│ │ │ ├── AttributeFactory.java
│ │ │ ├── AttributeListParser.java
│ │ │ ├── ClassPathOpener.java
│ │ │ ├── CodeObserver.java
│ │ │ ├── DirectClassFile.java
│ │ │ ├── FieldListParser.java
│ │ │ ├── MemberListParser.java
│ │ │ ├── MethodListParser.java
│ │ │ ├── StdAttributeFactory.java
│ │ │ └── package.html
│ │ └── iface
│ │ │ ├── Attribute.java
│ │ │ ├── AttributeList.java
│ │ │ ├── ClassFile.java
│ │ │ ├── Field.java
│ │ │ ├── FieldList.java
│ │ │ ├── HasAttribute.java
│ │ │ ├── Member.java
│ │ │ ├── Method.java
│ │ │ ├── MethodList.java
│ │ │ ├── ParseException.java
│ │ │ ├── ParseObserver.java
│ │ │ ├── StdAttributeList.java
│ │ │ ├── StdField.java
│ │ │ ├── StdFieldList.java
│ │ │ ├── StdMember.java
│ │ │ ├── StdMethod.java
│ │ │ ├── StdMethodList.java
│ │ │ └── package.html
│ ├── command
│ │ ├── Main.java
│ │ ├── UsageException.java
│ │ ├── annotool
│ │ │ ├── AnnotationLister.java
│ │ │ └── Main.java
│ │ ├── dexer
│ │ │ ├── DxContext.java
│ │ │ └── Main.java
│ │ ├── dump
│ │ │ ├── Args.java
│ │ │ ├── BaseDumper.java
│ │ │ ├── BlockDumper.java
│ │ │ ├── ClassDumper.java
│ │ │ ├── DotDumper.java
│ │ │ ├── Main.java
│ │ │ └── SsaDumper.java
│ │ ├── findusages
│ │ │ ├── FindUsages.java
│ │ │ └── Main.java
│ │ └── grep
│ │ │ ├── Grep.java
│ │ │ └── Main.java
│ ├── dex
│ │ ├── DexOptions.java
│ │ ├── cf
│ │ │ ├── AttributeTranslator.java
│ │ │ ├── CfOptions.java
│ │ │ ├── CfTranslator.java
│ │ │ ├── CodeStatistics.java
│ │ │ ├── OptimizerOptions.java
│ │ │ └── package.html
│ │ ├── code
│ │ │ ├── ArrayData.java
│ │ │ ├── BlockAddresses.java
│ │ │ ├── CatchBuilder.java
│ │ │ ├── CatchHandlerList.java
│ │ │ ├── CatchTable.java
│ │ │ ├── CodeAddress.java
│ │ │ ├── CstInsn.java
│ │ │ ├── DalvCode.java
│ │ │ ├── DalvInsn.java
│ │ │ ├── DalvInsnList.java
│ │ │ ├── Dop.java
│ │ │ ├── Dops.java
│ │ │ ├── FixedSizeInsn.java
│ │ │ ├── HighRegisterPrefix.java
│ │ │ ├── InsnFormat.java
│ │ │ ├── LocalList.java
│ │ │ ├── LocalSnapshot.java
│ │ │ ├── LocalStart.java
│ │ │ ├── MultiCstInsn.java
│ │ │ ├── OddSpacer.java
│ │ │ ├── OutputCollector.java
│ │ │ ├── OutputFinisher.java
│ │ │ ├── PositionList.java
│ │ │ ├── RopToDop.java
│ │ │ ├── RopTranslator.java
│ │ │ ├── SimpleInsn.java
│ │ │ ├── StdCatchBuilder.java
│ │ │ ├── SwitchData.java
│ │ │ ├── TargetInsn.java
│ │ │ ├── VariableSizeInsn.java
│ │ │ ├── ZeroSizeInsn.java
│ │ │ └── form
│ │ │ │ ├── Form10t.java
│ │ │ │ ├── Form10x.java
│ │ │ │ ├── Form11n.java
│ │ │ │ ├── Form11x.java
│ │ │ │ ├── Form12x.java
│ │ │ │ ├── Form20t.java
│ │ │ │ ├── Form21c.java
│ │ │ │ ├── Form21h.java
│ │ │ │ ├── Form21s.java
│ │ │ │ ├── Form21t.java
│ │ │ │ ├── Form22b.java
│ │ │ │ ├── Form22c.java
│ │ │ │ ├── Form22s.java
│ │ │ │ ├── Form22t.java
│ │ │ │ ├── Form22x.java
│ │ │ │ ├── Form23x.java
│ │ │ │ ├── Form30t.java
│ │ │ │ ├── Form31c.java
│ │ │ │ ├── Form31i.java
│ │ │ │ ├── Form31t.java
│ │ │ │ ├── Form32x.java
│ │ │ │ ├── Form35c.java
│ │ │ │ ├── Form3rc.java
│ │ │ │ ├── Form45cc.java
│ │ │ │ ├── Form4rcc.java
│ │ │ │ ├── Form51l.java
│ │ │ │ └── SpecialFormat.java
│ │ └── file
│ │ │ ├── AnnotationItem.java
│ │ │ ├── AnnotationSetItem.java
│ │ │ ├── AnnotationSetRefItem.java
│ │ │ ├── AnnotationUtils.java
│ │ │ ├── AnnotationsDirectoryItem.java
│ │ │ ├── CallSiteIdItem.java
│ │ │ ├── CallSiteIdsSection.java
│ │ │ ├── CallSiteItem.java
│ │ │ ├── CatchStructs.java
│ │ │ ├── ClassDataItem.java
│ │ │ ├── ClassDefItem.java
│ │ │ ├── ClassDefsSection.java
│ │ │ ├── CodeItem.java
│ │ │ ├── DebugInfoConstants.java
│ │ │ ├── DebugInfoDecoder.java
│ │ │ ├── DebugInfoEncoder.java
│ │ │ ├── DebugInfoItem.java
│ │ │ ├── DexFile.java
│ │ │ ├── EncodedArrayItem.java
│ │ │ ├── EncodedField.java
│ │ │ ├── EncodedMember.java
│ │ │ ├── EncodedMethod.java
│ │ │ ├── FieldAnnotationStruct.java
│ │ │ ├── FieldIdItem.java
│ │ │ ├── FieldIdsSection.java
│ │ │ ├── HeaderItem.java
│ │ │ ├── HeaderSection.java
│ │ │ ├── IdItem.java
│ │ │ ├── IndexedItem.java
│ │ │ ├── Item.java
│ │ │ ├── ItemType.java
│ │ │ ├── MapItem.java
│ │ │ ├── MemberIdItem.java
│ │ │ ├── MemberIdsSection.java
│ │ │ ├── MethodAnnotationStruct.java
│ │ │ ├── MethodHandleItem.java
│ │ │ ├── MethodHandlesSection.java
│ │ │ ├── MethodIdItem.java
│ │ │ ├── MethodIdsSection.java
│ │ │ ├── MixedItemSection.java
│ │ │ ├── OffsettedItem.java
│ │ │ ├── ParameterAnnotationStruct.java
│ │ │ ├── ProtoIdItem.java
│ │ │ ├── ProtoIdsSection.java
│ │ │ ├── Section.java
│ │ │ ├── Statistics.java
│ │ │ ├── StringDataItem.java
│ │ │ ├── StringIdItem.java
│ │ │ ├── StringIdsSection.java
│ │ │ ├── TypeIdItem.java
│ │ │ ├── TypeIdsSection.java
│ │ │ ├── TypeListItem.java
│ │ │ ├── UniformItemSection.java
│ │ │ ├── UniformListItem.java
│ │ │ └── ValueEncoder.java
│ ├── io
│ │ ├── CodeReader.java
│ │ ├── DexIndexPrinter.java
│ │ ├── IndexType.java
│ │ ├── OpcodeInfo.java
│ │ ├── Opcodes.java
│ │ └── instructions
│ │ │ ├── AddressMap.java
│ │ │ ├── BaseCodeCursor.java
│ │ │ ├── CodeCursor.java
│ │ │ ├── CodeInput.java
│ │ │ ├── CodeOutput.java
│ │ │ ├── DecodedInstruction.java
│ │ │ ├── FillArrayDataPayloadDecodedInstruction.java
│ │ │ ├── FiveRegisterDecodedInstruction.java
│ │ │ ├── FourRegisterDecodedInstruction.java
│ │ │ ├── InstructionCodec.java
│ │ │ ├── InvokePolymorphicDecodedInstruction.java
│ │ │ ├── InvokePolymorphicRangeDecodedInstruction.java
│ │ │ ├── OneRegisterDecodedInstruction.java
│ │ │ ├── PackedSwitchPayloadDecodedInstruction.java
│ │ │ ├── RegisterRangeDecodedInstruction.java
│ │ │ ├── ShortArrayCodeInput.java
│ │ │ ├── ShortArrayCodeOutput.java
│ │ │ ├── SparseSwitchPayloadDecodedInstruction.java
│ │ │ ├── ThreeRegisterDecodedInstruction.java
│ │ │ ├── TwoRegisterDecodedInstruction.java
│ │ │ └── ZeroRegisterDecodedInstruction.java
│ ├── merge
│ │ ├── CollisionPolicy.java
│ │ ├── DexMerger.java
│ │ ├── IndexMap.java
│ │ ├── InstructionTransformer.java
│ │ └── SortableType.java
│ ├── rop
│ │ ├── annotation
│ │ │ ├── Annotation.java
│ │ │ ├── AnnotationVisibility.java
│ │ │ ├── Annotations.java
│ │ │ ├── AnnotationsList.java
│ │ │ └── NameValuePair.java
│ │ ├── code
│ │ │ ├── AccessFlags.java
│ │ │ ├── BasicBlock.java
│ │ │ ├── BasicBlockList.java
│ │ │ ├── ConservativeTranslationAdvice.java
│ │ │ ├── CstInsn.java
│ │ │ ├── DexTranslationAdvice.java
│ │ │ ├── Exceptions.java
│ │ │ ├── FillArrayDataInsn.java
│ │ │ ├── Insn.java
│ │ │ ├── InsnList.java
│ │ │ ├── InvokePolymorphicInsn.java
│ │ │ ├── LocalItem.java
│ │ │ ├── LocalVariableExtractor.java
│ │ │ ├── LocalVariableInfo.java
│ │ │ ├── PlainCstInsn.java
│ │ │ ├── PlainInsn.java
│ │ │ ├── RegOps.java
│ │ │ ├── RegisterSpec.java
│ │ │ ├── RegisterSpecList.java
│ │ │ ├── RegisterSpecSet.java
│ │ │ ├── Rop.java
│ │ │ ├── RopMethod.java
│ │ │ ├── Rops.java
│ │ │ ├── SourcePosition.java
│ │ │ ├── SwitchInsn.java
│ │ │ ├── ThrowingCstInsn.java
│ │ │ ├── ThrowingInsn.java
│ │ │ ├── TranslationAdvice.java
│ │ │ └── package.html
│ │ ├── cst
│ │ │ ├── Constant.java
│ │ │ ├── ConstantPool.java
│ │ │ ├── CstAnnotation.java
│ │ │ ├── CstArray.java
│ │ │ ├── CstBaseMethodRef.java
│ │ │ ├── CstBoolean.java
│ │ │ ├── CstByte.java
│ │ │ ├── CstCallSite.java
│ │ │ ├── CstCallSiteRef.java
│ │ │ ├── CstChar.java
│ │ │ ├── CstDouble.java
│ │ │ ├── CstEnumRef.java
│ │ │ ├── CstFieldRef.java
│ │ │ ├── CstFloat.java
│ │ │ ├── CstInteger.java
│ │ │ ├── CstInterfaceMethodRef.java
│ │ │ ├── CstInvokeDynamic.java
│ │ │ ├── CstKnownNull.java
│ │ │ ├── CstLiteral32.java
│ │ │ ├── CstLiteral64.java
│ │ │ ├── CstLiteralBits.java
│ │ │ ├── CstLong.java
│ │ │ ├── CstMemberRef.java
│ │ │ ├── CstMethodHandle.java
│ │ │ ├── CstMethodRef.java
│ │ │ ├── CstNat.java
│ │ │ ├── CstProtoRef.java
│ │ │ ├── CstShort.java
│ │ │ ├── CstString.java
│ │ │ ├── CstType.java
│ │ │ ├── StdConstantPool.java
│ │ │ ├── TypedConstant.java
│ │ │ ├── Zeroes.java
│ │ │ └── package.html
│ │ ├── package-info.java
│ │ └── type
│ │ │ ├── Prototype.java
│ │ │ ├── StdTypeList.java
│ │ │ ├── Type.java
│ │ │ ├── TypeBearer.java
│ │ │ ├── TypeList.java
│ │ │ └── package.html
│ ├── ssa
│ │ ├── BasicRegisterMapper.java
│ │ ├── ConstCollector.java
│ │ ├── DeadCodeRemover.java
│ │ ├── DomFront.java
│ │ ├── Dominators.java
│ │ ├── EscapeAnalysis.java
│ │ ├── InterferenceRegisterMapper.java
│ │ ├── LiteralOpUpgrader.java
│ │ ├── LocalVariableExtractor.java
│ │ ├── LocalVariableInfo.java
│ │ ├── MoveParamCombiner.java
│ │ ├── NormalSsaInsn.java
│ │ ├── Optimizer.java
│ │ ├── PhiInsn.java
│ │ ├── PhiTypeResolver.java
│ │ ├── RegisterMapper.java
│ │ ├── SCCP.java
│ │ ├── SetFactory.java
│ │ ├── SsaBasicBlock.java
│ │ ├── SsaConverter.java
│ │ ├── SsaInsn.java
│ │ ├── SsaMethod.java
│ │ ├── SsaRenamer.java
│ │ ├── back
│ │ │ ├── FirstFitAllocator.java
│ │ │ ├── FirstFitLocalCombiningAllocator.java
│ │ │ ├── IdenticalBlockCombiner.java
│ │ │ ├── InterferenceGraph.java
│ │ │ ├── LivenessAnalyzer.java
│ │ │ ├── NullRegisterAllocator.java
│ │ │ ├── RegisterAllocator.java
│ │ │ └── SsaToRop.java
│ │ └── package-info.java
│ └── util
│ │ ├── AnnotatedOutput.java
│ │ ├── BitIntSet.java
│ │ ├── Bits.java
│ │ ├── ByteArray.java
│ │ ├── ByteArrayAnnotatedOutput.java
│ │ ├── FixedSizeList.java
│ │ ├── Hex.java
│ │ ├── HexParser.java
│ │ ├── IndentingWriter.java
│ │ ├── IntIterator.java
│ │ ├── IntList.java
│ │ ├── IntSet.java
│ │ ├── LabeledItem.java
│ │ ├── LabeledList.java
│ │ ├── ListIntSet.java
│ │ ├── MutabilityControl.java
│ │ ├── MutabilityException.java
│ │ ├── Output.java
│ │ ├── ToHuman.java
│ │ ├── TwoColumnOutput.java
│ │ ├── Warning.java
│ │ ├── Writers.java
│ │ └── package.html
│ └── multidex
│ ├── ArchivePathElement.java
│ ├── ClassPathElement.java
│ ├── ClassReferenceListBuilder.java
│ ├── FolderPathElement.java
│ ├── MainDexListBuilder.java
│ └── Path.java
├── dexmaker
├── .gitignore
├── build.gradle
└── src
│ └── main
│ ├── AndroidManifest.xml
│ └── java
│ └── external
│ └── com
│ └── android
│ └── dx
│ ├── AnnotationId.java
│ ├── AppDataDirGuesser.java
│ ├── BinaryOp.java
│ ├── Code.java
│ ├── Comparison.java
│ ├── Constants.java
│ ├── DexMaker.java
│ ├── FieldId.java
│ ├── Label.java
│ ├── Local.java
│ ├── MethodId.java
│ ├── TypeId.java
│ ├── TypeList.java
│ ├── UnaryOp.java
│ └── stock
│ └── ProxyBuilder.java
├── edxp-common
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ └── java
│ └── com
│ └── elderdrivers
│ └── riru
│ ├── common
│ ├── KeepAll.java
│ └── KeepMembers.java
│ └── edxp
│ ├── _hooker
│ ├── impl
│ │ ├── HandleBindApp.java
│ │ ├── LoadedApkCstr.java
│ │ ├── LoadedApkGetCL.java
│ │ ├── StartBootstrapServices.java
│ │ └── SystemMain.java
│ └── yahfa
│ │ ├── HandleBindAppHooker.java
│ │ ├── LoadedApkConstructorHooker.java
│ │ ├── StartBootstrapServicesHooker.java
│ │ ├── StartBootstrapServicesHooker11.java
│ │ └── SystemMainHooker.java
│ ├── art
│ ├── ClassLinker.java
│ └── Heap.java
│ ├── config
│ ├── BaseEdxpConfig.java
│ ├── BaseHookProvider.java
│ └── ConfigManager.java
│ ├── core
│ ├── BaseEdxpImpl.java
│ ├── EdxpImpl.java
│ ├── Main.java
│ ├── Proxy.java
│ ├── ResourcesHook.java
│ ├── Yahfa.java
│ └── yahfa
│ │ └── HookMain.java
│ ├── deopt
│ ├── InlinedMethodCallers.java
│ └── PrebuiltMethodsDeopter.java
│ ├── entry
│ └── yahfa
│ │ ├── AppBootstrapHookInfo.java
│ │ ├── SysBootstrapHookInfo.java
│ │ └── SysInnerHookInfo.java
│ ├── framework
│ └── Zygote.java
│ ├── hooker
│ ├── SliceProviderFix.java
│ └── XposedInstallerHooker.java
│ ├── proxy
│ ├── BaseProxy.java
│ ├── BaseRouter.java
│ ├── NormalProxy.java
│ └── Router.java
│ └── util
│ ├── ClassLoaderUtils.java
│ ├── ClassUtils.java
│ ├── DexUtils.java
│ ├── FileUtils.java
│ ├── Hookers.java
│ ├── ProcessUtils.java
│ ├── ProxyClassLoader.java
│ ├── Unsafe.java
│ ├── Utils.java
│ └── Versions.java
├── edxp-core
├── .gitignore
├── build.gradle
├── misc
│ └── EdXposedUninstaller
│ │ ├── EdXposedUninstaller_rec-v3.zip
│ │ └── META-INF
│ │ └── com
│ │ └── google
│ │ └── android
│ │ ├── update-binary
│ │ └── updater-script
├── src
│ └── main
│ │ ├── AndroidManifest.xml
│ │ └── cpp
│ │ ├── CMakeLists.txt
│ │ ├── external
│ │ ├── CMakeLists.txt
│ │ ├── android
│ │ │ ├── CMakeLists.txt
│ │ │ ├── android-base
│ │ │ │ ├── file.cpp
│ │ │ │ ├── file.h
│ │ │ │ ├── logging.cpp
│ │ │ │ ├── logging.h
│ │ │ │ ├── macros.h
│ │ │ │ ├── off64_t.h
│ │ │ │ ├── parseint.h
│ │ │ │ ├── strings.cpp
│ │ │ │ ├── strings.h
│ │ │ │ ├── thread_annotations.h
│ │ │ │ ├── threads.cpp
│ │ │ │ ├── threads.h
│ │ │ │ ├── unique_fd.h
│ │ │ │ └── utf8.h
│ │ │ ├── android
│ │ │ │ └── fdsan.h
│ │ │ ├── art
│ │ │ │ ├── base
│ │ │ │ │ └── macros.h
│ │ │ │ └── runtime
│ │ │ │ │ └── native
│ │ │ │ │ └── native_util.h
│ │ │ └── nativehelper
│ │ │ │ ├── jni_macros.h
│ │ │ │ ├── module_api.h
│ │ │ │ ├── nativehelper_utils.h
│ │ │ │ └── scoped_local_ref.h
│ │ ├── xhook
│ │ │ ├── CMakeLists.txt
│ │ │ ├── include
│ │ │ │ └── xhook.h
│ │ │ └── src
│ │ │ │ ├── queue.h
│ │ │ │ ├── tree.h
│ │ │ │ ├── xh_core.c
│ │ │ │ ├── xh_core.h
│ │ │ │ ├── xh_elf.c
│ │ │ │ ├── xh_elf.h
│ │ │ │ ├── xh_errno.h
│ │ │ │ ├── xh_jni.c
│ │ │ │ ├── xh_log.c
│ │ │ │ ├── xh_log.h
│ │ │ │ ├── xh_util.c
│ │ │ │ ├── xh_util.h
│ │ │ │ ├── xh_version.c
│ │ │ │ ├── xh_version.h
│ │ │ │ ├── xhook.c
│ │ │ │ └── xhook.h
│ │ └── yahfa
│ │ │ ├── CMakeLists.txt
│ │ │ ├── include
│ │ │ ├── HookMain.h
│ │ │ └── trampoline.h
│ │ │ └── src
│ │ │ ├── HookMain.c
│ │ │ ├── common.h
│ │ │ └── trampoline.c
│ │ └── main
│ │ ├── CMakeLists.txt
│ │ ├── include
│ │ ├── ByteOrder.h
│ │ ├── JNIHelper.h
│ │ ├── art
│ │ │ └── runtime
│ │ │ │ ├── art_method.h
│ │ │ │ ├── class_linker.h
│ │ │ │ ├── gc
│ │ │ │ ├── collector
│ │ │ │ │ └── gc_type.h
│ │ │ │ ├── gc_cause.h
│ │ │ │ └── heap.h
│ │ │ │ ├── hidden_api.h
│ │ │ │ ├── instrumentation.h
│ │ │ │ ├── jni_env_ext.h
│ │ │ │ ├── mirror
│ │ │ │ └── class.h
│ │ │ │ ├── reflection.h
│ │ │ │ ├── runtime.h
│ │ │ │ └── thread.h
│ │ ├── base
│ │ │ └── object.h
│ │ ├── config.h
│ │ ├── dl_util.h
│ │ ├── framework
│ │ │ └── androidfw
│ │ │ │ └── ResourceTypes.h
│ │ ├── logging.h
│ │ ├── native_util.h
│ │ └── utils.h
│ │ └── src
│ │ ├── config_manager.cpp
│ │ ├── config_manager.h
│ │ ├── edxp_context.cpp
│ │ ├── edxp_context.h
│ │ ├── jni
│ │ ├── art_class_linker.cpp
│ │ ├── art_class_linker.h
│ │ ├── art_heap.cpp
│ │ ├── art_heap.h
│ │ ├── edxp_config_manager.cpp
│ │ ├── edxp_config_manager.h
│ │ ├── edxp_pending_hooks.cpp
│ │ ├── edxp_pending_hooks.h
│ │ ├── edxp_resources_hook.cpp
│ │ ├── edxp_resources_hook.h
│ │ ├── edxp_yahfa.cpp
│ │ └── edxp_yahfa.h
│ │ ├── main.cpp
│ │ ├── native_hook.cpp
│ │ ├── native_hook.h
│ │ ├── resource_hook.cpp
│ │ ├── resource_hook.h
│ │ ├── riru_hook.cpp
│ │ ├── riru_hook.h
│ │ ├── rirud_socket.cpp
│ │ └── rirud_socket.h
├── template_override
│ ├── EdXposed.apk
│ ├── META-INF
│ │ └── com
│ │ │ └── google
│ │ │ └── android
│ │ │ ├── update-binary
│ │ │ └── updater-script
│ ├── README.md
│ ├── customize.sh
│ ├── post-fs-data.sh
│ ├── sepolicy.rule
│ ├── service.sh
│ ├── system.prop
│ ├── uninstall.sh
│ ├── util_functions.sh
│ ├── verify.sh
│ └── zh_CN.sh
└── tpl
│ └── module.prop.tpl
├── edxp-sandhook
├── .gitignore
├── build.gradle
├── genhookstubs.py
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ └── java
│ └── com
│ ├── elderdrivers
│ └── riru
│ │ └── edxp
│ │ └── sandhook
│ │ ├── config
│ │ ├── SandHookEdxpConfig.java
│ │ └── SandHookProvider.java
│ │ ├── core
│ │ ├── SandHookEdxpImpl.java
│ │ └── SandHookRouter.java
│ │ ├── entry
│ │ ├── AppBootstrapHookInfo.java
│ │ ├── SysBootstrapHookInfo.java
│ │ └── SysInnerHookInfo.java
│ │ └── hooker
│ │ ├── HandleBindAppHooker.java
│ │ ├── LoadedApkConstructorHooker.java
│ │ ├── StartBootstrapServicesHooker.java
│ │ ├── StartBootstrapServicesHooker11.java
│ │ └── SystemMainHooker.java
│ └── swift
│ └── sandhook
│ └── xposedcompat
│ ├── XposedCompat.java
│ ├── hookstub
│ ├── CallOriginCallBack.java
│ ├── HookMethodEntity.java
│ ├── HookStubManager.java
│ ├── MethodHookerStubs32.java
│ └── MethodHookerStubs64.java
│ ├── methodgen
│ ├── ErrorCatch.java
│ ├── HookMaker.java
│ ├── HookerDexMaker.java
│ ├── HookerDexMakerNew.java
│ └── SandHookXposedBridge.java
│ └── utils
│ ├── ApplicationUtils.java
│ ├── DexLog.java
│ └── DexMakerUtils.java
├── edxp-service
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ └── java
│ └── com
│ └── elderdrivers
│ └── riru
│ └── edxp
│ └── service
│ ├── PackageReceiver.java
│ └── ServiceProxy.java
├── edxp-yahfa
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ └── java
│ └── com
│ └── elderdrivers
│ └── riru
│ └── edxp
│ └── yahfa
│ ├── config
│ ├── YahfaEdxpConfig.java
│ └── YahfaHookProvider.java
│ ├── core
│ ├── YahfaEdxpImpl.java
│ └── YahfaRouter.java
│ └── dexmaker
│ ├── DexLog.java
│ ├── DexMakerUtils.java
│ ├── DynamicBridge.java
│ ├── HookerDexMaker.java
│ └── MethodInfo.java
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── hiddenapi-stubs
├── .gitignore
├── build.gradle
└── src
│ └── main
│ ├── AndroidManifest.xml
│ └── java
│ ├── android
│ ├── app
│ │ ├── ActivityThread.java
│ │ ├── ContextImpl.java
│ │ └── LoadedApk.java
│ ├── content
│ │ ├── pm
│ │ │ └── PackageParser.java
│ │ └── res
│ │ │ ├── AssetManager.java
│ │ │ ├── CompatibilityInfo.java
│ │ │ ├── Resources.java
│ │ │ ├── ResourcesImpl.java
│ │ │ └── TypedArray.java
│ └── os
│ │ ├── IServiceManager.java
│ │ ├── SELinux.java
│ │ └── ServiceManager.java
│ ├── com
│ └── android
│ │ └── internal
│ │ ├── os
│ │ ├── RuntimeInit.java
│ │ └── ZygoteInit.java
│ │ └── util
│ │ └── XmlUtils.java
│ ├── dalvik
│ └── system
│ │ └── BaseDexClassLoader.java
│ └── xposed
│ └── dummy
│ ├── XResourcesSuperClass.java
│ └── XTypedArraySuperClass.java
├── sandhook-annotation
├── .gitignore
├── build.gradle
└── src
│ └── main
│ └── java
│ └── com
│ └── swift
│ └── sandhook
│ └── annotation
│ ├── HookClass.java
│ ├── HookMethod.java
│ ├── HookMethodBackup.java
│ ├── HookMode.java
│ ├── HookReflectClass.java
│ ├── MethodParams.java
│ ├── MethodReflectParams.java
│ ├── Param.java
│ ├── SkipParamCheck.java
│ └── ThisObject.java
├── sandhook-hooklib
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── cpp
│ ├── CMakeLists.txt
│ ├── art
│ │ ├── art_classlinker.cpp
│ │ ├── art_compiler_options.cpp
│ │ └── art_method.cpp
│ ├── casts
│ │ ├── cast_art_method.cpp
│ │ └── cast_compiler_options.cpp
│ ├── includes
│ │ ├── arch.h
│ │ ├── arch_base.h
│ │ ├── art_classlinker.h
│ │ ├── art_compiler_options.h
│ │ ├── art_jit.h
│ │ ├── art_method.h
│ │ ├── art_runtime.h
│ │ ├── cast.h
│ │ ├── cast_art_method.h
│ │ ├── cast_compiler_options.h
│ │ ├── dlfcn_nougat.h
│ │ ├── elf_util.h
│ │ ├── hide_api.h
│ │ ├── inst.h
│ │ ├── log.h
│ │ ├── native_hook.h
│ │ ├── never_call.h
│ │ ├── offset.h
│ │ ├── sandhook.h
│ │ ├── trampoline.h
│ │ ├── trampoline_manager.h
│ │ └── utils.h
│ ├── inst
│ │ ├── insts_arm32.cpp
│ │ └── insts_arm64.cpp
│ ├── nativehook
│ │ └── native_hook.cpp
│ ├── sandhook.cpp
│ ├── trampoline
│ │ ├── arch
│ │ │ ├── arm32.S
│ │ │ └── arm64.S
│ │ ├── trampoline.cpp
│ │ └── trampoline_manager.cpp
│ └── utils
│ │ ├── dlfcn_nougat.cpp
│ │ ├── elf_util.cpp
│ │ ├── hide_api.cpp
│ │ ├── lock.h
│ │ ├── offset.cpp
│ │ └── utils.cpp
│ ├── java
│ └── com
│ │ └── swift
│ │ └── sandhook
│ │ ├── ArtMethodSizeTest.java
│ │ ├── ClassNeverCall.java
│ │ ├── HookLog.java
│ │ ├── PendingHookHandler.java
│ │ ├── SandHook.java
│ │ ├── SandHookConfig.java
│ │ ├── SandHookMethodResolver.java
│ │ ├── blacklist
│ │ └── HookBlackList.java
│ │ ├── utils
│ │ ├── ArtDexOptimizer.java
│ │ ├── ClassStatusUtils.java
│ │ ├── FileUtils.java
│ │ ├── ParamWrapper.java
│ │ ├── ReflectionUtils.java
│ │ └── Unsafe.java
│ │ └── wrapper
│ │ ├── HookErrorException.java
│ │ ├── HookWrapper.java
│ │ └── StubMethodsFactory.java
│ └── res
│ └── values
│ └── strings.xml
├── settings.gradle
└── xposed-bridge
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
└── main
├── AndroidManifest.xml
├── apacheCommonsLang
├── LICENSE.txt
├── MODIFICATIONS.txt
├── NOTICE.txt
├── RELEASE-NOTES.txt
└── external
│ └── org
│ └── apache
│ └── commons
│ └── lang3
│ ├── ArrayUtils.java
│ ├── CharSequenceUtils.java
│ ├── CharUtils.java
│ ├── ClassUtils.java
│ ├── JavaVersion.java
│ ├── ObjectUtils.java
│ ├── StringUtils.java
│ ├── SystemUtils.java
│ ├── Validate.java
│ ├── builder
│ ├── Builder.java
│ ├── CompareToBuilder.java
│ ├── EqualsBuilder.java
│ ├── HashCodeBuilder.java
│ ├── IDKey.java
│ ├── ReflectionToStringBuilder.java
│ ├── ToStringBuilder.java
│ ├── ToStringStyle.java
│ └── package.html
│ ├── exception
│ ├── CloneFailedException.java
│ └── package.html
│ ├── mutable
│ ├── Mutable.java
│ ├── MutableInt.java
│ └── package.html
│ ├── overview.html
│ ├── package.html
│ ├── reflect
│ ├── MemberUtils.java
│ ├── MethodUtils.java
│ └── package.html
│ └── tuple
│ ├── ImmutablePair.java
│ ├── Pair.java
│ └── package.html
└── java
├── android
├── app
│ ├── AndroidAppHelper.java
│ └── package-info.java
└── content
│ └── res
│ ├── XModuleResources.java
│ ├── XResForwarder.java
│ ├── XResources.java
│ └── package-info.java
├── com
└── elderdrivers
│ └── riru
│ └── edxp
│ ├── config
│ ├── EdXpConfigGlobal.java
│ └── EdxpConfig.java
│ ├── hook
│ └── HookProvider.java
│ └── util
│ └── MetaDataReader.java
├── de
└── robv
│ └── android
│ └── xposed
│ ├── DexCreator.java
│ ├── IModuleContext.java
│ ├── IXposedHookCmdInit.java
│ ├── IXposedHookInitPackageResources.java
│ ├── IXposedHookLoadPackage.java
│ ├── IXposedHookZygoteInit.java
│ ├── IXposedMod.java
│ ├── MethodHooker.java
│ ├── PendingHooks.java
│ ├── SELinuxHelper.java
│ ├── XC_MethodHook.java
│ ├── XC_MethodReplacement.java
│ ├── XSharedPreferences.java
│ ├── XposedBridge.java
│ ├── XposedHelpers.java
│ ├── XposedInit.java
│ ├── annotation
│ ├── ApiSensitive.java
│ └── Level.java
│ ├── callbacks
│ ├── IXUnhook.java
│ ├── XC_InitPackageResources.java
│ ├── XC_InitZygote.java
│ ├── XC_LayoutInflated.java
│ ├── XC_LoadPackage.java
│ ├── XCallback.java
│ └── package-info.java
│ ├── package-info.java
│ └── services
│ ├── BaseService.java
│ ├── BinderService.java
│ ├── DirectAccessService.java
│ ├── FileResult.java
│ ├── ZygoteService.java
│ └── package-info.java
└── pxb
└── android
├── ResConst.java
├── StringItem.java
├── StringItems.java
├── arsc
├── ArscDumper.java
├── ArscParser.java
├── ArscWriter.java
├── BagValue.java
├── Config.java
├── Pkg.java
├── ResEntry.java
├── ResSpec.java
├── Type.java
└── Value.java
├── axml
├── Axml.java
├── AxmlParser.java
├── AxmlReader.java
├── AxmlVisitor.java
├── AxmlWriter.java
├── DumpAdapter.java
├── NodeVisitor.java
├── Util.java
└── ValueWrapper.java
└── package.html
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Set the default behavior, in case people don't have core.autocrlf set.
2 | * text=auto
3 |
4 | # Declare files that will always have LF line endings on checkout.
5 | META-INF/** text eol=lf
6 | *.prop text eol=lf
7 | *.sh text eol=lf
8 | *.md text eol=lf
9 | update-binary text eol=lf
10 | update-script text eol=lf
11 |
12 | # Denote all files that are truly binary and should not be modified.
13 | *.so binary
14 | *.dex binary
15 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: 错误反馈 / Bug report / 不使用此模板提交会被close / Your issue will be close if not following this template
4 | title: "[BUG] "
5 | labels: bug
6 | assignees: ''
7 | ---
8 |
9 |
16 |
17 | **什么情况/What happened?**
18 |
19 |
23 |
24 | **Xposed模块列表/Xposed Module List**
25 |
26 |
27 | **Magisk模块列表/Magisk Module List**
28 |
29 |
30 | **版本信息/Versions**
31 |
32 | Android:
33 |
34 | Magisk:
35 |
36 | Riru:
37 |
38 | EdXposed:
39 |
40 | **相关日志/Related Logs**
41 |
42 |
46 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | .idea
5 | /.idea/caches/build_file_checksums.ser
6 | /.idea/libraries
7 | /.idea/modules.xml
8 | /.idea/workspace.xml
9 | .DS_Store
10 | /build
11 | /captures
12 | /release
13 | .externalNativeBuild
14 | elf-cleaner.sh
15 |
16 | # vscode
17 | .project
18 | .classpath
19 | .settings/
20 | .vscode/
21 |
22 | dalvikdx/bin/
23 | dexmaker/bin/
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "edxp-core/src/main/cpp/external/Dobby"]
2 | path = edxp-core/src/main/cpp/external/Dobby
3 | url = https://github.com/jmpews/Dobby.git
4 |
--------------------------------------------------------------------------------
/art/README_CN.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElderDrivers/EdXposed/8f2308cdde0a8151a2b4b0151c58b203154a8c6f/art/README_CN.png
--------------------------------------------------------------------------------
/art/README_EN.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElderDrivers/EdXposed/8f2308cdde0a8151a2b4b0151c58b203154a8c6f/art/README_EN.png
--------------------------------------------------------------------------------
/dalvikdx/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | dex
3 |
--------------------------------------------------------------------------------
/dalvikdx/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | repositories {
4 | jcenter()
5 | }
6 |
7 | android {
8 | compileSdkVersion androidCompileSdkVersion.toInteger()
9 | ndkVersion androidCompileNdkVersion
10 | }
11 |
12 | afterEvaluate {
13 | android.applicationVariants.all { variant ->
14 | def variantNameCapped = variant.name.capitalize()
15 | def variantNameLowered = variant.name.toLowerCase()
16 |
17 | task("copyDex${variantNameCapped}", type: Copy) {
18 | dependsOn "assemble${variantNameCapped}"
19 | def dexOutPath = "${buildDir}/intermediates/dex/${variantNameLowered}/mergeDex${variantNameCapped}"
20 | from (dexOutPath){
21 | rename("classes.dex", "eddalvikdx.dex")
22 | }
23 | destinationDir file(templateRootPath + "system/framework/")
24 | outputs.upToDateWhen { false }
25 | }
26 | task("makeJar${variantNameCapped}", type: Jar, dependsOn: "assemble${variantNameCapped}") {
27 | dependsOn "assemble${variantNameCapped}"
28 | from "${buildDir}/intermediates/javac/${variantNameLowered}/classes"
29 | baseName "dalvikdx"
30 | outputs.file(archivePath)
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/dalvikdx/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
Implementation of containers and utilities for all the standard Java 3 | attribute types.
4 | 5 |PACKAGES USED: 6 |
external.com.android.dx.cf.iface
external.com.android.dx.rop.pool
external.com.android.dx.util
Implementation of classes having to do with Java simulation, such as 3 | is needed for verification or stack-to-register conversion.
4 | 5 |PACKAGES USED: 6 |
external.com.android.dx.rop.pool
external.com.android.dx.util
Implementation of cf.iface.*
based on a direct representation
3 | of class files as byte[]
s.
PACKAGES USED: 6 |
external.com.android.dx.cf.attrib
external.com.android.dx.cf.iface
external.com.android.dx.rop.pool
external.com.android.dx.util
Interfaces and base classes for dealing with class files. This package 3 | doesn't have any parsing but does have basic container implementations.
4 | 5 |PACKAGES USED: 6 |
external.com.android.dx.rop.pool
external.com.android.dx.util
Classes for translating Java classfiles into Dalvik classes.
3 | 4 |PACKAGES USED: 5 |
external.com.android.dx.cf.code
external.com.android.dx.cf.direct
external.com.android.dx.cf.iface
external.com.android.dx.dex.code
external.com.android.dx.dex.file
external.com.android.dx.rop.code
external.com.android.dx.rop.cst
external.com.android.dx.util
Classes relating to a register-based opcode system.
3 | 4 |PACKAGES USED: 5 |
external.com.android.dx.util
Interfaces and implementation of things related to the constant pool.
3 | 4 |PACKAGES USED: 5 |
external.com.android.dx.rop.type
external.com.android.dx.util
Implementation of classes that represent types (classes or primitives).
3 | 4 |PACKAGES USED: 5 |
external.com.android.dx.util
Utility classes for class file access/manipulation.
3 | 4 | -------------------------------------------------------------------------------- /dalvikdx/src/main/java/external/com/android/multidex/ClassPathElement.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2013 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package external.com.android.multidex; 18 | 19 | import java.io.IOException; 20 | import java.io.InputStream; 21 | 22 | /** 23 | * An element of the class path in which class files can be found. 24 | */ 25 | interface ClassPathElement { 26 | 27 | char SEPARATOR_CHAR = '/'; 28 | 29 | /** 30 | * Open a "file" from this {@code ClassPathElement}. 31 | * @param path a '/' separated relative path to the wanted file. 32 | * @return an {@code InputStream} ready to read the requested file. 33 | * @throws IOException if the path can not be found or if an error occurred while opening it. 34 | */ 35 | InputStream open(String path) throws IOException; 36 | 37 | void close() throws IOException; 38 | 39 | Iterableequals(Object)
, toString()
,
20 | hashCode()
, and compareTo(Object)
methods.
21 | @see java.lang.Object#equals(Object)
22 | @see java.lang.Object#toString()
23 | @see java.lang.Object#hashCode()
24 | @see java.lang.Comparable#compareTo(Object)
25 | @since 1.0
26 | These classes are not thread-safe.
27 | 28 | 29 | -------------------------------------------------------------------------------- /xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/exception/package.html: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | Provides functionality for Exceptions. 20 |Contains the concept of an exception with context i.e. such an exception 21 | will contain a map with keys and values. This provides an easy way to pass valuable 22 | state information at exception time in useful form to a calling process.
23 |Lastly, {@link org.apache.commons.lang3.exception.ExceptionUtils}
24 | also contains Throwable
manipulation and examination routines.
These classes are not thread-safe.
28 | 29 | 30 | -------------------------------------------------------------------------------- /xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/overview.html: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 |20 | This document is the API specification for the Apache Commons Lang library. 21 |
22 | 23 | 24 | -------------------------------------------------------------------------------- /xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/package.html: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | Provides highly reusable static utility methods, chiefly concerned 20 | with adding value to the {@link java.lang} classes. 21 | @since 1.0 22 |Most of these classes are immutable and thus thread-safe. 23 | However Charset is not currently guaranteed thread-safe under all circumstances.
24 | 25 | 26 | -------------------------------------------------------------------------------- /xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/reflect/package.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 22 |java.lang.reflect
APIs.
26 | @since 3.0
27 | These classes are immutable, and therefore thread-safe.
28 | 29 | 30 | -------------------------------------------------------------------------------- /xposed-bridge/src/main/apacheCommonsLang/external/org/apache/commons/lang3/tuple/package.html: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | Tuple classes, starting with a Pair class in version 3.0. 20 | @since 3.0 21 | 22 | 23 | -------------------------------------------------------------------------------- /xposed-bridge/src/main/java/android/app/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Contains {@link android.app.AndroidAppHelper} with various methods for information about the current app. 3 | */ 4 | package android.app; 5 | -------------------------------------------------------------------------------- /xposed-bridge/src/main/java/android/content/res/XResForwarder.java: -------------------------------------------------------------------------------- 1 | package android.content.res; 2 | 3 | /** 4 | * Instances of this class can be used for {@link XResources#setReplacement(String, String, String, Object)} 5 | * and its variants. They forward the resource request to a different {@link android.content.res.Resources} 6 | * instance with a possibly different ID. 7 | * 8 | *Usually, instances aren't created directly but via {@link XModuleResources#fwd}. 9 | */ 10 | public class XResForwarder { 11 | private final Resources res; 12 | private final int id; 13 | 14 | /** 15 | * Creates a new instance. 16 | * 17 | * @param res The target {@link android.content.res.Resources} instance to forward requests to. 18 | * @param id The target resource ID. 19 | */ 20 | public XResForwarder(Resources res, int id) { 21 | this.res = res; 22 | this.id = id; 23 | } 24 | 25 | /** Returns the target {@link android.content.res.Resources} instance. */ 26 | public Resources getResources() { 27 | return res; 28 | } 29 | 30 | /** Returns the target resource ID. */ 31 | public int getId() { 32 | return id; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /xposed-bridge/src/main/java/android/content/res/package-info.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Contains classes that are required for replacing resources. 3 | */ 4 | package android.content.res; 5 | -------------------------------------------------------------------------------- /xposed-bridge/src/main/java/com/elderdrivers/riru/edxp/config/EdXpConfigGlobal.java: -------------------------------------------------------------------------------- 1 | package com.elderdrivers.riru.edxp.config; 2 | 3 | import com.elderdrivers.riru.edxp.hook.HookProvider; 4 | 5 | public class EdXpConfigGlobal { 6 | 7 | public static volatile EdxpConfig sConfig; 8 | public static volatile HookProvider sHookProvider; 9 | 10 | public static EdxpConfig getConfig() { 11 | if (sConfig == null) { 12 | throw new IllegalArgumentException("sConfig should not be null."); 13 | } 14 | return sConfig; 15 | } 16 | 17 | public static HookProvider getHookProvider() { 18 | if (sHookProvider == null) { 19 | throw new IllegalArgumentException("sHookProvider should not be null."); 20 | } 21 | return sHookProvider; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /xposed-bridge/src/main/java/com/elderdrivers/riru/edxp/config/EdxpConfig.java: -------------------------------------------------------------------------------- 1 | package com.elderdrivers.riru.edxp.config; 2 | 3 | public interface EdxpConfig { 4 | 5 | String getConfigPath(String suffix); 6 | 7 | String getDataPathPrefix(); 8 | 9 | String getInstallerPackageName(); 10 | 11 | String getLibSandHookName(); 12 | 13 | boolean isNoModuleLogEnabled(); 14 | 15 | boolean isResourcesHookEnabled(); 16 | 17 | boolean isSELinuxEnforced(); 18 | 19 | boolean isBlackWhiteListMode(); 20 | 21 | String getModulesList(); 22 | } 23 | -------------------------------------------------------------------------------- /xposed-bridge/src/main/java/com/elderdrivers/riru/edxp/hook/HookProvider.java: -------------------------------------------------------------------------------- 1 | package com.elderdrivers.riru.edxp.hook; 2 | 3 | import java.lang.reflect.Member; 4 | 5 | import de.robv.android.xposed.XposedBridge; 6 | 7 | public interface HookProvider { 8 | 9 | void hookMethod(Member method, XposedBridge.AdditionalHookInfo additionalInfo); 10 | 11 | void unhookMethod(Member method); 12 | 13 | Object invokeOriginalMethod(Member method, long methodId, Object thisObject, Object[] args) throws Throwable; 14 | 15 | Member findMethodNative(Member hookMethod); 16 | 17 | void deoptMethods(String packageName, ClassLoader classLoader); 18 | 19 | long getMethodId(Member member); 20 | 21 | Object findMethodNative(Class clazz, String methodName, String methodSig); 22 | 23 | void deoptMethodNative(Object method); 24 | 25 | boolean initXResourcesNative(); 26 | 27 | boolean removeFinalFlagNative(Class clazz); 28 | 29 | boolean methodHooked(Member target); 30 | 31 | } 32 | -------------------------------------------------------------------------------- /xposed-bridge/src/main/java/de/robv/android/xposed/IModuleContext.java: -------------------------------------------------------------------------------- 1 | package de.robv.android.xposed; 2 | 3 | public interface IModuleContext { 4 | 5 | String getApkPath(); 6 | } 7 | -------------------------------------------------------------------------------- /xposed-bridge/src/main/java/de/robv/android/xposed/IXposedHookCmdInit.java: -------------------------------------------------------------------------------- 1 | package de.robv.android.xposed; 2 | 3 | 4 | /** 5 | * Hook the initialization of Java-based command-line tools (like pm). 6 | * 7 | * @hide Xposed no longer hooks command-line tools, therefore this interface shouldn't be 8 | * implemented anymore. 9 | */ 10 | public interface IXposedHookCmdInit extends IXposedMod { 11 | /** 12 | * Called very early during startup of a command-line tool. 13 | * @param startupParam Details about the module itself and the started process. 14 | * @throws Throwable Everything is caught, but it will prevent further initialization of the module. 15 | */ 16 | void initCmdApp(StartupParam startupParam) throws Throwable; 17 | 18 | /** Data holder for {@link #initCmdApp}. */ 19 | final class StartupParam { 20 | /*package*/ StartupParam() {} 21 | 22 | /** The path to the module's APK. */ 23 | public String modulePath; 24 | 25 | /** The class name of the tools that the hook was invoked for. */ 26 | public String startClassName; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /xposed-bridge/src/main/java/de/robv/android/xposed/IXposedMod.java: -------------------------------------------------------------------------------- 1 | package de.robv.android.xposed; 2 | 3 | /** Marker interface for Xposed modules. Cannot be implemented directly. */ 4 | /* package */ interface IXposedMod {} 5 | -------------------------------------------------------------------------------- /xposed-bridge/src/main/java/de/robv/android/xposed/annotation/ApiSensitive.java: -------------------------------------------------------------------------------- 1 | package de.robv.android.xposed.annotation; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * Annotation that indicates a element is sensitive to Android API level. 10 | *
11 | * Annotated elements' compatibility should be checked when adapting to new Android versions. 12 | */ 13 | @Retention(RetentionPolicy.SOURCE) 14 | @Target({ElementType.METHOD, ElementType.FIELD, ElementType.TYPE}) 15 | public @interface ApiSensitive { 16 | Level value() default Level.HIGH; 17 | } 18 | -------------------------------------------------------------------------------- /xposed-bridge/src/main/java/de/robv/android/xposed/annotation/Level.java: -------------------------------------------------------------------------------- 1 | package de.robv.android.xposed.annotation; 2 | 3 | public enum Level { 4 | LOW, MIDDLE, HIGH; 5 | 6 | private Level() { 7 | 8 | } 9 | } -------------------------------------------------------------------------------- /xposed-bridge/src/main/java/de/robv/android/xposed/callbacks/IXUnhook.java: -------------------------------------------------------------------------------- 1 | package de.robv.android.xposed.callbacks; 2 | 3 | import de.robv.android.xposed.IXposedHookZygoteInit; 4 | 5 | /** 6 | * Interface for objects that can be used to remove callbacks. 7 | * 8 | *
Just like hooking methods etc., unhooking applies only to the current process.
9 | * In other process (or when the app is removed from memory and then restarted), the hook will still
10 | * be active. The Zygote process (see {@link IXposedHookZygoteInit}) is an exception, the hook won't
11 | * be inherited by any future processes forked from it in the future.
12 | *
13 | * @param For historical reasons, {@link de.robv.android.xposed.XC_MethodHook} and
5 | * {@link de.robv.android.xposed.XC_MethodReplacement} are directly in the
6 | * {@code de.robv.android.xposed} package.
7 | */
8 | package de.robv.android.xposed.callbacks;
9 |
10 |
--------------------------------------------------------------------------------
/xposed-bridge/src/main/java/de/robv/android/xposed/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Contains the main classes of the Xposed framework.
3 | */
4 | package de.robv.android.xposed;
5 |
--------------------------------------------------------------------------------
/xposed-bridge/src/main/java/de/robv/android/xposed/services/package-info.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Contains file access services provided by the Xposed framework.
3 | */
4 | package de.robv.android.xposed.services;
5 |
--------------------------------------------------------------------------------
/xposed-bridge/src/main/java/pxb/android/ResConst.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2009-2013 Panxiaobo
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package pxb.android;
17 |
18 | public interface ResConst {
19 | int RES_STRING_POOL_TYPE = 0x0001;
20 | int RES_TABLE_TYPE = 0x0002;
21 | int RES_TABLE_PACKAGE_TYPE = 0x0200;
22 | int RES_TABLE_TYPE_SPEC_TYPE = 0x0202;
23 | int RES_TABLE_TYPE_TYPE = 0x0201;
24 |
25 | int RES_XML_TYPE = 0x0003;
26 | int RES_XML_RESOURCE_MAP_TYPE = 0x0180;
27 | int RES_XML_END_NAMESPACE_TYPE = 0x0101;
28 | int RES_XML_END_ELEMENT_TYPE = 0x0103;
29 | int RES_XML_START_NAMESPACE_TYPE = 0x0100;
30 | int RES_XML_START_ELEMENT_TYPE = 0x0102;
31 | int RES_XML_CDATA_TYPE = 0x0104;
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/xposed-bridge/src/main/java/pxb/android/arsc/Config.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2009-2013 Panxiaobo
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | package pxb.android.arsc;
17 |
18 | import java.util.Map;
19 | import java.util.TreeMap;
20 |
21 | public class Config {
22 | public final int entryCount;
23 | public final byte[] id;
24 | public Map Source code of axml project. Revision 2394d02d86bb - Apr 22, 2014