8

主な目標は、独自の実装で Android システム クラス (Activity、View など) をオーバーライドすることです。

http://android-developers.blogspot.com/2011/07/custom-class-loading-in-dalvik.html

カスタムクラスローディング用のClassLoaderを実装し、非システムクラス(カスタムクラス)のローディングが動作します。

しかし、実装で Activity をロードしようとすると、ClassLoader のキャッシュに既にこのクラスがあるため、ロードされません。

/**
 * Returns the class with the specified name if it has already been loaded
 * by the virtual machine or {@code null} if it has not yet been loaded.
 *
 * @param className
 *            the name of the class to look for.
 * @return the {@code Class} object or {@code null} if the requested class
 *         has not been loaded.
 */
protected final Class<?> findLoadedClass(String className) {
    ClassLoader loader;
    if (this == BootClassLoader.getInstance())
        loader = null;
    else
        loader = this;
    return VMClassLoader.findLoadedClass(loader, className);
}

システムではなく独自のクラスを注入するようにクラスローダーを変更するにはどうすればよいですか?

4

2 に答える 2

3

ブログ投稿からこの解決策を見つけました。リンクを投稿するのはむしろスタック オーバーフロー ポリシーに反することはわかっていますが、テキストが大きすぎて転送できません。

アイデアは、低レベルのクラス読み込みメカニズムをオーバーライドする C コードを記述して、メソッドの実行方法をオーバーライドすることです。これが誰かの助けになることを願っています。

于 2015-10-10T07:53:05.950 に答える