지금 특정 Library를 통해 안드로이드 앱을 개발하고 있습니다.
처음에 액티비티를 생성할 때 android.app.Activity 클래스대신 해당 Library의 Activity 클래스(가칭 NewActivity)를 상속받으며, NewAcitivity의 onCreate메소드를 오버라이딩 함으로써 수행됩니다.
그런데 저는 NewActivity 클래스의 private 필드(가칭 NewView)에 접근해야 합니다. 이 필드는 Library에 쓰이는 특정 뷰이며, 앱을 실행할 때 가장 처음에 뜨는 Custom View 입니다. 그리고 이 View는 Inflator로 생성된 View라서 findViewById()로 받아올 수 없습니다.
정리하면 NewActivity에서 Dynamic하게 생성되는 NewView에 접근해야 하는데 이 필드가 private 필드라서 저는 접근을 할 수 없습니다.
그래서 찾아보니 크게 두 가지 방법이 있는 것 같습니다.
1. 안드로이드 실행시 뜨는 최상위 뷰의 Id를 얻어온다. getResources()인가 WIndowManager클래스인가를 통해서 호출한다고 하는데 정확히 어떻게 하는 것인지는 모르겠습니다...ㅡ.ㅡ;; 좀 더 찾아봐야 할 것 같습니다.
2. Reflection을 이용한다. 제가 Reflection을 처음 써보는 지라 잘 안되더군요.
Class.forNmae()을 통해 NewActivity 클래스에 접근하고 getDeclaredField()로 NewView 필드를 불러온 후 Accessibility를 설정했는데 그 이후로는 잘 안됩니다.
정 안되면 java Decompiler로 jar Library를 해체한 후에 setter() 메소드를 설정하면 되겠습니다만, 될 수 있는한 이 방법은 피하고 싶습니다.
저 두가지의 방법 중 어떤 것을 써야 하는지, 그리고 가능하시다면 참고할 만한 자료나 URI가 좀 부탁드립니다.
감사합니다.