Android TransForm开发

Android官方提供给开发者在项目构建阶段即由class到dex转换期间修改class文件的一套api。Gradle在自身编译打包过程中也是使用该工具实现。

实现步骤:
1、创建自定义Gradle插件,可参考博客:https://blog.youkuaiyun.com/u010082177/article/details/87877535
2、在groovy路径下创建plugin类,需继承Plugin并重写apply方法,该类的apply方法就是自定义Gradle插件的启动入口
如下图中第10行创建自定义插件类,需继承Plugin。第23行注册自定义TransForm类,此处是RegisterTransForm类。

3、创建自定义transform类,需继承Transform,并重写如下方法
getName方法:
在编译后会在app/build/intermediates/transforms/ 目录下生成以该名字命名的文件夹,该文件夹下存放transform处理之后的class
getInputTypes方法:
告诉transform需要扫描的类型
getScopes方法:
告诉transform需要扫描的范围
isIncremental方法:
告诉transform是否支持增量编译
transform方法:
根据以上重写方法的指定条件真正扫描工程class文件的方法。其中主要的2个参数:
Collection inputs参数:
输入流参数,根据该参数可以获取输入流的路径、jar包及其内在的class文件
TransformOutputProvider outputProvider参数:
输出流参数,根据该参数可以获取输出流路径,把经过改造后的class文件拷贝到该路径,最终打包完成的apk将执行你该路径下的class文件。关于如何修改class文件可参考博客:https://blog.youkuaiyun.com/u010082177/article/details/87877612
如下图中51行、60行分别遍历输入流的jar包和class文件路径,第55、62行分别获取输出流的路径。此处无论是否需要修改class文件都必须把输入流文件拷贝到输出流文件路径,否则在打dex包时缺失文件报错
GitHub参考Demon:https://github.com/wxb871127/RegisterApp.git

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值