2009-06-10 12 views
38

मेरे पास एक तृतीय-पक्ष जार फ़ाइल है जो एपीआई के केवल भाग के लिए javadocs के साथ आता है। कक्षाओं और विधियों की पूरी सूची प्राप्त करने के लिए जार फ़ाइल को इंजीनियर करने का कोई तरीका है?जार फ़ाइल से विधि हस्ताक्षर कैसे प्राप्त करें?

+2

प्रतिबिंब के साथ पसंद है? –

उत्तर

43

jar tf आपके लिए सामग्री सूचीबद्ध करेगा। javap आपको कक्षाओं के अधिक विवरण देखने की अनुमति देगा (टूल गाइड देखें)।

उदाहरण के लिए यदि आप

, एक वर्ग एक जार myjar.jar तो में mypkg.HelloWorld नामित

javap -classpath myjar.jar mypkg.HelloWorld 

की तरह इसे चलाने हालांकि है क्या आप वाकई इन अप्रकाशित API का उपयोग करके होना चाहते हैं? यह आमतौर पर एक बहुत बुरा विचार है।

3

यदि आप ग्रहण का उपयोग कर रहे हैं, तो आप इसे किसी प्रोजेक्ट के क्लासपाथ में जोड़ सकते हैं और ट्रीव्यू और/या सामग्री सहायता का उपयोग करके इसका पता लगा सकते हैं।

मुझे लगता है कि अन्य आईडीई समान कर सकते हैं।

एक कमांड-लाइन बिंदु दृश्य से, आप इसे unjar (jar xf foo.jar) कर सकते हैं और सभी फ़ाइलों के खिलाफ जावप का उपयोग कर सकते हैं।

5

स्कॉट ने कहा, आप जो कुछ भी ढूंढ रहे हैं उसे प्राप्त करने के लिए आप ग्रहण का उपयोग कर सकते हैं।

मैं JadClipse plugin प्राप्त करने की अनुशंसा करता हूं जो फ्लाई पर .class फ़ाइलों को विघटित कर देगा और आईडीई में कक्षाओं को ब्राउज़ करते समय आपको वास्तविक जावा कोड दिखाएगा।

+0

सहमत हैं। एक बहुत शक्तिशाली संयोजन। –

1
  • ग्रहण महान

  • एक Java Decompiler वर्गों है कि आप कक्षाएं, विधियों, उनके हस्ताक्षर के बारे में जानने के लिए अध्ययन कर सके स्रोत कोड के कुछ semblence में वापस अनुवाद करें, और होता भी हो सकता है कुछ अंतर्दृष्टि काम करेगा कुछ तर्कों के लिए मान्य मानों में (उदाहरण के लिए इस तर्क के लिए शून्य न करें या आप तुरंत एक NullPointerException ट्रिगर करेंगे)। लेकिन जार को उतारने और सभी वर्ग फ़ाइलों के खिलाफ डिकंपेलर चलाने के लिए अपनी आस्तीन को रोल करें। अनियंत्रित वर्गों के साथ सहायता पाठ के लिए यह अनिवार्य रूप से ग्रहण कर रहा है।

  • अंत में, जाहिर है, एक "real programmer"byte-code पढ़ें सीधे एक decompiler की आवश्यकता के बिना।

2

एक सामान्य वर्ग (अमूर्त वर्ग नहीं) के तरीकों को जानने के लिए त्वरित सहायता, मैं निम्नलिखित करता हूं।

नया वर्गनाम()। ग्रहण में सूचीबद्ध विधियों के लिए ctrl + space दबाएं।

0

कक्षाओं और थिएटर पदानुक्रम देखने के लिए ग्रहण> पैकेज एक्सप्लोरर का उपयोग करें।

सामग्री सहायता (स्वत: पूर्ण सुविधा (Ctrl + Space)) भी एक अच्छा मदद है, लेकिन एक अप्रकाशित एपीआई

3

का उपयोग कर आप सभी तरीकों हस्ताक्षर बाहर पढ़ने के लिए पुस्तकालय WALA उपयोग कर सकते हैं की सिफारिश नहीं होगा। हालांकि आपको पहले जावा के लिए स्टब-कोड लोड करना होगा। निम्नलिखित कार्यक्रम सभी हस्ताक्षर बाहर पढ़ना चाहिए:

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 से अनुकूलित वाला संस्करण का उपयोग करते हैं यह Dalvik करता है (उदाएंड्रॉइड ऐप) भी।

संबंधित मुद्दे