SDK打包工具的实现——参考U8SDK

感谢U8SDK文章的帮助!

源码合并部分

1.结构说明

  1. SDKTool包(生成SDKTool.jar包)

    SDK的通用框架, 定义了SDK的接口,通过工厂创建SDK的实例

    • SDKPlugin —— 业务层(包含Unity)访问SDK的唯一入口, 通过调用对应的SDKProxy实现相关操作。
    • SDKFactory —— 实例化SDK的工厂,通过读取assets目录下的sdk_config.xml文件,配置对应的sdk信息,在需要实例化SDK时,读取这些配置信息,构造对应的SDK实例。
    • IxxxSDK —— 某一种功能的SDK的通用接口,定义了这种SDK所拥有的功能方法。
    • xxxSDK —— 某一种功能的SDK的代理, 代理通过SDKFactory构造真正的IxxxSDK的实例对象, SDKPlugin与代理直接交互,代理再调用对应的IxxxSDK的实例对象的方法。
  2. 母包(引用SDKTool.jar包, 生成apk)

    • 母包的业务层(包括Unity部分)通过调用SDKPlugin的方法,实现对应的功能
    • 母包中包含sdk_config.xml配置文档,但此时配置文档应该是空的,等待与SDK包的合并后添加内容
  3. SDK包(引用SDKTool.jar包, 生成xxxSDK.jar)

    • xxxSDK —— 实现了IxxxSDK中定义的方法

2. 合并步骤:

1).对母包进行解包操作(apktool), 得到包含解包后的内容的文件夹outputDir

2).对xxxSDK.jar进行解包操作(使用dex2jar的d2j-jar2dex将jar转成dex文件 使用baksmali将dex转成smali文件)

3).对xxxSDK的libs中所需要的jar文件进行类似第二步的操作, 得到多个存放smali文件的文件夹。将xxxSDK的libs中的so文件按照其目录结构复制到母包outputDir的libs中

4).将生成的smali文件按其目录结构复制到母包outputDir的smali文件夹内

5).根据xxxSDK的配置文件配置母包outputDir/assets/sdk_config.xml文件

6).合并AndroidManifest

7).拷贝xxxSDK的assets、res两个文件夹内的内容到母包对应文件夹中

8).重复2-7操作直到所有sdk合并完成

9).重新打包(apktool)

你可能感兴趣的:(实习笔记)