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


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

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

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

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


76
2017-10-25 10:55


मूल


@ हिडन सिर्फ जावाडोक को छुपाता है, ये सभी विधियां अभी भी उपलब्ध हैं - Blundell
@hide उन्हें कक्षा फ़ाइलों से हटा देता है। - Thomas Hofmann
जुड़े हुए: stackoverflow.com/questions/4951146/... - Blundell
मुझे पता है कि मैं प्रतिबिंब का उपयोग कर सकता हूं लेकिन मैं एक मौजूदा एप्लिकेशन को बदलना चाहता हूं जो बिना छेड़छाड़ के छुपा एपीआई का उपयोग करता है और मैं रिफ्लक्शन का उपयोग करने के लिए सभी एक्ससिटिंग कोड को बदलना नहीं चाहता हूं। - Thomas Hofmann
मुझे लगता है कि आप इसे हटा सकते हैं @Hidden उस एपीआई का लेबल जिसे आप एक्सेस करना चाहते हैं, फिर निष्पादित करें make update-api तथा make SDK अपना खुद का एसडीके बनाने के लिए। - dreamtale


जवाब:


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

  1. रेपो या जार डाउनलोड करें https://sites.google.com/site/hippunosource/home/android/androidnohide-apiwo-shi-yongsuru-rifurekushonha-wei-shi-yong
  2. प्रतिलिपि / लक्ष्य / सामान्य / obj / JAVA_LIBRARIES / framework_intermediates / classes.jar (फ्रेमवर्क_all.jar जैसे कुछ का नाम बदलने के लिए बेहतर)
  3. अपने प्रोजेक्ट बिल्ड पथ को कॉन्फ़िगर करें -> लाइब्रेरीज़ -> यह बाहरी जार जोड़ें। आदेश और निर्यात में, इसे ऊपर और पहले android.jar पर ले जाएं

61
2017-11-15 16:10



यह मेरे लिए सबसे आसान तरीका था, धन्यवाद! - JoonasS
यह मेरे लिए भी काम किया! अब मैं वास्तविक कार्य के साथ मिल सकता हूं, इसके लिए धन्यवाद - CurlyPaul
आईएमएचओ, यह सबसे आसान और सबसे तेज़ है। - Patrick Cho
क्या उचित जवाब के रूप में इसे चिह्नित करने का कोई तरीका नहीं है? - Koying
क्या यह विधि सभी उपकरणों के साथ काम करती है, या यह केवल लक्षित डिवाइस के साथ काम करती है? - Hải Phong


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


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

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

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

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

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

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

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

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


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

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


39
2018-03-05 10:23



मैं भी एक नज़र था। Droiddoc के अलावा वहाँ / विकास / उपकरण / mkstubs में mkstubs नामक एक उपकरण है। इसे निर्माण के दौरान बुलाया जाता है और जहां तक ​​मैंने देखा है कि यह उन चीजों को छोड़कर कक्षा फाइलों को संशोधित करेगा। निर्माण / कोर / कार्यों / sdk-addon.mk में निम्न कोड है: stub-addon-jar $ परिभाषित करें (कॉल स्टब-एडन-जार-फ़ाइल, $ (1)): $ (1) | mkstubs $ ($ (PRODUCT_SDK_ADDON_STUB_DEFS) का उपयोग कर एडन जार को छीनने की जानकारी) $ (छुपाएं) जावा -jar $ (कॉल मॉड्यूल-स्थापित-फ़ाइलें, mkstubs) $ (अगर $ (छुपाएं), - v) \ "$$ <" "$$ @" @ $ (PRODUCT_SDK_ADDON_STUB_DEFS) अंतहीन - Thomas Hofmann
दुर्भाग्यवश, मैं इस सामान में नहीं हूं लेकिन मुझे भी ऐसा लगता है कि यह सब छुपा नामक चर पर निर्भर करता है। मुझे पता नहीं चला कि यह सेट हो गया है। यदि आप अन्य निर्माण फ़ाइलों में $ (छुपाएं) खोजते हैं तो आप देखेंगे कि इस मूल्य पर बहुत कुछ निर्भर करता है। ऐसा लगता है कि सी libs के निर्माण के तरीके को भी प्रभावित करता है। - Thomas Hofmann
@ थॉमसहोफमान: मैं शुरुआत में mkstubs उपकरण द्वारा भ्रमित हो गया। मैंने जो सीखा है वह यह है कि जब आप एक (विक्रेता) एसडीके एडन बना रहे होते हैं, तो जब आप सामान्य एसडीके बनाते हैं तो mkstubs केवल तभी उपयोग किया जाता है। हालांकि, mkstubs DroidDoc के समान ही करता है, सिवाय इसके कि इसका उपयोग नहीं होता है @hide एनोटेशन, यह "बस" एक का उपयोग करता है .defs फाइल जो वर्णन करता है कि एडन के एपीआई में कौन से संकुल / वर्ग / फ़ील्ड शामिल किए जाएंगे। - Bjarke Freund-Hansen
@ थॉमसहोफमान: के बारे में $(hide), आप खुद को भ्रमित कर रहे हैं। $(hide) निष्पादन के वास्तविक कमांड लाइन को छिपाने के लिए मेकफ़ाइल में बस एक उपसर्ग है, और कुछ भी नहीं, और इसका उपयोग हर जगह हर जगह किया जाता है। एंड्रॉइड एसडीके या उसके साथ कुछ भी नहीं करना है @hide स्रोत कोड में एनोटेशन। - Bjarke Freund-Hansen


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

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

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

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

हम इन 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 एपीआई का उपयोग कर सकेंगे। (जेनरेट किया गया एपीके, जहां तक ​​मैं देख सकता हूं, में जार से कोई वास्तविक कोड नहीं है।)


28
2017-11-25 10:09



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


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

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

  2. 'जावा -जर' का प्रयोग करें oat2dex.jar बूट boot.oat '

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

ps: शायद आपको 'framework_classes2.dex' के लिए दोहराने के चरण 4-6 की आवश्यकता है


16
2018-02-22 08:08



चरण 3 के लिए, मुझे उस लिंक पर dex2jar.jar नहीं मिल रहा है .... मैंने बहुत सी चीजों की कोशिश की है और मैं इसे समझ नहीं सकता। क्या कहीं उस पर कोई लिंक है? क्या यह मेरे एंड्रॉइड एसडीके में स्थित है? मुझे यह नहीं मिल रहा है। - Dwebtron
लिंक ठीक है। - deviant
'रिलीज' अनुभाग देखें - deviant
तो ऐसा लगता है कि डेक्स 2jar के हाल के संस्करणों ने डाउनलोड के प्रारूप को बदल दिया है। डाउनलोड को अनजिप करें और 'जावा -jar ...' के बजाए बस अपने प्लेटफ़ॉर्म के आधार पर, framework.dex फ़ाइल पर, स्क्रिप्ट 'd2j-dex2jar.sh' या 'd2j-dex2jar.bat' चलाएं। - CalumMcCall
मैंने एंड्रॉइड.जर में दोनों जार-फाइलों की प्रतिलिपि बनाई है, अब एंड्रॉइड स्टूडियो मुझे बताता है त्रुटि: निष्पादन कार्य के लिए विफल रहा ': app: processDebugResources'। > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: प्रक्रिया 'कमांड' डी: \ प्रोग्राम \ एंड्रॉइड \ android-sdk \ build-tools \ 19.1.0 \ aapt.exe ' 'गैर-शून्य निकास मान 1 के साथ समाप्त हुआ - wutzebaer


DroidCon 2011

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

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

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

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

मुझे यह मिल गया है: http://skillsmatter.com/podcast/os-mobile-server/hidden-api डुनो यह कब तक होगा

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


15
2017-10-25 11:37



यह दिलचस्प है लेकिन दुर्भाग्यवश यह मेरे प्रश्न का उत्तर नहीं देता है। मैं वास्तव में छुपा सामान के साथ एसडीके का पुनर्निर्माण करने का एक तरीका मांग रहा था। - Thomas Hofmann
ऐसा लगता है कि मुझे जो चाहिए वह हासिल करने का एक और तरीका मिला। मैं कल इसका वर्णन करूंगा। - Thomas Hofmann
मुझे पता चला कि यदि आप एडीटी में छिपी हुई एपीआई का उपयोग करने वाली परियोजना के स्रोत को संकलित करना चाहते हैं तो आप निम्न कार्य कर सकते हैं: 1) स्रोत के लिए एक एंड्रॉइड प्रोजेक्ट बनाएं। 2) बिल्डिंग पथ से एंड्रॉइड क्लासपाथ कंटेनर को हटाएं 3) उपयोगकर्ता लाइब्रेरी को परिभाषित करें (सिस्टम लाइब्रेरी चेकबॉक्स भी देखें) जिसमें एएसओपी रोम बिल्ड से जेएआर फाइलें शामिल हैं, उदा। CM7)। आप जिस जेएआर फाइलों का उपयोग करते हैं उस पर निर्भर करता है कि आपको संदर्भ देने की आवश्यकता है। ढांचे-तत्काल शायद इसका हिस्सा होंगे। - Thomas Hofmann
4) जब परियोजना अब बनाई गई है तो उपयोगकर्ता पुस्तकालय कक्षाएं एपीके में बनाई जा रही हैं। छुपा एपीआई दिखाई दे रहा है और सबकुछ ठीक से संकलित होगा। - Thomas Hofmann
@ ब्लंडेल: क्या आप कृपया लिंक अपडेट कर सकते हैं .. वे मर चुके हैं! - zombie


देखने की कोशिश करो इस:

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

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

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

  1. दोनों सक्षम करें अंदर का तथा छिपा हुआ एपीआई (परिदृश्य ए)
  2. केवल सक्षम करें छिपा हुआ एपीआई (परिदृश्य बी)
  3. केवल सक्षम करें अंदर का एपीआई (परिदृश्य सी)

परिदृश्य ए बी और सी का एक योग है। परिदृश्य बी सबसे आसान है (किसी ग्रहण एडीटी प्लगइन संशोधन की आवश्यकता नहीं है)।

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

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

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


12
2017-11-10 18:18



मैंने पहले से ही उस ब्लॉग एंट्री को पढ़ा है। यह उल्लेख करता है: "1) एंड्रॉइड एक ओपन सोर्स प्रोजेक्ट है। हम स्रोत कोड डाउनलोड कर सकते हैं और बिल्ड सिस्टम को कस्टमाइज़ कर सकते हैं, इसलिए यह एंड्रॉइड.जेजर से आंतरिक और छिपा वर्गों को बाहर नहीं रखता है। यह एक कठिन तरीका है।" दुर्भाग्य से, यह विवरण में नहीं जाता है। - Thomas Hofmann
ब्लॉग पोस्ट के अंतिम भाग पर जाएं (devmaze.wordpress.com/2011/01/19/...), एक लिंक है (github.com/inazaruk/android-sdk/tree/master/platforms) सभी छिपे हुए और आंतरिक एपीआई के साथ प्री-बिल्ट एंड्रॉइड एपीआई के लिए। - Bob
दिए गए लिंक सुलभ नहीं हैं, लेखक से अनुमति की आवश्यकता है - SHAHS


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


5
2017-09-17 08:50



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


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

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

https://github.com/thoutbeckers/CollectAndroid

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

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

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


1
2017-09-18 11:29





वहां एक है सोनी एरिक्सन वेब पेज पर ब्लॉग पोस्ट एरिक हेलमैन टॉक एंड कोड और कुछ संदर्भ जो मुझे लगता है, आपके लिए उपयोगी होंगे।

सधन्यवाद
  / जोहान


0
2017-11-17 13:40





मैं टिप्पणी नहीं कर सकता लेकिन यह मूल रूप से @ केनीटीएम के लिए एक टिप्पणी है (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 के लिए एक ही विधि को लागू करना है। एसडीके 1 9 के लिए एंड्रॉइड एमुलेटर का उपयोग करके मेरे पास यह अतिरिक्त जार है। मेरे एचटीसी वन पर एक फ्रेमवर्क 3.jar भी है।


0
2018-06-19 14:16





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

  1. कक्षा कहां खोजें

    $ 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
    
  2. नई कक्षाएं जोड़ें और फ्रेमवर्क जेएआर फ़ाइल का पुनर्निर्माण करें

    cd /path/to/temp/folder
    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 /path/to/temp/folder
cp -r /path/to/out/target/common/obj/JAVA_LIBRARIES/*/classes .
cd classes
jar cvf ../framework.jar .

0
2017-11-03 19:55