2017-12-27 6 views
0

Androidのデフォルトクラスの読み込みを傍受し、条件付きでクラスの読み込みを避けることはできますか?Androidインターセプトクラスの読み込み

私のモチベーションは、Androidのデフォルトのクラスのロード処理をインターセプトし、条件に基づいてクラスをロードしないよう、

if (!fooScope) { 
    throw IllegalStateException("Trying to load class from FooScope"); 
} 

のようなものです私はクラスがからロードされている場所を変更するつもりはないのですが、細かい持っていますどんなクラスがどの時点でロードされるのかを細かく制御することができます。厳密なクラスローディング。この場合、特定の条件が満たされるまでロードされていないクラスはロードしないでください。私はこれを達成するためにクラスの読み込みをインターセプトする方法を探しています。

答えて

0

おそらく、何らかの種類のHookingライブラリを使用する必要があります。そして、あなたはすべてのロードされたクラスを参照するために、ClassLoader.class のはloadClass(String name)メソッドをフックする必要があります唯一のAndroid 4.4へのアップ

をサポートしています。このライブラリー(https://github.com/cmzy/ZHookLib)のような 。

しかし、依然としてクラスがロードされる順序に問題があります。 あなたはクラスローダのフックのloadClassをしたら、あなたが好きなものを行うことができるはず

public class MyApplication extends Application { 
    static { 
     // code in static block is executed when the class is loaded 
     Set<Unhook> unhooks2 = ZHook.hookAllMethods(ClassLoader.class, "loadClass", new MethodHook() {...}); 
    } 

...最初にロードされますが、わからないイムされるかもしれないアプリケーションを拡張するクラスからそれを行うために試みることができます。 複数のClassLoaderがあり、例外をスローした場合に何が起こるかわからないことに注意してください。

私は助けてくれるといいですか

関連する問題