APIの一部のみのjavadocsに付属するサードパーティのjarファイルがあります。 jarファイルをリバースエンジニアリングして、クラスとメソッドの完全なリストを取得する方法はありますか?
Scottが言ったように、Eclipseを使用して、探しているものの多くを取得できます。
JadClipseプラグイン を取得することをお勧めします。このプラグインは.classファイルをオンザフライで逆コンパイルし、IDEでクラスを参照するときに実際のJavaコードを表示します。
ライブラリ [〜#〜] wala [〜#〜] を使用して、すべてのメソッドシグネチャを読み取ることができます。ただし、最初にJavaのスタブコードをロードする必要があります。次のプログラムはすべての署名を読み取る必要があります。
import com.ibm.wala.ipa.cha.ClassHierarchy;
import com.ibm.wala.ipa.cha.IClassHierarchy;
import com.ibm.wala.classLoader.IClass;
import com.ibm.wala.classLoader.IMethod;
import com.ibm.wala.ipa.callgraph.AnalysisOptions;
import com.ibm.wala.ipa.callgraph.AnalysisScope;
import com.ibm.wala.types.ClassLoaderReference;
import Java.util.jar.JarFile;
import Java.io.IOException;
import com.ibm.wala.ipa.cha.ClassHierarchyException;
public class methods {
public static void main(String[] args) throws IOException, ClassHierarchyException {
AnalysisScope scope = AnalysisScope.createJavaAnalysisScope();
scope.addToScope(ClassLoaderReference.Primordial, new JarFile("jSDG-stubs-jre1.5.jar"));
scope.addToScope(ClassLoaderReference.Application, new JarFile("myProgram.jar"));
IClassHierarchy cha = ClassHierarchy.make(scope);
for (IClass cl : cha) {
if (cl.getClassLoader().getReference().equals(ClassLoaderReference.Application)) {
for (IMethod m : cl.getAllMethods()) {
String ac = "";
if (m.isAbstract()) ac = ac + "abstract ";
if (m.isClinit()) ac = ac + "clinit ";
if (m.isFinal()) ac = ac + "final ";
if (m.isInit()) ac = ac + "init ";
if (m.isNative()) ac = ac + "native ";
if (m.isPrivate()) ac = ac + "private ";
if (m.isProtected()) ac = ac + "protected ";
if (m.isPublic()) ac = ac + "public ";
if (m.isSynchronized()) ac = ac + "synchronized ";
System.out.println(ac + m.getSignature());
}
}
}
}
}
here から適応されたWALAバージョンを使用する場合、Dalvik(Android Apps)も同様です。
Eclipseを使用している場合は、プロジェクトのクラスパスに追加して、ツリービューやコンテンツアシストを使用して探索できます。
他のIDEでも同様のことができると思います。
コマンドラインの観点から、それを解凍して(jar xf foo.jar)、すべてのファイルに対してjavapを使用できます。
(抽象クラスではなく)通常のクラスのメソッドを知るためのクイックヘルプ、私は次のことを行います。
eclipseにリストされているメソッドの新しいclassname()。press ctrl + space。
Eclipseは素晴らしいでしょう
Java Decompiler は、クラスを、ソースコードの一部に変換して、クラス、メソッド、それらのシグネチャ、およびおそらくいくつかの引数の有効な値についての洞察について学習するために調査することができます。この引数にnullを渡さないでください。そうしないと、すぐにNullPointerExceptionがトリガーされます)。ただし、スリーブをロールアップしてjarを解凍し、すべてのクラスファイルに対して逆コンパイラーを実行します。これは基本的に、ドキュメント化されていないクラスのヘルプテキストに対してEclipseが行っていることです。
最後に、もちろん、 "本物のプログラマー" は、逆コンパイラーを必要とせずに byte-code を直接読み取ります。
Eclipse> Package Explorerを使用して、クラスとその階層を確認します。
コンテンツアシスト(オートコンプリート機能(Ctrl +スペース))も役立ちますが、未公開のAPIを使用することはお勧めしません