# 脱离 Gradle 环境

在平常的开发过程中,我们可能需要脱离 Gradle 环境,对某些个 JARclass 文件或者是 Android Transform Pipeline 的产物进行扫描来得到一些结果,鉴于此,Booster 提供了一系列实用工具类和扩展方法,来帮助开发者提升效率:

# 扫描 Android Transform Pipeline 的产物

通过 TransformHelper,我们就可以很方便对 Android Transform Pipeline 的产物进行扫描:

val variant = "debug"
val input = File("build").file("intermediates", "transforms", "booster", variant)
val output = File(System.getProperty("java.io.tmpdir"))

TransformHelper(input).transform(output, AsmTransformer(object : ClassTransformer {
    override fun transform(context: TransformContext, klass: ClassNode): ClassNode {
        println(klass.name)
        return klass
    }
}))

# 扫描 JAR 文件

通过上面提供的扩展方法,我们可以很方便的扫描 JAR 文件中的 class

File("some.jar").transform(File("out")) { bytecode ->
    val klass = bytecode.asClassNode()
    println(klass.name)
    bytecode
}

或者

JarFile("some.jar").use { jar ->
    jar.entries().iterator().forEach { entry ->
        jar.transform(entry.name) { klass ->
            println(klass.name)
        }
    }
}

# 扫描 class 文件

val klass = File("Some.class").asClassNode()
println(klass.name)