使用Kotlin 1.5.20访问Android 11中TextView的私人字段



看到了退出的问题,但以22票接受的答案似乎没有编译。答案是

val hello = Hello()
val f = Hello::class.memberProperties.find { it.name == "world" }
f?.let {
it.isAccessible = true
val w = it.get(hello) as World
println(w.foo())
}

,但class没有memberProperties。我能找到的最接近的是members,但它似乎没有返回正确的类型。我怎样才能得到私人领域";mEditor"?

val f = TextView::class.members.find {it.name == "mEditor"};
f?.let{
it.isAccessible=true;
val w = it.get(text2)
}

未解析的引用:isAccessible

TextView.java

@RemoteView
public class TextView extends View implements ViewTreeObserver.OnPreDrawListener {
....
/**
* {@link EditText} specific data, created on demand when one of the Editor fields is used.
* See {@link #createEditorIfNeeded()}.
*/
@UnsupportedAppUsage
private Editor mEditor;

您可以像使用java一样使用getDeclaredField

val f = TextView::class.java.getDeclaredField("mEditor")
f?.let {
it.isAccessible = true
Log.d("TYPE:",f.genericType.toString())
}

日志输出:

TYPE:: class android.widget.Editor

最新更新