Android中找到指定包中所有类

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,就可以愉快的使用了。

    原文作者:小吉快跑呀
    原文地址: https://www.jianshu.com/p/c694c52e604d
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞