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
コメント