मैं छिपे हुए और आंतरिक एपीआई के साथ एंड्रॉइड एसडीके का निर्माण कैसे करूं?


85

मैं Android SDK (या केवल android.jar) का पुनर्निर्माण करना चाहता हूं ताकि छिपे हुए और आंतरिक एपीआई को शामिल किया जा सके।

मुझे इस बारे में कोई दस्तावेज या चर्चा नहीं मिली कि इस बारे में कैसे जाना जाए। मेरे पास एक Ubuntu CyanogenMod बिल्ड माहौल है जो पहले से ही सेटअप है जो cm7 बनाने में सक्षम है।

अब, मैंने पढ़ा कि एसडीके एसडीके का निर्माण करेगा लेकिन मैं एसडीके का निर्माण करना चाहता हूं जिसमें ऐसे तरीके और क्षेत्र शामिल हैं जो @hide का उपयोग करते हुए छिपे हुए हैं। क्या यह संभव है?

मैं जो करना चाहता हूं वह एक एप्लिकेशन में बदलाव करता है जो छिपे हुए एपीआई का उपयोग करता है और इसे फिर से बनाने के लिए मैं संशोधित एसडीके का उपयोग करना चाहता हूं।


2
@ हम सिर्फ जवादोक को छुपाते हैं, ये सभी तरीके अभी भी उपलब्ध हैं
ब्लंडेल

12
@ उन्हें क्लास की फाइलों से दूर करता है।
थॉमस हॉफमैन

1
लिंक किया गया: stackoverflow.com/questions/4951146/…
ब्लंडेल

मुझे पता है कि मैं प्रतिबिंब का उपयोग कर सकता हूं, लेकिन मैं एक मौजूदा एप्लिकेशन को बदलना चाहता हूं जो कि रिफ्लेक्शन के बिना छिपे हुए एपीआई का उपयोग करता है और मैं रिफ्लेक्शन का उपयोग करने के लिए सभी एक्साइटिंग कोड को बदलना नहीं चाहता।
थॉमस हॉफमैन

4
मुझे लगता है कि आप @Hiddenउस एपीआई के लेबल को हटा सकते हैं जिसे आप एक्सेस करना चाहते हैं, फिर निष्पादित करें make update-apiऔर make SDKअपना खुद का एसडीके बनाएं।
ड्रीमटेल

जवाबों:


68

यह वह है जो मैं हमेशा छिपे हुए एपी का उपयोग करने के लिए करता हूं।

  1. Https://sites.google.com/site/hippunosource/home/android/androidnohide-apiwo-shi-yongsuru-rifurekushonha-wei-shi-shong से रेपो या डाउनलोड जार बनाएँ
  2. कॉपी आउट / टारगेट / कॉमन / ओब्ज / JAVA_LIBRARIES / चौखटे_रुंड / क्लासेस। केजर (इसे नाम बदलने के लिए बेहतर है जैसे चौखटे_ाल.जर)
  3. अपने प्रोजेक्ट बिल्ड पथ को कॉन्फ़िगर करें -> लाइब्रेरीज़ -> इस बाहरी जार को जोड़ें। आदेश और निर्यात में, इसे ऊपर और android.jar से पहले ले जाएँ

यह मेरे लिए भी काम किया! अब मैं वास्तविक कार्य के साथ प्राप्त कर सकता हूं, इसके लिए धन्यवाद
कर्लीपॉल

IMHO, यह सबसे आसान और सबसे तेज़ है।
पैट्रिक चो

क्या यह उचित उत्तर के रूप में चिह्नित करने का कोई तरीका नहीं है?
क्रिस ब्राउन

2
क्या यह विधि सभी उपकरणों के साथ काम करती है, या यह केवल लक्षित डिवाइस के साथ काम करती है?
होई फोंग

एंड्रॉइड स्टूडियो में लाइब्रेरी ऑर्डर को परिभाषित करने के लिए, आपको मॉड्यूल की .imlफ़ाइल को बदलना होगा और एंड्रॉइड एसडीके<orderEntry> से पहले अपने वांछित परिवाद को लाना होगा । दुर्भाग्य से यह तकनीक स्थायी नहीं है क्योंकि फाइल को सिंक-सिंक बटन दबाने के बाद अधिलेखित कर दिया जाएगा।
वकासलम

44

मैंने इसमें कुछ जांच की है, और मेरा निष्कर्ष केवल यह है : यह बहुत काम के बिना नहीं किया जा सकता है। विवरण के लिए इस उत्तर के बाकी हिस्सों को पढ़ें जो मैंने पाया है।


android.jarवास्तव में "सार्वजनिक एपी" से युक्त है framework.jarऔर core.jarजो system/frameworks/डिवाइस पर पाया जाता है। android.jarएक तरह का है जिसे मैं जावा लाइब्रेरी हेडर कहूंगा, वास्तविक बाइट कोड में सभी कार्यान्वयन केवल एक हैं throw new RuntimeException("stub");, यह आपको android.jar(जैसे एक्लिप्स में) के खिलाफ निर्माण करने की अनुमति देता है , लेकिन निष्पादन एक डिवाइस या एमुलेटर पर किया जाना है।

एंड्रॉइड एसडीके के सार्वजनिक एपीआई को उन वर्गों / विधियों / क्षेत्रों द्वारा परिभाषित किया जाता है जो कि जावाडॉक एनोटेशन के साथ उपसर्ग नहीं करते हैं @{hide}। यानी जो कुछ भी एनोटेट नहीं है वह एसडीके में शामिल है।

android.jarमें स्थित स्रोतों से बनाया गया है, out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediatesजिसमें उपकरण DroidDoc में स्थित है build/tools/droiddoc

DroidDoc उपकरण है (शायद javadoc से अनुकूलित, या javadoc का उपयोग करके) जो वास्तविक Android SDK प्रलेखन उत्पन्न करता है। एक साइड-इफ़ेक्ट के रूप में, और शायद इसलिए कि यह पहले से ही सभी जेवाडॉक को पार्स कर रहा है, यह एंड्रॉइड स्टब्स को बाहर निकाल देता है, जो तब android.jarएसडीके में वितरित किए जाते हैं।

तो जो सामान आप छिपा रहे हैं उसे शामिल करने के लिए, यदि आप केवल विशिष्ट भागों को शामिल करना चाहते हैं, तो केवल @hideएनोटेशन को हटा दें और एसडीके का पुनर्निर्माण करें।

हालांकि अगर आप सभी छिपे हुए हिस्सों को शामिल करना चाहते हैं तो चीजें बहुत अधिक जटिल हो जाती हैं। आप DroidDoc (संबंधित स्रोत में है build/tools/droiddoc/src/Stubs.java) को संशोधित कर सकते हैं जैसे कि कुछ भी छिपा हुआ नहीं है। यह काफी तुच्छ है और मैंने यह कोशिश की है, हालांकि तब उत्पन्न होने वाले स्टब्स बिल्कुल भी संकलित नहीं होते हैं।

अब तक मेरा निष्कर्ष यह है कि यह केवल संभव नहीं है। यदि आप छिपे हुए एनोटेशन का पता लगाने वाले DroidDoc के हिस्से को हटाते हैं, तो उत्पन्न होने वाले स्टब्स, बस संकलित नहीं होते हैं, और सही ढंग से संकलित करने के लिए काफी काम की आवश्यकता होगी।

तो आपके सवालों का जवाब है: नहीं, यह बहुत काम किए बिना नहीं किया जा सकता है। माफ़ करना।


mkstubsटूल के बारे में एक साइड नोट । mkstubsजब आप SDK एडऑन का निर्माण करते हैं , तो इसका मतलब है कि आप उन विक्रेताओं से एंड्रॉइड एसडीके मैनेजर में मिल सकते हैं, जैसे सैमसंग आपको सैमसंग फोन के लिए विशेष सामान के लिए एक अतिरिक्त एपीआई प्रदान करता है। mkstubsDroidDoc स्टब्स पीढ़ी की प्रक्रिया के रूप में बहुत कुछ करता है, हालांकि यह @hideएनोटेशन का उपयोग नहीं करता है , यह .defsआपके एसडीके एडऑन से शामिल करने या बाहर करने के लिए कौन से पैकेज / वर्ग / फ़ील्ड का वर्णन करता है ।

हालांकि यह सवाल के लिए बिल्कुल अप्रासंगिक है, क्योंकि एंड्रॉइड एसडीके बिल्ड टूल का उपयोग नहींmkstubs करता है। (दुर्भाग्य से।)


मेरी भी नज़र थी। Droiddoc के अलावा एक उपकरण है जिसे mkstubs / विकास / उपकरण / mkstubs में कहा जाता है। यह निर्माण के दौरान कहा जाता है और जहां तक ​​मैंने देखा है कि यह कक्षा की फाइलों को उनमें से सामान को चुराते हुए संशोधित करेगा। बिल्ड / कोर / कार्यों / sdk-addon.mk में निम्नलिखित कोड है: स्टब-एडोन-जार $ (कॉल स्टब-एडोन-जार-फ़ाइल, $ (1)) को परिभाषित करें: $ (1) | mkstubs $ ($ $ का उपयोग कर जानकारी जोड़ें "$ $ @" @ $ (PRODUCT_SDK_ADDON_STUB_DEFS) एंडिफ
थॉमस हॉफमैन

दुर्भाग्य से, मैं इस सामान में नहीं हूं, लेकिन मुझे भी ऐसा लगता है कि यह सब एक चर पर निर्भर करता है जिसे छिपाना कहा जाता है। मुझे नहीं मिला, हालांकि यह सेट हो गया था। यदि आप अन्य बिल्ड फ़ाइलों में $ (छिपाना) खोजते हैं तो आप देखेंगे कि बहुत कुछ इस मूल्य पर निर्भर करता है। ऐसा लगता है कि सी लाइबल्स के निर्माण के तरीके को भी प्रभावित करता है।
थॉमस हॉफमैन 15

@ThomasHofmann: मैं शुरू में mkstubs टूल द्वारा भी भ्रमित हो गया था। मैंने जो सीखा है वह यह है कि mkstubs का उपयोग केवल तभी किया जाता है जब आप एक (विक्रेता) sdk addon का निर्माण कर रहे होते हैं, न कि तब जब आप सामान्य sdk का निर्माण करते हैं। हालाँकि, mkstubs बहुत कुछ DroidDoc के समान करता है, सिवाय इसके कि यह @hideएनोटेशन का उपयोग नहीं करता है , यह "बस" एक .defsफाइल का उपयोग करता है जिसमें यह वर्णन किया गया है कि ऐडऑन के API में कौन से संकुल / वर्ग / फ़ील्ड शामिल किए जाने हैं।
बजर्के फ्रायंड-हैनसेन

2
@ThomasHofmann: के बारे में $(hide), आप खुद को भ्रमित कर रहे हैं। $(hide)कार्यक्रम के वास्तविक कमांड-लाइन को छिपाने के लिए मेकफाइल्स में एक उपसर्ग है, और कुछ नहीं, और इसका उपयोग हर जगह हर जगह बस के लिए किया जाता है। एंड्रॉइड एसडीके या @hideस्रोत कोड में एनोटेशन के साथ इसका कोई लेना देना नहीं है ।
बजर्के फ्रंड-हैन्सन

कैसे मैं इसे ऊपर पथ / लक्ष्य / सामान्य / obj / JAVA_LIBRARIES / चौखटे_शुरू / वर्ग.जर
बन्नी

31

हम एंड्रॉइड प्लेटफॉर्म से * .jar फ़ाइलों को फिर से बना सकते हैं।

सबसे पहले, ADB को अपने डिवाइस से कनेक्ट करें। फिर भागो:

adb pull /system/framework/core.jar .
adb pull /system/framework/framework.jar .

core.jarमानक जावा पुस्तकालयों होते हैं ( java.*) और framework.jar(एंड्रॉयड पुस्तकालयों को शामिल android.*)। यह अभी तक प्रयोग करने योग्य नहीं है, क्योंकि वास्तविक फाइलें DEX प्रारूप में हैं, JAR प्रारूप में नहीं।

हम इन DEX- स्वरूपित * .jars को वास्तविक JAR में dex2jar जैसे उपकरणों का उपयोग करके बदल सकते हैं :

dex2jar core.jar
dex2jar framework.jar

फिर "बाहरी जार जोड़ें ..." का उपयोग करके इन जार में खींच लें (आप ग्रहण एडीटी का उपयोग कर रहे हैं)

  • राइट क्लिक करें Project → Properties → Java Build Path → Libraries → Add External JARs... → ( ऊपर core-dex2jar.jarऔर नीचे framework-dex2jar.jarसे चुनें )।

यह आपको आंतरिक और कुछ जावा 7 एपीआई का उपयोग करने में सक्षम करेगा। (उत्पन्न APK, जहाँ तक मैं देख सकता हूँ, JARs से कोई वास्तविक कोड नहीं है।)


बहुत बहुत धन्यवाद, मैंने कई तरीके आजमाए हैं केवल आपके तरीके मेरे लिए काम करते हैं।
सालुत्तोनोंडो

7
यह नोट करना महत्वपूर्ण है कि यह विधि अभी भी आईसीएस और बाद के सिस्टम के साथ काम करती है, लेकिन कुछ और करतब दिखाने की आवश्यकता है। प्रासंगिक फ़ाइलें हैं /system/framework/core.odex, /system/framework/framework.odexहै, और शायद अधिक। इन्हें डीओडेक्स किया जा सकता है ( java -jar baksmali-2.0.3.jar -d system.framework -x system.framework/core.odex -o core) और फिर से लोड किया ( java -jar smali-2.0.3.jar -x -o core.dex core), और उसके बाद dex2jar core.dexही अपना काम करता है।
एलेक्स कोहेन

marshmallow में core.jar ढूंढने में असमर्थ
mehmet6parmak

क्या आपको एंड्रॉइड पी में कोर और फ्रेमवर्क जार के लिए कोई विचार है?
प्रभाकरन

कैसे मैं इसे ऊपर पथ / लक्ष्य / सामान्य / obj / JAVA_LIBRARIES / चौखटे_शुरू / वर्ग.जर
बन्नी

17

लॉलीपॉप के लिए प्रवाह थोड़ा अलग है:

  1. लॉलीपॉप डिवाइस से /system/framework/arm/boot.oat प्राप्त करें

  2. 'Java -jar oat2dex.jar बूट बूट.ऑट' का उपयोग करें

  3. आपको दो फ़ोल्डर मिलेंगे: डेक्स और ओडेक्स। डेक्स पर जाएं और 'java -jar dex2jar.jar ढांचा. dex' बनाएं
  4. परिणामी फ्रेमवर्क का नाम बदलें। ज़िप करें, निकालें और अपनी ज़रूरत की कक्षाएं ढूंढें
  5. [Sdk_path] / प्लेटफार्मों / [target_platform] पर जाएं और android.jar को निकालें (पहले इसका नाम बदलकर ज़िप करें)।
  6. निकाले गए फ्रेमवर्क से निकाले गए android.jar में फाइल कॉपी करें। फिर ज़िप को संक्षिप्त करें और .jar का नाम बदलें :)

पीएस: शायद आपको probably फ्रेमवर्क_क्लासेस २.डेक्स ’के लिए 4-6 बार दोहराने की जरूरत है


चरण 3 के लिए, मुझे उस लिंक पर dex2jar.jar नहीं मिल रहा है .... मैंने बहुत सी चीजों की कोशिश की है और मैं इसका पता नहीं लगा सकता। क्या उसका कहीं लिंक है? क्या यह मेरे Android SDK में स्थित है? मैं इसे नहीं ढूँढ सकता।
ड्वेट्रॉन

हाँ, यह एक github परियोजना के लिए चला जाता है, और शायद यह मुझे है, लेकिन मैं ".jar" में समाप्त होने वाली किसी भी फ़ाइल को नहीं ढूँढ सकता ...
Dwebtron

1
'विमोचन' खंड देखें
deviant

2
तो ऐसा लगता है कि dex2jar के हाल के संस्करणों ने डाउनलोड के प्रारूप को बदल दिया है। बस डाउनलोड को अनज़िप करें और इसके बजाय 'java -jar ...' स्क्रिप्ट को केवल 'd2j-dex2jar.sh' या 'd2j-dex2jar.bat' पर चलाएं, आपके प्लेटफॉर्म के आधार पर, सीधे
.dex

1
मैंने दोनों jar-files को android.jar में कॉपी कर लिया है, अब android स्टूडियो मुझे त्रुटि बताता है: कार्य के लिए निष्पादन विफल रहा: 'app: processDebugResources'। > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: प्रोसेस 'कमांड' D: \ Program \ Android \ sdk \ build-tools \ 19.15's aapt.exe ' 'नॉन-जीरो एग्जिट वैल्यू 1 के साथ समाप्त
वुत्जेबेर

15

DroidCon 2011

यहां सोनी के एरिक हेलमैन बताते हैं कि छिपे हुए एंड्रॉइड एपीआई का उपयोग कैसे करें:

http://vimeo.com/30180393 (हम्म लिंक काम नहीं करता है)।

गोटो को DroidCon वेबपेज डे 2 में छिपे हुए एपीआई 10:15 का उपयोग करने के लिए नीचे स्क्रॉल करें और आप इसे वहां देख सकते हैं।

लिंक मर रहे हैं!

मुझे यह एक मिल गया है: http://skillsmatter.com/podcast/os-mobile-server/hidden-api dunno कितनी देर तक यह हो जाएगा

एंड्रॉइड एसडीके में आधिकारिक एपीआई आमतौर पर अधिकांश सामान्य अनुप्रयोगों के लिए पर्याप्त है। हालांकि, कभी-कभी ऐसी परिस्थितियां होती हैं जहां एक डेवलपर को आंतरिक सिस्टम सेवाओं, एपीआई और संसाधनों तक पहुंच की आवश्यकता होती है जो आधिकारिक एपीआई में प्रकाशित नहीं होते हैं। सौभाग्य से, ये एपीआई अभी भी कुछ चालाक चाल के माध्यम से उपलब्ध हैं और अक्सर एंड्रॉइड के शीर्ष पर नए और अभिनव समाधान विकसित करते समय उपयोगी हो सकते हैं। इस सत्र में आप सीखेंगे कि इन छिपे और संरक्षित एपीआई का उपयोग और उपयोग कैसे करें, उनके उपयोग की सीमाएं और कई विक्रेताओं के उपकरणों और एंड्रॉइड संस्करणों में सुरक्षित और नियंत्रण तरीके से उनका उपयोग करने के तरीके के बारे में कुछ सुझाव दें। दर्शकों को कई उन्नत डेमो दिखाई देंगे जो आप सामान्य रूप से एंड्रॉइड के साथ नहीं कर सकते हैं। एंड्रॉइड प्लेटफॉर्म के इंटर्नल में बहुत सारी अंतर्दृष्टि के साथ एक काफी उन्नत सत्र की अपेक्षा करें।


1
यह दिलचस्प है लेकिन दुर्भाग्य से यह मेरे सवाल का जवाब नहीं देता है। मैं वास्तव में छिपे हुए सामान के साथ एसडीके को फिर से बनाने का एक तरीका पूछ रहा था।
थॉमस हॉफमैन

ऐसा लगता है कि मुझे जो चाहिए वह हासिल करने का एक और तरीका मिल गया। मैं कल इसका वर्णन करूंगा।
थॉमस हॉफमैन

मुझे पता चला कि यदि आप ADT में छिपे हुए API का उपयोग करने वाले प्रोजेक्ट के स्रोत को संकलित करना चाहते हैं, तो आप निम्न कार्य कर सकते हैं: 1) स्रोत के लिए एक Android प्रोजेक्ट बनाएँ। 2) निर्माण पथ से एंड्रॉइड क्लासपैथ कंटेनर को निकालें 3) एक उपयोगकर्ता लाइब्रेरी को परिभाषित करें (सिस्टम लाइब्रेरी चेकबॉक्स की भी जांच करें) जिसमें ASOP ROM बिल्ड, जैसे cm7 से JAR फाइलें शामिल हैं)। आपके द्वारा उपयोग की जाने वाली JAR फाइलें इस बात पर निर्भर करती हैं कि आपको संदर्भ के लिए क्या चाहिए। फ्रेमवर्क-तत्काल इसका हिस्सा होगा।
थॉमस हॉफमैन

4) जब प्रोजेक्ट अब बनाया गया है तो यूजर लाइब्रेरी क्लासेस को बनाई जा रही एपीके में शामिल नहीं किया जाएगा। हिडन एपीआई दिखाई देता है और सब कुछ ठीक संकलित होगा।
थॉमस हॉफमैन

@ ब्लंडेल: क्या आप कृपया लिंक को अपडेट कर सकते हैं .. वे मर चुके हैं!
ज़ोंबी

15

आप इस रिपॉजिटरीandroid.jar से छिपे हुए एपीआई के रूप में उपयोग किए जाने के लिए संशोधित डाउनलोड कर सकते हैं । वहां दिए गए निर्देशों का पालन करें।


4
इस उत्तर को और अधिक सरल बनाया जाना चाहिए क्योंकि यह सबसे सरल उपाय है। लोग, यदि आप एक समाधान की तलाश कर रहे हैं - पता है कि अन्य लोगों ने पहले से ही ऐसा किया था और उस गीथूब रेपो के लिए एक समाधान रखा था। इसका उपयोग करें और आनंद लें! ))
मिक्साज़

1
API 28 के लिए android.jar का उपयोग करते समय मुझे रोबोइलेक्ट्रिक के साथ एक त्रुटि मिल रही है। एक मुद्दे को उठाया github.com/anggrayudi/android-hidden-api/issues/62 और अपने जार @Anggrayudi के लिए धन्यवाद
प्रभाकरन

12

देखने की कोशिश करो करें :

इन लेखों का अंतिम लक्ष्य डेवलपर्स को प्रतिबिंब का उपयोग किए बिना आंतरिक और छिपे हुए एपीआई की शक्ति देना है। यदि आप अगले कई भागों में वर्णित सभी चरणों को पूरा करते हैं तो आप आंतरिक का उपयोग करने में सक्षम होंगे और छिपे हुए एपीआई जैसे कि वे सार्वजनिक खुले एपीआई थे। परावर्तन की कोई आवश्यकता नहीं होगी।

लेकिन अगर आप इन गैर-सार्वजनिक एपीआई का उपयोग कर रहे हैं, तो आपको पता होना चाहिए कि आपका आवेदन बहुत जोखिम में है। मूल रूप से ऐसी कोई गारंटी नहीं है कि एंड्रॉइड ओएस के अगले अपडेट के साथ एपीआई को तोड़ा नहीं जाएगा। विभिन्न विक्रेताओं के उपकरणों में लगातार व्यवहार के बारे में भी कोई गारंटी नहीं है। आप पूरी तरह से अपने दम पर हैं।

तीन परिदृश्य हैं जिनका आप अनुसरण करना चाहते हैं:

  1. दोनों को आंतरिक सक्षम करें और छिपे हुए API (परिदृश्य A)
  2. ही सक्षम करें छिपा हुआ API (परिदृश्य B)
  3. ही सक्षम करें आंतरिक API (परिदृश्य C)

परिदृश्य A, B और C. का योग है। परिदृश्य B सबसे आसान है (इसके लिए कोई ADT प्लग इन संशोधन की आवश्यकता नहीं है)।

परिदृश्य A : भागों को पढ़ें 1 , 2 , 3 , 4 , 5

परिदृश्य B : भागों को पढ़ें 1 , 2 , 3 , 5

परिदृश्य सी : 1 , 2 , 3 , 4 , 5 भाग पढ़ें


3
मैंने पहले ही उस ब्लॉग प्रविष्टि को पढ़ा। इसमें यह उल्लेख किया गया है: "1) एंड्रॉइड एक ओपन सोर्स प्रोजेक्ट है। हम सोर्स कोड डाउनलोड कर सकते हैं और बिल्ड सिस्टम को कस्टमाइज़ कर सकते हैं ताकि यह android.jar से आंतरिक और छिपी हुई कक्षाओं को बाहर न करे। यह एक कठिन तरीका है।" दुर्भाग्य से, यह विवरण में नहीं जाता है।
थॉमस हॉफमैन 21

3
ब्लॉग पोस्ट के अंतिम भाग पर जाएं ( devmaze.wordpress.com/2011/01/19/… ), पूर्व-निर्मित Android के लिए एक लिंक ( github.com/inazaruk/android-sdk/tree/master/platforms ) है। सभी छिपे हुए और आंतरिक एपीआई वाले एपीआई।
बॉब

1
दिए गए लिंक सुलभ नहीं हैं, लेखक की अनुमति की आवश्यकता है
SHAHS

मैं कैसे बाहर / लक्ष्य आम / obj / JAVA_LIBRARIES / framework_intermediates / classes.jar / इस से ऊपर पथ checkou कर सकते हैं
बनी

1

मैंने एक बार http://source.android.com/ से रेपो चेकआउट से जावा फाइलों को निकालने के लिए कुछ ग्रूवी स्क्रिप्ट लिखी थीं और फिर उन्हें सभी एंड्रॉइड स्रोतों को संकलित करने के लिए एक पूर्ण टूलचैन की आवश्यकता के बिना आवश्यक अन्य चरणों सहित संकलन किया था ( पैकेजिंग, उत्पादन संसाधन आदि)।

उन्हें यहाँ ढूँढा जा सकता है:

https://github.com/thoutbeckers/CollectAndroid

लेकिन यह सुनिश्चित करने के लिए कि जिंजरब्रेड के बाद किसी भी चीज के लिए अपडेट करने की आवश्यकता होगी, ज्यादातर कॉन्फिग फाइल (कलेक्टोन्फिग.ग्रोवी) में "रूटडिर्स" में सही डाइरेक्टरी सेट करके।

जिस समय मैंने नियमित रूप से सभी उपलब्ध एपीआई और स्रोतों (उस समय समस्याग्रस्त भी) के साथ विकास के लिए इसका इस्तेमाल किया।

जैसा कि कहीं और उल्लेख किया गया है। कॉम / एंड्रॉइड / आंतरिक / ** अभी भी एडीटी के हाल के संस्करणों में छिपा होगा, क्योंकि प्रवेश नियम के अनुसार।


मैं इसे ऊपर के पथ / लक्ष्य / सामान्य / obj / JAVA_LIBRARIES / चौखटे_शुरुआत / कक्षाओं के लिए कैसे चेक कर सकता / सकती हूँ
बनी

मैंने उस रेपो को संग्रहीत किया क्योंकि यह आखिरी बार जिंजरब्रेड के लिए अपडेट किया गया था । आपको दुर्भाग्य से एक और दृष्टिकोण खोजना होगा।
थाउटबेकर्स

1

लंबे जवाब ने मेरे लिए काम किया, लेकिन मुझे अभी भी कुछ कक्षाएं याद आ रही थीं, जिनकी मुझे विशेष रूप से android.provider.Telephony में आवश्यकता थी। मैं इसे इस तरह से जोड़ने में सक्षम था:

  1. ढाँचा.जर फ़ाइल निकालें

    mkdir /tmp/framework
    cp framework.jar /tmp
    cd /tmp/framework
    jar xvf ../framework.jar
    mv android classes
    
  2. Android रेपो बनाएँ, जो आउट / टार्गेट / कॉमन / obj / JAVA_LIBRARIES डायरेक्टरी बनाएगा

  3. लापता वर्ग कहाँ हैं

    $ cd /path/to/out/target/common/obj/JAVA_LIBRARIES
    $ find . | grep "/Telephony.class"
    ./telephony-common_intermediates/classes/android/provider/Telephony.class
    ./android_stubs_current_intermediates/classes/android/provider/Telephony.class
    
  4. नई कक्षाएं जोड़ें और फ्रेमवर्क JAR फ़ाइल का पुनर्निर्माण करें

    cd /tmp/framework
    cp -r /path/to/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes .
    cp -r /path/to/out/target/common/obj/JAVA_LIBRARIES/telephony-common_intermediates/classes .
    cd classes
    jar cvf ../framework.jar .
    

या आप आलसी हो सकते हैं और सभी वर्गों को एक विशाल जार फ़ाइल में शामिल कर सकते हैं:

cd /tmp/framework
cp -r /path/to/out/target/common/obj/JAVA_LIBRARIES/*/classes .
cd classes
jar cvf ../framework.jar .

out / target / common / obj / JAVA_LIBRARIES इस पथ को कैसे खोजें?
बनी

@ बन्नी मैंने अधिक विवरण के साथ अपना उत्तर अपडेट कर दिया है। लेकिन ऐसा लगता है कि यहां जवाब आसान हो सकता है: stackoverflow.com/a/32626155/399105
bmaupin

आपकी प्रतिक्रिया के लिए धन्यवाद @bmaupin .. आप मेरी मदद कर सकते हैं कि कैसे मैं इस रास्ते को खोज सकता हूं / लक्ष्य / आम / obj / JAVA_LIBRARIES को फ्रेमवर्क जार प्राप्त करने के लिए ... मैं वास्तव में फंस गया हूं..मैं इस पथ या खोजने में सक्षम नहीं हूं ... कुछ याद आ रही है ... कृपया मार्गदर्शन करें
चलनेवाली

0

मैं टिप्पणी नहीं कर सकता लेकिन यह मूल रूप से @ KennyTM's ( https://stackoverflow.com/a/13550030/2923406) पर टिप्पणी है ) उत्कृष्ट उत्तर के :

यदि आप ग्रहण में निम्नलिखित त्रुटि के साथ खुद को पाते हैं:

The type com.android.internal.util.Predicate cannot be resolved. It is indirectly referenced from required .class   files

(वह है, android.internal। उपलब्ध नहीं है)

फिर एक संभावित समाधान /system/framework/framework2.jar के लिए समान विधि लागू करना है। SDK19 के लिए एंड्रॉइड एमुलेटर का उपयोग करना मेरे पास यह अतिरिक्त जार है। मेरे एचटीसी वन पर भी एक Framework3.jar है।


मैं इसे ऊपर के पथ / लक्ष्य / सामान्य / obj / JAVA_LIBRARIES / चौखटे_शुरुआत / कक्षाओं के लिए कैसे चेक कर सकता / सकती हूँ
बनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.