appcompat-v7 v21.0.0 Android v4.2.2 के साथ सैमसंग उपकरणों पर दुर्घटना का कारण बनता है


79

हमने appcompat-v7 supportसमर्थन एक्शनबार और सामग्री विषयों का समर्थन करने के लिए पुस्तकालय का उपयोग करने के लिए हमारे आवेदन को बदल दिया है । का उपयोग करते हुए v21.0.0 of appcompat-v7(और v21.0.0 of support-v4), अब हम में दुर्घटनाओं को देख रहे हैं Google Playकेवल सैमसंग उपकरणों से और Crashlytics runningएंड्रॉयड v4.2.2 . Here is the stack trace from Google Play and the app appears to crash as soon as theactionbar` दिखाए और / या अवैध है।

java.lang.NoClassDefFoundError: android.support.v7.internal.view.menu.MenuBuilder
at android.support.v7.app.ActionBarActivityDelegateBase.initializePanelMenu(ActionBarActivityDelegateBase.java:991)
at android.support.v7.app.ActionBarActivityDelegateBase.preparePanel(ActionBarActivityDelegateBase.java:1041)
at android.support.v7.app.ActionBarActivityDelegateBase.doInvalidatePanelMenu(ActionBarActivityDelegateBase.java:1259)
at android.support.v7.app.ActionBarActivityDelegateBase.access$100(ActionBarActivityDelegateBase.java:80)
at android.support.v7.app.ActionBarActivityDelegateBase$1.run(ActionBarActivityDelegateBase.java:116)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:5299)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
at dalvik.system.NativeStart.main(Native Method)

V4.2.2 चलाने वाले अन्य डिवाइस और एमुलेटर इस व्यवहार को प्रदर्शित नहीं करते हैं। यह मेरी समझ है कि कई Google ऐप पहले से ही appcompatएक्शन बार प्रदर्शित करने के लिए इस नए संस्करण का उपयोग कर रहे हैं । अगर ये ऐप इन डिवाइस पर क्रैश की रिपोर्ट नहीं कर रहे हैं, तो यह जानना मददगार होगा कि इससे कैसे बचा जा रहा है / तय किया जा रहा है।

मैंने इसे Google को बग के रूप में रिपोर्ट किया लेकिन यह इस कारण से बंद हो गया कि यह एक विकास मुद्दा है। हालाँकि मैं मानता हूँ कि यह मामला हो सकता है, मैं सोच रहा हूँ कि क्या / कैसे कोई वर्तमान में उपयोग करने में सक्षम है appcompat-v7 v21.0.0और दुर्घटनाग्रस्त न हो Samsung 4.2.2 devices

अद्यतन: ऐसा लगता है कि Google इसके लिए कम से कम संभव कार्यदलों पर विचार कर रहा है। देखें इस जानकारी के लिए।



यह एक संबंधित मुद्दा हो सकता है, लेकिन यह थोड़ा अलग अपवाद प्रतीत होता है। अन्य प्रश्न में पोस्ट किया गया एक हालिया समाधान एक्शन बार में एक स्पिनर होने से संबंधित है और मेरे पास वह स्थिति नहीं है। मैं सिर्फ मेनू आइटम का उपयोग कर रहा हूं।
एरिक पेडर्सन

मुझे भी यही समस्या है। ऐप उत्पादन में है और 4.2.2 के साथ सैमसंग से क्रैश प्राप्त कर रहा है। उपकरण
मार्टिन वंडज़ुरा

1
मेरे एक्शन बार में भी कोई स्पिनर नहीं है और इसे एंड्रॉइड 4.2.2: Qmobile I9 और Wiko (अज्ञात मॉडल) चलाने वाले गैर सैमसंग उपकरणों से मिल रहा है।
जर्गेन 'काशबन' पहलवान

1
@Devashish: दूसरे जवाब में मेरे लिए काम कर रहे प्रहरी समाधान। मैंने appthwack.com से प्रभावित सैमसंग डिवाइस के खिलाफ परीक्षण किया और गार्ड के विन्यास को लागू करने के बाद मुझे कोई और त्रुटि नहीं मिली।
जर्गेन 'काशबन' पहलवान

जवाबों:


15

मुझे यहाँ उचित समाधान मिला: https://stackoverflow.com/a/26641388/1266123

का उपयोग करके

-keep class !android.support.v7.internal.view.menu.**,android.support.v7.** {*;}

के बजाय

-keep class android.support.v7.** {*;}

1
मुझे लगता है कि आप "-शासन" के बजाय "-Cnnames" का उपयोग करके अधिक स्थान बचा सकते हैं।
जस्टिन

जैसा कि code.google.com/p/android/issues/detail?id=78377 से चर्चा में कहा गया है , इस विशेष समाधान का उपयोग करने से ऐप्पाकोपेट लाइब्रेरी के भीतर संसाधन संदर्भों के कारण समस्या हो सकती है। हालाँकि, यह हमारे विशेष ऐप के लिए काम कर रहा है इसलिए मैं इस उत्तर को स्वीकार कर रहा हूं।
एरिक पेडर्सन

मुझे यह पंक्ति कहाँ लिखनी चाहिए?
बग्स हैपन

@BugsHappen, यह आपके ग्रेडल बिल्ड फ़ाइल में जाएगा। आप यहाँ ProGuard के बारे में अधिक पढ़ सकते हैं: developer.android.com/tools/help/proguard.html
डिक लुकास

7

जैसा कि # 150 से https://code.google.com/p/android/issues/detail?id=78377 कहा गया है

क्योंकि-क्लास क्लास से सावधान! Android.support.v7.internal.view.menu। **। वहाँ कई कक्षाएं हैं जो एपकॉम के संसाधनों से संदर्भित हैं।

बेहतर समाधान इसके बजाय निम्नलिखित पंक्तियों को जोड़ रहा है:

-keep class !android.support.v7.internal.view.menu.MenuBuilder, !android.support.v7.internal.view.menu.SubMenuBuilder, android.support.v7.** { *; }
-keep interface android.support.v7.** { *; }

मेरे परीक्षणों में, जेनरेटेड प्रोगार्ड मैपिंग फ़ाइल की समीक्षा के आधार पर, इस सुझाए गए प्रॉपगार्ड कॉन्फ्यू में मीनूबर्स्ट क्लास के नाम को बाधित करने का नतीजा नहीं है, हालांकि यह सबमेन्यूब्युटर्ब
एंडी डेनी

पता लगा लिया; मेरा जवाब देखिए।
एंडी डेनी

हे एंडी मेरे पास एक ही मुद्दा है, मेनूब्यूफ़ को बाधित नहीं किया गया है, लेकिन अन्य हैं, मन मुझे बता रहा है कि आपने इसे कैसे हल किया? धन्यवाद
किंग

6

चूंकि AppCompat जार में पैकेज हटा दिया गया था।Appcompat 23.1.1.internal

प्रोगार्ड का उपयोग करके अपडेट किया गया फिक्स:

#FOR APPCOMPAT 23.1.1:
-keep class !android.support.v7.view.menu.*MenuBuilder*, android.support.v7.** { *; }
-keep interface android.support.v7.* { *; }


1

अगर कोई भी बिना किसी समाधान के प्रयोग करने में दिलचस्पी रखता है।

पढ़ें लिंक मैंने अपने एक ऐप में यह कोशिश की है जिसने onCreate () में setSupportActionBar (टूलबार) पर अपवाद दिया है।

इसकी बहुत सरल बस कॉल के चारों ओर की कोशिश पकड़ ब्लॉक जोड़ने

try {

 setSupportActionBar(toolbar);

} catch (Throwable t) {

 // WTF SAMSUNG!

}

0

मुझे Tecno P9 पर एक ही मुद्दे का सामना करना पड़ा, लेकिन निर्माण उपकरण 24 का उपयोग करने के बाद और अपने समर्थन पुस्तकालय के लिए मैंने 24.2.0 का उपयोग किया, यह तय हो गया था।


-2

अपनी परियोजना के संकलित एसडीके संस्करण को "एपीआई 18: (जेलीबीन)" में बदलें

डिफ़ॉल्ट "लॉलीपॉप" पर सेट है

अब तक इसने Qmobile i9 पर मेरी समस्या हल कर दी

कदम

  1. अपनी परियोजना पर राइट क्लिक करें और ओपन मॉड्यूल सेटिंग्स चुनें (या F4 दबाएं)
  2. गुण टैब में संकलित Sdk संस्करण

-3

गतिविधि के साथ AppCompatActivity बदलें

इससे मुझे मदद मिली।


सस्ता तय। वह AppCompat का उपयोग कर सकता है क्योंकि वह API <11 या कुछ का समर्थन करना चाहता है। इससे वह विचार टूट जाएगा।
सूफियान

मुझे लगता है, अगर यह सूफियान के नाम के कारण से सहमत है, तो यह काफी बुरा है। लेकिन नष्ट होने के लिए इतना बुरा नहीं है।
गंगानुस

-3

बदलने के

public class class_name extends AppCompatActivity
{

.........

}

साथ में

public class class_name extends Activity
{

.........

}

इससे मुझे मदद मिली।


कृपया इसी प्रश्न पर अपने उत्तरों की नकल करना बंद करें।
सूफियान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.