Android Gradle8.0 Transform 废弃,手撸Arouter插件教你适配
2023-06-21 09:10:01
Android Gradle 8.0 弃用 Transform:Arouter 插件的适配指南
Android Gradle 8.0 中的 Transform 弃用
随着 Android Gradle 8.0 的发布,Transform API 已被弃用,这对依赖 Transform 进行增强编译的插件产生了重大影响。
Arouter 插件的受影响
Arouter,一个广受欢迎的 Android 路由框架,利用 Transform API 生成路由表。因此,Arouter 插件也受到了 Android Gradle 8.0 的影响。
适配 Android Gradle 8.0
要与 Android Gradle 8.0 兼容,需要手动实现 Arouter 插件。这可以通过遵循以下步骤完成:
1. 创建 Gradle 插件项目
在 Android Studio 中创建新的 Gradle 插件项目。
2. 添加依赖
在插件的 build.gradle 文件中,添加以下依赖:
dependencies {
implementation 'com.android.tools.build:gradle:8.0.0'
}
3. 实现插件类
在插件的 src/main/groovy 文件夹中,创建一个继承自 com.android.build.api.transform.Transform
类的插件类。
class ArouterTransform extends Transform {
@Override
void transform(TransformInvocation transformInvocation) {
// TODO: Implement the transform logic here
}
@Override
Collection<File> getSecondaryInputs() {
return Collections.emptyList()
}
@Override
Collection<File> getSecondaryFileOutputs() {
return Collections.emptyList()
}
@Override
Map<String, Set<ContentType>> getOutputTypes() {
return Collections.singletonMap(ContentType.CLASSES, ImmutableSet.of(ContentType.CLASSES))
}
@Override
Scope getScope() {
return Scope.PROJECT
}
@Override
boolean isIncremental() {
return false
}
}
4. 实现 transform 方法
在插件的 transform 方法中,需要实现路由表的生成逻辑,具体实现可以参考官方文档的示例。
5. 注册插件
在插件的 build.gradle 文件中,注册插件:
apply plugin: 'com.android.library'
android {
compileSdkVersion 32
defaultConfig {
minSdkVersion 21
targetSdkVersion 32
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation 'com.alibaba:arouter-api:1.5.2'
annotationProcessor 'com.alibaba:arouter-compiler:1.5.2'
}
6. 构建插件
在 Android Studio 中构建插件。
7. 使用插件
在你的 Android 项目中,应用插件:
apply plugin: 'com.yourcompany.arouter'
常见问题解答
1. 为什么 Transform API 被弃用?
Transform API 被弃用,以便为一个更强大且灵活的转换系统铺平道路。
2. 是否有其他替代 Transform 的方式?
是的,可以使用新的 Java 字节码转换 API 替代 Transform。
3. Arouter 插件的兼容性如何?
手动实现的 Arouter 插件与 Android Gradle 8.0 完全兼容。
4. 转换过程中的性能影响是什么?
由于新的 Java 字节码转换 API 的优化,转换过程的性能影响最小。
5. 弃用对现有项目的影响是什么?
现有项目需要升级其 Gradle 版本并手动实现 Arouter 插件才能与 Android Gradle 8.0 兼容。