Tinker源码分析三

Dex文件的合成与分解

一、DexPatchFile类

Dex文件分为这几个区域:

StringData| Integer| ProtoId| FieldId|MethodId|ClassDef|TypeList|AnnotationSetRefList|AnnotationSet|ClassData|Code|DebugInfoItem|Annotation|EncodedValue|AnnotationsDirectory
-----|-----|------|-----|----|-----|-----|-----|-----|-------|-----|-----|-----|------
StringData| Integer| ProtoId| FieldId|MethodId|ClassDef|TypeList|AnnotationSetRefList|AnnotationSet|ClassData|Code|DebugInfoItem|Annotation|EncodedValue|AnnotationsDirectory

public DexPatchApplier(
        InputStream oldDexIn,
        int initDexSize,
        InputStream patchFileIn,
        SmallPatchedDexItemFile extraInfoFile) throws IOException {
    this(
            new Dex(oldDexIn, initDexSize),
            (patchFileIn != null ? new DexPatchFile(patchFileIn) : null), 
           extraInfoFile
    );}

构造成生一个老的Dex文件,一个DexPatchFile文件,一个SmallPatchedDexItemFile文件。

executeAndSaveTo(OutputStream out)分块合成算法,合成后,存储在outputStream里面。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容