2015-09-28 11 views
7

पर एंड्रॉइड ग्रैडल मल्टीडेक्स बिल्ड समस्या मेरे पास एक प्रोजेक्ट है जिसमें मैंने से बचने के लिए और productFlavors (dev API 21 और prod API 19) को अनुकूलन के लिए सक्षम किया है। API 21 यानी देव स्वाद पर मेरी परियोजना का निर्माण सफल है, लेकिन पर API 19 यानी prod स्वाद, यह लगातार मुझे अपवाद एप्लिकेशन कार्य में दे रहा है shrink{component}MultiDexComponentsएपीआई 1 9

पूरा त्रुटि लॉग:

:app:shrinkProdDebugMultiDexComponents FAILED 

FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':app:shrinkProdDebugMultiDexComponents'. 
> java.io.IOException: Can't read [{Project Path}/app/build/intermediates/multi-dex/prod/debug/allclasses.jar] (Can't process class [com/olivephone/office/a/b/e/p.class] (Unknown verification type [17] in stack map frame)) 

build.gradle

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 23 
    buildToolsVersion '23.0.0' 
    defaultConfig { 
     applicationId '{Project Name}' 
     minSdkVersion 15 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
     multiDexEnabled true 
    } 
    productFlavors { 
     dev { 
      // dev utilizes minSDKVersion = 21 to allow the Android gradle plugin 
      // to pre-dex each module and produce an APK that can be tested on 
      // Android Lollipop without time consuming dex merging processes. 
      minSdkVersion 21 
     } 
     prod { 
      // The actual minSdkVersion for the application. 
      minSdkVersion 19 
     } 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.android.support:appcompat-v7:23.0.1' 
    compile 'com.android.support:recyclerview-v7:23.0.1' 
    compile 'com.android.support:cardview-v7:23.0.1' 
    compile 'com.oguzdev:CircularFloatingActionMenu:1.0.2' 
    compile 'com.google.code.gson:gson:2.3.1' 
    compile 'com.google.android.gms:play-services:8.1.0' 
    compile 'com.android.support:multidex:1.0.1' 
    compile files('libs/linkedin-j-android.jar') 
    compile files('libs/itsrts-pptviewer.jar') 
    compile files('libs/signpost-core-1.2.1.1.jar') 
    compile 'org.twitter4j:twitter4j-core:4.0.2' 
    compile files('libs/universal-image-loader-1.9.2-SNAPSHOT-with-sources.jar') 
    compile files('libs/dropbox-android-sdk-1.6.3.jar') 
    compile files('libs/json_simple-1.1.jar') 
    compile 'com.joanzapata.pdfview:android-pdfview:[email protected]' 
    compile 'com.facebook.android:facebook-android-sdk:4.1.0' 
} 

कोई मदद किसी को भी कृपया ??

+1

स्वच्छ निर्माण का प्रयास करें। – QAMAR

+1

पहले से ही किया !!कोई भाग्य नहीं –

+0

क्या आप प्रोगुआर्ड का उपयोग कर रहे हैं? –

उत्तर

0

नीचे के रूप में अपने निर्भरता में बदल दें:

संपादित निर्भरता:

compile fileTree(dir: 'libs', include: ['*.jar']) 
compile 'com.android.support:appcompat-v7:23.0.1' 
compile 'com.android.support:recyclerview-v7:23.0.1' 
compile 'com.android.support:cardview-v7:23.0.1' 
compile 'com.oguzdev:CircularFloatingActionMenu:1.0.2' 
compile 'com.google.code.gson:gson:2.3.1' 
compile 'com.google.android.gms:play-services:8.1.0' 
compile 'com.android.support:multidex:1.0.1' 
compile 'com.googlecode.linkedin-j:linkedin-j-core:1.0.416' 
compile 'oauth.signpost:signpost-core:1.2.1.2' 
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.4' 
compile 'com.googlecode.json-simple:json-simple:1.1' 
compile 'org.twitter4j:twitter4j-core:4.0.2' 
compile files('libs/itsrts-pptviewer.jar') 
compile files('libs/dropbox-android-sdk-1.6.3.jar') 
compile 'com.joanzapata.pdfview:android-pdfview:[email protected]' 
compile 'com.facebook.android:facebook-android-sdk:4.1.0' 

कारण है कि 'FileTree संकलन (dir:' है libs ', में शामिल हैं: [' * .jar '])' शामिल ग्रेड करने के लिए सभी जार फ़ाइल libs फ़ोल्डर में है ..

धन्यवाद। !! Android 5.0 के लिए

+0

अभी भी इस मुद्दे को हल नहीं कर रहा है। कोई अन्य कामकाज? –

8

Multidex समर्थन और उच्च

Android 5.0 और इसके एक क्रम बुलाया एआरटी जो मूल रूप आवेदन APK फ़ाइलों से कई डेक्स फ़ाइलें लोड का समर्थन करता है का उपयोग करता है। एआरटी एप्लिकेशन इंस्टॉल समय पर प्री-संकलन करता है जो कक्षाओं (.. एन)। डीएक्स फाइलों के लिए स्कैन करता है और एंड्रॉइड डिवाइस द्वारा निष्पादन के लिए उन्हें एकल .oat फ़ाइल में संकलित करता है। एंड्रॉइड 5.0 रनटाइम पर अधिक जानकारी के लिए, एआरटी पेश करना देखें।

यही वजह है कि अपने अनुप्रयोग एपीआई स्तर पर ठीक काम कर रहा है 21.

Multidex समर्थन मंच से पहले की 5,0

संस्करण Android के लिए पहले से Android 5.0 Dalvik का उपयोग करें एप कोड निष्पादित करने के लिए रनटाइम । डिफ़ॉल्ट रूप से, Dalvik प्रति एपीके एक classes। Dex बाइटकोड फ़ाइल में ऐप्स को सीमित करता है। इस सीमा के आसपास पहुंचने के लिए, आप मल्टीडेक्स समर्थन लाइब्रेरी का उपयोग कर सकते हैं, जो आपके ऐप की प्राथमिक डीईएक्स फ़ाइल का हिस्सा बन जाता है और फिर अतिरिक्त डीईएक्स फाइलों और उनके पास मौजूद कोड तक पहुंच प्रबंधित करता है।

तो, सबसे पहले यह सुनिश्चित करना कि आपने सही निर्भरता आयात की है, ऐसा लगता है कि आपने ऐसा किया है।

dependencies { 
    compile 'com.android.support:multidex:1.0.0' 
} 

अपने प्रकट में आवेदन तत्व को multidex समर्थन पुस्तकालय से MultiDexApplication वर्ग जोड़ें।

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.android.multidex.myapplication"> 
    <application 
     ... 
     android:name="android.support.multidex.MultiDexApplication"> 
     ... 
    </application> 
</manifest> 

कि करने के लिए वैकल्पिक, अपने अनुप्रयोग Application वर्ग फैली हैं, तो आप attachBaseContext() विधि ओवरराइड और सक्षम करने के लिए MultiDex.install(this) कॉल कर सकते हैं।

public void onCreate(Bundle arguments) { 
    MultiDex.install(getTargetContext()); 
    super.onCreate(arguments); 
    ... 
} 

मुझे आशा है कि इससे आपकी मदद मिलेगी।

+1

इस कोशिश की कोशिश की लेकिन एक ही त्रुटि –

+0

धन्यवाद .. भुव्स मैं बस अपनी आवेदन फ़ाइल में कोड नीचे जोड़ता हूं, यह चाल करता है, इसमें कोई बंडल नहीं है, जिसमें कोई अटैचमेंट नहीं है BaseContext() और इससे पहले कि मैं केवल अपने निर्माण में MULTIDEX JAR का उपयोग कर रहा था लेकिन मेरा ऐप रन समय पर एपीआई 21 से नीचे दुर्घटनाग्रस्त हो रहा था .. अब इसके कामकाज के पीछे कारण नहीं पता है। सार्वजनिक शून्य पर क्रेट() { \t \t MultiDex.install (यह); \t \t super.onCreate(); \t \t // सिंगलटन \t \t sInstance = this; \t} – Ancee

1

एपीआई 21, :app:shrinkProdDebugMultiDexComponents कमांड को एपीआई 21 के रूप में नहीं कहा जाता है जो पहले ही दलविक के बजाय एआरटी का उपयोग करता है। इस प्रकार, मूल रूप से multidex का समर्थन करते हैं।

21 से नीचे एपीआई के लिए, तो :app:shrinkProdDebugMultiDexComponents आदेश निष्पादित किया गया है। अपने build.gradle की जांच करना सबकुछ ठीक दिखता है, जो मुझे निम्नलिखित में लाता है।

क्या आपने मल्टीडेक्स समर्थन को सही तरीके से सेटअप किया है?

क्या आपने मल्टीडेक्स का समर्थन करने के लिए अपना मैनिफेस्ट सेटअप किया है?

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.android.multidex.myapplication"> 
    <application 
    ... 
    android:name="android.support.multidex.MultiDexApplication"> 
    ... 
    </application> 
</manifest> 

या यदि आप वास्तव में आवेदन वर्ग को विस्तारित करने से यह कर सकते हैं:

public class MyApplication extends Application { 
    ... 
    @Override 
    protected void attachBaseContext(Context base) { 
     super.attachBaseContext(base); 
     MultiDex.install(this); 
    } 
    ...  
} 

या का उपयोग इस "पहले से बने" संस्करण

public class MyApplication extends MultiDexApplication{ 

...  

} 
+2

पहले से ही किया गया है। कोई भाग्य –

+0

प्रयुक्त होता है लेकिन काम नहीं कर रहा है। –

0

shrinkProdDebugMultiDexComponents कार्य invokes Proguard, इसलिए यह त्रुटि प्रोगार्ड code से आता है।

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

वर्कअराउंड के लिए, this समान बग की जांच करें। हालांकि यह Wontfix स्थिति के साथ बंद था, this blogpost वर्णन करता है कि प्रोगार्ड कोड को कैसे पैच करना है।

इसी तरह के मुद्दों पर एरिक लाफोर्ट्यून (प्रोगुआर्ड के लेखक) द्वारा this और that उत्तरों की जांच करें।

1

मैं इस के पीछे तर्क में झाँका नहीं किया है, लेकिन मेरे मामले में, यह मेरी build.gradle फ़ाइल में compile 'com.android.support:appcompat-v7:25.3.1' और compile 'com.google.android.gms:play-services:10.2.4' के संस्करण संघर्ष की वजह से किया गया था।

केवल सक्षम करने के लिए मेरे लिए काम नहीं किया। अन्य समाधानों की खोज करते समय, मैंने कुछ लोगों को play-services के संस्करण संघर्ष के व्यापक मुद्दे के बारे में शिकायत की। इसलिए, मैंने कोड परिवर्तनों को पीछे हटाना शुरू कर दिया और आखिरकार play-services संस्करण 10.2.4 से 10.2.1 और यह मेरे लिए काम किया।

0

क्रैश समस्या से ऊपर हल किया गया। मैंने कुछ अप्रयुक्त निर्भरता को हटा दिया है और आरएक्स जावा निर्भरता io.reactivex.rxjava भी हटा दिया है। आरएक्स जावा के बदले में मैंने अपने पैकेज में कुछ डमी क्लास जोड़े हैं जो पहले से ही https://realm.io/docs/java/latest वर्णित हैं।

// File 1 
package io.reactivex; 
public class Flowable { 
} 
// File 2 
package io.reactivex; 
public class Observable { 
} 
// File 3 
package io.reactivex; 
public enum BackpressureStrategy { 
    LATEST; 
} 
संबंधित मुद्दे