返回

Transform API 废弃,路由插件的神兵利器

Android

Android 开发指南:告别 Transform API,拥抱 Java Class Transforms API

转型之路:升级路由插件以适应 AGP 8.0

随着 Android Gradle 插件(AGP)的不断更新,谷歌对 Android 开发工具进行了一些重大调整。其中,Transform API 在 AGP 7.2 中被废弃,并在 AGP 8.0 中移除,这给许多依赖它的开发者带来了不小的冲击。对于使用路由插件的小伙伴们来说,更是面临着措手不及的困境。

不过,无需惊慌!谷歌早就预料到了这一点,并及时推出了新的 API 和工具来替代 Transform API,让我们能够继续使用路由插件。在本文中,我们将详细介绍如何将 Transform API 替换为 Java Class Transforms API,并提供一个详细的教程,手把手教你如何修改路由插件的代码。

认识 Java Class Transforms API

Java Class Transforms API 是一个功能强大的字节码操作 API,它继承了 Transform API 的强大功能,并提供了更广泛的字节码操作支持。与 Transform API 相比,Java Class Transforms API 更加灵活,性能也更好。

使用 Byte Buddy 简化字节码操作

除了 Java Class Transforms API,谷歌还提供了 Byte Buddy 这个强大的字节码操作框架。使用 Byte Buddy,我们可以非常方便地修改字节码,而且它的性能也不会对应用程序造成太大的影响。对于那些不想自己修改路由插件代码的小伙伴来说,Byte Buddy 是一个不错的选择。

现成的解决方案:阿里巴巴 ARouter

如果你实在不想自己动手,也可以使用一些现成的解决方案,比如阿里巴巴的 ARouter。它已经支持了 Java Class Transforms API 和 Byte Buddy,可以让你轻松搞定路由适配问题。

详细教程:将 Transform API 替换为 Java Class Transforms API

  1. 在项目的 build.gradle 文件中添加 Java Class Transforms API 的依赖:
dependencies {
    implementation 'com.google.android.tools:javac-transform-api:3.0.0-rc01'
}
  1. 在项目的 build.gradle 文件中配置 Java Class Transforms API:
android {
    defaultConfig {
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
            }
        }
    }

    compileOptions {
        annotationProcessorOptions {
            arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
        }
    }
}
  1. 修改路由插件的代码,将 Transform API 替换成 Java Class Transforms API:
// Transform API 代码
public class ARouterTransform extends Transform {
    @Override
    public void transform(Context context, Collection<TransformInput> inputs, Collection<TransformOutput> outputs, boolean isIncremental, Set<String> referencedScopes) {
        ...
    }
}

// Java Class Transforms API 代码
public class ARouterTransform extends BaseJavaClassTransform {
    @Override
    protected void applyTransformations(JavaClassTransformContext context) {
        ...
    }
}

常见问题解答

  1. 为什么谷歌要废弃 Transform API?

答:Transform API 有一些性能问题和限制,Java Class Transforms API 解决了这些问题,并提供了更强大的字节码操作功能。

  1. 除了 Java Class Transforms API,还有其他选择吗?

答:除了 Java Class Transforms API,你还可以使用 Byte Buddy 进行字节码操作。

  1. 现成的路由插件有哪些?

答:比较流行的现成路由插件有阿里巴巴的 ARouter 和 Jetpack 的 Navigation。

  1. 修改路由插件的代码需要什么技能?

答:修改路由插件的代码需要一定的 Java 和 Android 开发经验。

  1. 为什么 Java Class Transforms API 性能更好?

答:Java Class Transforms API 是针对字节码操作进行专门设计的,它的底层实现比 Transform API 更加高效。

结论

虽然 Transform API 的废弃可能会给一些开发者带来不便,但它也为我们提供了升级到更强大、更灵活的字节码操作工具的机会。通过采用 Java Class Transforms API 或 Byte Buddy,我们不仅可以继续使用路由插件,还可以享受更好的性能和更广泛的字节码操作功能。所以,拥抱新技术,让我们的 Android 开发之旅更加精彩!