Android中找到指定包中所有类

作者: 小吉快跑呀 | 来源:发表于2018-03-24 21:38 被阅读0次

Android中有点特殊,用网上普遍的办法(通过File balabala)是没法成功的。
Android中就要用Android的方法,通过DexFile来找。

private fun getClassesNameListInPackage(packageName: String, context: Context): List<String> {
    val realPackageName = "${context.packageName}.$packageName"
    val df = DexFile(context.packageCodePath)
    val enumration = df.entries()
    val list = mutableListOf<String>()
    while (enumration.hasMoreElements()) {
        val className = enumration.nextElement()
        if (className.contains(realPackageName)) {
            list.add(className)
        }
    }
    return list
}

fun getClassesInPackage(packageName: String, context: Context)
        = getClassesNameListInPackage(packageName, context).mapNotNull { Class.forName(it) }

这个方法原来是可行的,但是在高版本的AS中就不行了,Google之后发现是Instant Run惹的祸,IntstantRun把本来暴露出来的文件放在了一个叫instant-run.zip的压缩包中,导致上面的方法找不到了。所以,Settings->Build->Instant Run->Disable,就可以愉快的使用了。

相关文章

网友评论

    本文标题:Android中找到指定包中所有类

    本文链接:https://www.haomeiwen.com/subject/uvjccftx.html