2016-08-06 12 views
1

に静的なものであるかどうかを確認します。Androidの方法は、私はJNI形式でのAndroidのAPIのファイル持って自動化された形

Landroid/accounts/AccountManager;->access$000(Landroid/accounts/AccountManager;)Landroid/accounts/IAccountManager;  
Ljava/lang/Runtime;->exec([Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process; 
Ldalvik/system/DexClassLoader;->findLibrary(Ljava/lang/String;)Ljava/lang/String; 
... 

しかし、それらのどれもがアクセス修飾子が含まれていませんが。私はそれぞれが自動化された方法で静的であるかどうかを判断したいと思います。

+0

これらのプロトタイプ文字列を基にしたいのですか、それともAPIにアクセスできますか? – samgak

+0

私が正しく理解していれば、SDKを使用できます。限り、私はそれがメソッドが実装されているクラス定義の大部分を含むソースフォルダが含まれていることがわかります。しかし、例えば、上記のDexClassLoaderが見つかりませんでした。システムクラスがどこに定義されているか知っていますか? –

+0

私はすべてのソースファイルを持っていると仮定し、希望するシグネチャを検索して静的に接頭辞が付いているかどうかをチェックするスクリプトを記述する必要があると思います。私はスクリプティングに慣れていないので、使用するコマンドについて正しい方向に指摘していただければ幸いです。 –

答えて

1

あなたは方法は、Java Reflectionを使用して、静的であるかどうかを確認することができます。

たとえば、あなたはのgetClass()を使用してオブジェクトからClassオブジェクトを取得することができ、およびメソッド名を使用して、Methodオブジェクトを取得するには、クラスオブジェクトにgetDeclaredMethod()を呼び出し、メソッドのパラメータのクラス:

Class[] methodParameters = new Class[]{Integer.TYPE, String.class}; 
Method method = obj.getClass().getDeclaredMethod("methodName", methodParameters); 

その後、あなたはそれが静的であるかどうかをチェックするMethodオブジェクトを照会することができます

boolean isStatic = Modifier.isStatic(method.getModifiers()); 

あなたは、このようなクラス名に基づいて、クラスのオブジェクトを取得することができます。

Class c = Class.forName("com.example.TestClass"); 
関連する問題