一般的な質問: ClassLoader を使用して、事前にロードされた (システムによって、たとえば Android の%android%/frameworks/base/preloaded-classesファイルにある) クラスを置き換えることは可能ですか?
特定: アプリケーションで WebView を作成する前に、DexClassLoader を使用して android.net.* にあるクラスを置き換えようとしています。Class オブジェクトを取得できますが、たとえば getMethods() は、変更されていない/元のクラスの実装で期待される配列を提供します。これは preloaded-classes システムによるものですか?
基本的なセットアップと疑似コード:
- android.net.* クラスを変更し、いくつかのテスト メソッドなどを追加します。
- コンパイルして、classes.dex で終了します。
- jar cf mytest.jar classes.dex
- APK アセットに mytest.jar を含める
- DexClassLoader を作成し、loadClass() を介してクラスを取得します
- クラス オブジェクトの getMethods() は、#1 に存在する変更なしで表示されると予想される配列を返します
使用しているセットアップの詳細と、必要に応じてコードを提供できます。