[Android]リフレクションでハマり中

Android で非公開API(privateで定義されたメソッドなど)を利用する方法としてリフレクションという方法があります。

よくある使い方としては、Junitでprivate定義されたメソッドのテストをするためにリフレクションで呼び出すとかかなと思っています。

Android SDKの非公開APIを呼び出す必要があるというケースも試したことはありますが、公式はprivateとかstaticとか理由があって設定されているので、無理にそのメソッドを使えるようにしても、他で問題が起きることが多い感触があります。

以下のログは、リフレクションで呼ぼうとしたメソッドがないケースで表示された内容です。

この時は、メソッド名が誤っているが、指定したクラス名が誤っているかだったと思います。
引数の数が足りないとか、指定した型が間違っている場合は、別のExceptionが吐かれたかと思います。

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.AssetManager android.content.res.Resources.getAssets()' on a null object reference
12-18 18:51:10.164  2988  2988 E AndroidRuntime:    at android.app.LoadedApk.getAssets(LoadedApk.java:543)
12-18 18:51:10.164  2988  2988 E AndroidRuntime:    at android.app.LoadedApk.makeApplication(LoadedApk.java:599)
12-18 18:51:10.164  2988  2988 E AndroidRuntime:    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4680)
12-18 18:51:10.164  2988  2988 E AndroidRuntime:    at android.app.ActivityThread.-wrap1(ActivityThread.java)
12-18 18:51:10.164  2988  2988 E AndroidRuntime:    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
12-18 18:51:10.164  2988  2988 E AndroidRuntime:    at android.os.Handler.dispatchMessage(Handler.java:102)
12-18 18:51:10.164  2988  2988 E AndroidRuntime:    at android.os.Looper.loop(Looper.java:148)
12-18 18:51:10.164  2988  2988 E AndroidRuntime:    at android.app.ActivityThread.main(ActivityThread.java:5417)
12-18 18:51:10.164  2988  2988 E AndroidRuntime:    at java.lang.reflect.Method.invoke(Native Method)
12-18 18:51:10.164  2988  2988 E AndroidRuntime:    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
12-18 18:51:10.164  2988  2988 E AndroidRuntime:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
12-18 18:51:10.149  2988  2988 W ilentinstallapp: type=1400 audit(0.0:30): avc: denied { search } for name="Sinstall" dev="vda" ino=1674 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:unlabeled:s0 tclass=dir permissive=0
12-18 18:51:10.167  1612  1749 W ActivityManager:   Force finishing activity com.example.app.silentinstallapp/.MainActivity

コメント

タイトルとURLをコピーしました