
शुद्ध-Go जावा डीकंपाइलर और सीरियलाइज़ेशन ऑपरेटर
एक पोर्टेबल, शुद्ध-Go जावा टूलकिट — yaklang से निकाला और ट्रिम किया गया — जो चार चीज़ों पर केंद्रित है:
.class / .jar / .war / .zip → पठनीय जावा स्रोत।.dex / .apk → नियतात्मक .jar, या सीधे पठनीय जावा स्रोत में, बिना किसी बाहरी dex2jar टूल को आमंत्रित किए।.class फ़ाइल की संरचना का निरीक्षण करें (कॉन्स्टेंट पूल, फ़ील्ड, मेथड, संस्करण, एक्सेस फ़्लैग)।पोर्टेबिलिटी और एम्बेडिंग के लिए निर्मित:
javajive फ़ेसैड पैकेज सभी चार क्षमताओं को लपेटता है; उन्नत उपयोग के लिए सब-पैकेज उपलब्ध रहते हैं।decompile, dex2jar, classinfo, और serial सबकमांड, मानक लाइब्रेरी पर निर्मित।.class / .jar और JDK-सीरियलाइज़्ड ब्लॉब्स को javac/java से कंपाइल करता है, फिर JavaJive को उनके विरुद्ध सत्यापित करता है (देखें HARNESS-WORKFLOW.md)।utils / codec / log / go-funk को एक न्यूनतम, स्व-निहित internal/ कोर के रूप में पुनः कार्यान्वित किया गया है।पूर्ण 38-JAR विभेदक ऑडिट निश्चित बेसलाइन के विरुद्ध शून्य दर्ज रिग्रेशन रिपोर्ट करता है: सभी 20 पूर्व में कंपाइल-क्लीन JAR बरकरार हैं और अब 26 पूर्ण रूप से कंपाइल होते हैं। बेसलाइन दोष और 4 मौजूदा मेथड स्टब दृश्यमान रहते हैं। देखें प्रति-JAR परिणाम और पुनरुत्पादन।
250 पृथक सेमांटिक राउंड ट्रिप कंपाइलेशन, JVM सत्यापन, स्टब और रनटाइम समानता को अलग-अलग दर्ज करते हैं; मूल एप्लिकेशन क्लासेस पुनर्निर्मित क्लासपाथ से अनुपस्थित हैं। CI JDK 17 और 21 पर सेमांटिक ऑडिट, पूर्ण ऐतिहासिक तुलना, और OS/Go और रेस मैट्रिस चलाता है। ये जाँचें प्रत्येक लाइब्रेरी मेथड की समतुल्यता सिद्ध नहीं करतीं। देखें कार्यान्वयन और शेष सीमाएँ।
निम्नलिखित आँकड़े 2026-09-05 को v0.3.0 के लिए रिपोर्ट किए गए थे। ये वर्तमान-संस्करण स्वीकृति परिणाम या व्यवहारिक समतुल्यता का प्रमाण नहीं हैं।
34 वास्तविक-दुनिया JAR (18,759 फ़्लैटन किए गए यूनिट) पर डीकंपाइल → javac --release 8 पुनःकंपाइल → पुनःपैकेज → JVM सत्यापन के माध्यम से मापा गया:
Outer$Inner.java) शून्य javac त्रुटियों के साथ पुनः संकलित होते हैं, और सभी 34 jars में 0 सिंटैक्स त्रुटियाँ हैं (यह एक CI-प्रवर्तित कठोर अभिकथन है, इसलिए कोई भी टाइप त्रुटि लेक्सर विफलता के पीछे नहीं छिप सकती)।-Xverify:all प्रति-क्लास सत्यापन एंड-टू-एंड पास होता है (कॉल डिफ़रेंशियल के अंतर्गत कोडेक मूल jar के समान बाइट-समान है)। provenClean में लॉक किया गया।पूर्ण कार्यप्रणाली, प्रति-jar तालिकाओं और पुनरुत्पादन कमांड के लिए BENCHMARK.md देखें।
# CLI
go install github.com/yaklang/javajive/cmd/javajive@latest
# Library
go get github.com/yaklang/javajive@latest
या स्रोत से बनाएँ:
git clone https://github.com/yaklang/javajive
cd javajive
go build -o javajive ./cmd/javajive
के लिए Go 1.22+ आवश्यक है।
javajive <command> [arguments]
Commands:
decompile decompile Java artifacts or the strict DEX 035 subset into Java source
dex2jar convert the strict DEX 035 subset in a DEX/APK to a deterministic JAR
classinfo print the structure of a .class file (version, fields, methods)
serial Java serialization tools (subcommands: tojson, fromjson)
version print the version
help show help
# Single class: prints to stdout by default, or -o to write a file.
javajive decompile Foo.class
javajive decompile Foo.class -o Foo.java
# Archive: defaults to a "<input>.src" directory, or -o to choose one.
javajive decompile app.jar
javajive decompile app.war -o ./app-src
# DEX or APK: run the native DEX-to-JAR pipeline and decompile the result.
# The default output directory is "<input>.src".
javajive decompile classes.dex
javajive decompile app.apk -o ./app-src
# Directory: recursively decompile .class files (requires -o output dir).
javajive decompile ./classes -o ./src
javajive dex2jar -o classes.jar classes.dex
javajive dex2jar -o app.jar app.apk
इनपुट फ़ाइल नाम एक्सटेंशन के बजाय मैजिक द्वारा पहचाना जाता है। आउटपुट एक पुनरुत्पादनीय JAR है। dex2jar किसी भी असमर्थित या विकृत क्लास या मेथड पर पूर्ण रूपांतरण विफल कर देता है; यह गंतव्य को प्रतिस्थापित करने से पहले एक ही निर्देशिका में अस्थायी फ़ाइल लिखता है और कभी भी मेथड स्टब्स को प्रतिस्थापित नहीं करता है।
नेटिव DEX अनुवाद वर्तमान में एक सख्त पहला वर्टिकल स्लाइस है, सामान्य Android एप्लिकेशन कनवर्टर नहीं। परीक्षित सबसेट मानक DEX 035 है जिसमें सामान्य इंटीजर/रेफ़रेंस कंट्रोल फ़्लो, फ़ील्ड्स और इनवोक्स, सुरक्षित रूप से युग्मित new-instance/कंस्ट्रक्टर इनिशियलाइज़ेशन, और बेसिक एरेज़ शामिल हैं। उत्पन्न क्लास फ़ाइलें पार्सर-परीक्षित और JVM-सत्यापित हैं, जिनमें निष्पादन योग्य ब्रांच, फ़ील्ड, इनवोक, कंस्ट्रक्टर, और int[] पथ शामिल हैं।
अभी तक समर्थित नहीं: try/catch और मॉनिटर ऑपरेशन; float, long, और double मान या ऑपकोड; स्विच, पेलोड निर्देश, और भरे हुए एरेज़; DEX 038+ डायनामिक इनवोक्स और मेथड कॉन्स्टेंट; एनोटेशन और डीबग मेटाडेटा; CompactDex; और APK संसाधन या नेटिव लाइब्रेरी। APK इनपुट का अर्थ है कि केवल विहित नाम वाली classes.dex, classes2.dex, ... प्रविष्टियाँ अनुवादित की जाती हैं। सभी चयनित DEX फ़ाइलों को लेन-देन के रूप में सफल होना चाहिए अन्यथा कोई JAR उत्पन्न नहीं होता।
javajive classinfo Foo.class
class: InvisibleAnnoSeed
super: java/lang/Object
version: 61.0
access: public
constants: 18
fields (0):
methods (2):
<init>()V
run()I
# Serialized binary -> JSON. (-hex: input is a hex string, -: read from stdin)
javajive serial tojson dump.bin
printf 'aced000574000568656c6c6f' | javajive serial tojson -hex -