Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

# # DexClassFinder - class

    class DexClassFinder internal constructor(
        private val context: Context?,
        internal var name: String,
        internal var async: Boolean,
        override val loaderSet: ClassLoader?
    ) : ClassBaseFinder

Change Records

`v1.0.0` `first`

Function Illustrate

> `Class` 查找类。

可使用 `BaseDexClassLoader` 通过指定条件查找指定 `Class` 或一组 `Class`。

Notice

此功能尚在试验阶段，性能与稳定性可能仍然存在问题，使用过程遇到问题请向我们报告并帮助我们改进。

## # companion object - object

Change Records

`v1.0.0` `first`

### # clearCache - method

    fun clearCache(context: Context, versionName: String?, versionCode: Long?)

Change Records

`v1.0.0` `first`

Function Illustrate

> 清除当前 `DexClassFinder` 的 `Class` 缓存。

适用于全部通过 ClassLoader.searchClass 获取的 `DexClassFinder`。

## # fullName - field

    var fullName: String

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置 `Class` 完整名称。

只会查找匹配到的 `Class.getName`。

例如 `com.demo.Test` 需要填写 `com.demo.Test`。

## # simpleName - field

    var simpleName: String

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置 `Class` 简单名称。

只会查找匹配到的 `Class.getSimpleName`。

例如 `com.demo.Test` 只需要填写 `Test`。

对于匿名类例如 `com.demo.Test$InnerTest` 会为空，此时你可以使用 singleName。

## # singleName - field

    var singleName: String

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置 `Class` 独立名称。

设置后将首先使用 `Class.getSimpleName`，若为空则会使用 `Class.getName` 进行处理。

例如 `com.demo.Test` 只需要填写 `Test`。

对于匿名类例如 `com.demo.Test$InnerTest` 只需要填写 `Test$InnerTest`。

## # from - method

    fun from(vararg name: String): FromPackageRules

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置在指定包名范围查找当前 `Class`。

设置后仅会在当前 `name` 开头匹配的包名路径下进行查找，可提升查找速度。

例如 ↓

`com.demo.test`

`com.demo.test.demo`

Notice

建议设置此参数指定查找范围，否则 Class 过多时将会非常慢。

## # modifiers - method

    fun modifiers(conditions: ModifierConditions)

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置 `Class` 标识符筛选条件。

可不设置筛选条件。

## # fullName - method

    fun fullName(value: String): ClassNameRules

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置 `Class` 完整名称。

只会查找匹配到的 `Class.getName`。

例如 `com.demo.Test` 需要填写 `com.demo.Test`。

## # simpleName - method

    fun simpleName(value: String): ClassNameRules

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置 `Class` 简单名称。

只会查找匹配到的 `Class.getSimpleName`。

例如 `com.demo.Test` 只需要填写 `Test`。

对于匿名类例如 `com.demo.Test$InnerTest 会为空`，此时你可以使用 singleName。

## # singleName - method

    fun singleName(value: String): ClassNameRules

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置 `Class` 独立名称。

设置后将首先使用 `Class.getSimpleName`，若为空则会使用 `Class.getName` 进行处理。

例如 `com.demo.Test` 只需要填写 `Test`。

对于匿名类例如 `com.demo.Test$InnerTest` 只需要填写 `Test$InnerTest`。

## # fullName - method

    fun fullName(conditions: NameConditions)

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置 `Class` 完整名称条件。

只会查找匹配到的 `Class.getName`。

## # simpleName - method

    fun simpleName(conditions: NameConditions)

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置 `Class` 简单名称条件。

只会查找匹配到的 `Class.getSimpleName`。

## # singleName - method

    fun singleName(conditions: NameConditions)

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置 `Class` 独立名称条件。

设置后将首先使用 `Class.getSimpleName`，若为空则会使用 `Class.getName` 进行处理。

## # extends - method

    inline fun <reified T> extends()

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置 `Class` 继承的父类。

## # extends - method

    fun extends(vararg name: String)

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置 `Class` 继承的父类。

会同时查找 `name` 中所有匹配的父类。

## # implements - method

    inline fun <reified T> implements()

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置 `Class` 实现的接口类。

## # implements - method

    fun implements(vararg name: String)

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置 `Class` 实现的接口类。

会同时查找 `name` 中所有匹配的接口类。

## # anonymous - method

    fun anonymous()

Change Records

`v1.0.0` `first`

Function Illustrate

> 标识 `Class` 为匿名类。

例如 `com.demo.Test$1` 或 `com.demo.Test$InnerTest`。

标识后你可以使用 enclosing 来进一步指定匿名类的 (封闭类) 主类。

## # noExtends - method

    fun noExtends()

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置 `Class` 没有任何继承。

此时 `Class` 只应该继承于 `Any`。

Notice

设置此条件后 extends 将失效。

## # noImplements - method

    fun noImplements()

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置 `Class` 没有任何接口。

Notice

设置此条件后 implements 将失效。

## # noSuper - method

    fun noSuper()

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置 `Class` 没有任何继承与接口。

此时 `Class` 只应该继承于 `Any`。

Notice

设置此条件后 extends 与 implements 将失效。

## # enclosing - method

    inline fun <reified T> enclosing()

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置 `Class` 匿名类的 (封闭类) 主类。

## # enclosing - method

    fun enclosing(vararg name: String)

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置 `Class` 匿名类的 (封闭类) 主类。

会同时查找 `name` 中所有匹配的 (封闭类) 主类。

## # FromPackageRules - class

    inner class FromPackageRules internal constructor(private val packages: ArrayList<ClassRulesData.PackageRulesData>)

Change Records

`v1.0.0` `first`

Function Illustrate

> 包名范围名称过滤匹配条件实现类。

### # absolute - method

    fun absolute()

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置包名绝对匹配。

例如有如下包名 ↓

`com.demo.test.a`

`com.demo.test.a.b`

`com.demo.test.active`

若包名条件为 `com.demo.test.a` 则绝对匹配仅能匹配到第一个。

相反地，不设置以上示例会全部匹配。

## # ClassNameRules - class

    inner class ClassNameRules internal constructor(private val name: ClassRulesData.NameRulesData)

Change Records

`v1.0.0` `first`

Function Illustrate

> 类名匹配条件实现类。

### # optional - method

    fun optional()

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置类名可选。

例如有如下类名 ↓

`com.demo.Test` fullName / `Test` simpleName

`defpackage.a` fullName / `a` simpleName

这两个类名都是同一个类，但是在有些版本中被混淆有些版本没有。

此时可设置类名为 `com.demo.Test` fullName / `Test` simpleName。

这样就可在完全匹配类名情况下使用类名而忽略其它查找条件，否则忽略此条件继续使用其它查找条件。

## # member - method

    inline fun member(initiate: MemberRules.() -> Unit): MemberRulesResult

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置 `Class` 满足的 `Member` 条件。

## # field - method

    inline fun field(initiate: FieldRules.() -> Unit): MemberRulesResult

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置 `Class` 满足的 `Field` 条件。

## # method - method

    inline fun method(initiate: MethodRules.() -> Unit): MemberRulesResult

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置 `Class` 满足的 `Method` 条件。

## # constructor - method

    inline fun constructor(initiate: ConstructorRules.() -> Unit): MemberRulesResult

Change Records

`v1.0.0` `first`

Function Illustrate

> 设置 `Class` 满足的 `Constructor` 条件。

## # Result - class

    inner class Result internal constructor(internal var isNotFound: Boolean, internal var throwable: Throwable?) : BaseResult

Change Records

`v1.0.0` `first`

Function Illustrate

> `Class` 查找结果实现类。

### # result - method

    inline fun result(initiate: Result.() -> Unit): Result

Change Records

`v1.0.0` `first`

Function Illustrate

> 创建监听结果事件方法体。

### # get - method

    fun get(): Class<*>?

Change Records

`v1.0.0` `first`

Function Illustrate

> 得到 `Class` 本身。

若有多个 `Class` 结果只会返回第一个。

在查找条件找不到任何结果的时候将返回 `null`。

若你设置了 `async` 请使用 wait 方法。

### # all - method

    fun all(): HashSet<Class<*>>

Change Records

`v1.0.0` `first`

Function Illustrate

> 得到 `Class` 本身数组。

返回全部查找条件匹配的多个 `Class` 实例。

在查找条件找不到任何结果的时候将返回空的 `HashSet`。

若你设置了 `async` 请使用 waitAll 方法。

### # all - method

    fun all(result: (Class<*>) -> Unit): Result

Change Records

`v1.0.0` `first`

Function Illustrate

> 得到 `Class` 本身数组 (依次遍历)。

回调全部查找条件匹配的多个 `Class` 实例。

在查找条件找不到任何结果的时候将不会执行。

若你设置了 `async` 请使用 waitAll 方法。

### # wait - method

    fun wait(result: (Class<*>?) -> Unit): Result

Change Records

`v1.0.0` `first`

Function Illustrate

> 得到 `Class` 本身 (异步)。

若有多个 `Class` 结果只会回调第一个。

在查找条件找不到任何结果的时候将回调 null。

你需要设置 `async` 后此方法才会被回调，否则请使用 get 方法。

### # waitAll - method

    fun waitAll(result: (HashSet<Class<*>>) -> Unit): Result

Change Records

`v1.0.0` `first`

Function Illustrate

> 得到 `Class` 本身数组 (异步)。

回调全部查找条件匹配的多个 `Class` 实例。

在查找条件找不到任何结果的时候将回调空的 `HashSet`。

你需要设置 `async` 后此方法才会被回调，否则请使用 all 方法。

### # onNoClassDefFoundError - method

    fun onNoClassDefFoundError(result: (Throwable) -> Unit): Result

Change Records

`v1.0.0` `first`

Function Illustrate

> 监听找不到 `Class` 时。

### # ignored - method

    fun ignored(): Result

Change Records

`v1.0.0` `first`

Function Illustrate

> 忽略异常并停止打印任何错误日志。

此时若要监听异常结果，你需要手动实现 onNoClassDefFoundError 方法。