2015-09-28 7 views
7

Ich habe ein Projekt, in dem ich aktiviert habe, um 65k limit und auch productFlavors (dev API 21 und prod API 19) für die Anpassung zu vermeiden. Aufbau meines Projektes auf API 21 dh dev Geschmack ist erfolgreich, aber auf API 19 dh prod Geschmack, es gibt mir ständig Ausnahme in app Aufgabe shrink{component}MultiDexComponentsAndroid Gradle Multiidex Build-Problem auf API 19

komplettes Fehlerprotokoll:

: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' 
} 

Irgendwelche Hilfe bitte irgendjemand ??

+1

versuchen Sie sauber zu bauen. – QAMAR

+1

Bereits getan !!Kein Glück dort –

+0

Verwenden Sie Proguard? –

Antwort

0

Bitte ändern Sie Ihre Abhängigkeiten wie folgt:

Edited Abhängigkeiten:

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' 

Grund ist, dass 'filetree kompilieren (dir: 'libs', schließen ein: [' * .jar '])' enthält Alle JAR-Datei zu grandle das ist in libs-Ordner ..

Danke. !!

+0

Immer noch nicht das Problem lösen. Eine andere Problemumgehung? –

8

Multidex Unterstützung für Android 5.0 und höher

Android 5.0 und höher verwendet eine Laufzeit ART genannt, die nativ unterstützt mehr dex-Dateien aus der Anwendung APK-Dateien geladen werden. ART führt vor der Kompilierung zur Anwendungsinstallationszeit durch, die nach Klassen (.. N) .dex-Dateien sucht und sie in eine einzige .oat-Datei für die Ausführung durch das Android-Gerät kompiliert. Weitere Informationen zur Android-Laufzeitumgebung 5.0 finden Sie unter Einführung in ART.

Dies ist der Grund, warum Ihre Anwendung auf API-Ebene funktioniert prima 21.

Multidex Träger vor der Dalvik vor Android 5.0 verwenden 5,0

Versionen der Plattform auf Android Laufzeit zum Ausführen von App-Code. Standardmäßig beschränkt Dalvik Apps auf eine einzelne classes.dex Bytecode-Datei pro APK. Um diese Einschränkung zu umgehen, können Sie die Multidex-Support-Bibliothek verwenden, die Teil der primären DEX-Datei Ihrer App wird und verwaltet dann Zugriff auf die zusätzlichen DEX-Dateien und den Code enthalten.

Also, zuerst stellen Sie sicher, dass Sie korrekte Abhängigkeit importiert haben, die es scheint, dass Sie es getan haben.

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

In Ihrem Manifest die MultiDexApplication Klasse aus der multidex Support-Bibliothek zur Anwendung Elemente hinzufügen.

<?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> 

Alternative zu, dass, wenn Ihre App die Application-Klasse erweitert, können Sie die attachBaseContext() Methode überschreiben und MultiDex.install(this) zu ermöglichen nennen.

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

Ich hoffe, es wird Ihnen helfen.

+1

Versucht dies aber gleichen Fehler –

+0

Danke .. Bhuvesh Ich füge einfach unten Code in meiner Bewerbungsdatei es tun den Trick, kein BUNDLE in oncreate keine attachBaseContext() in diesem und davor war ich nur mit MULTIDEX JAR in meinem Build aber meine App stürzte während der Laufzeit unterhalb von api 21 ab. Jetzt weiß seine Arbeitsweise nicht, warum. public void onCreate() { \t \t MultiDex.install (this); \t \t super.onCreate(); \t \t // Initialisierung des Singleton \t \t sInstance = this; \t} – Ancee

1

In API 21, :app:shrinkProdDebugMultiDexComponents Befehl wird nicht aufgerufen, da API 21 bereits ART anstelle von Dalvik verwendet. So unterstützt native Multidex. Für die API unter 21 wird der Befehl :app:shrinkProdDebugMultiDexComponents ausgeführt. Ihre build.gradle alles prüfen sieht gut aus, was mich auf die folgenden bringt. richtig

Haben Sie multidex Unterstützung Setup?

Haben Sie Setup-Manifest Multidex zu unterstützen?

<?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> 

ODER wenn Sie tatsächlich die Anwendungsklasse erstreckt, können Sie dies tun:

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

oder benutzen Sie diese "pre-built" Version

public class MyApplication extends MultiDexApplication{ 

...  

} 
+2

Bereits getan. Kein Glück –

+0

Benutzt, aber funktioniert nicht. –

0

Die shrinkProdDebugMultiDexComponents Aufgabe invokes Proguard, so Dieser Fehler kommt von Proguard code.

Meine Vermutung wird sein, dass Sie nicht die neueste Version von Olive Office SDK verwenden (die wahrscheinlich mit fehlerhafter oder falsch konfigurierter Proguard-Version verschleiert ist). Wenn dies der Fall ist, besorgen Sie sich die neueste Version vom SDK-Entwickler.

Zur Problemumgehung, überprüfen Sie this ähnliche Fehler. Obwohl es mit dem Wontfix-Status geschlossen wurde, beschreibt this blogpost, wie der Proguard-Code zu patchen ist.

Überprüfen Sie auch this und that Antworten von Eric Lafortune (Proguards Autor) auf ähnliche Probleme.

1

Ich habe nicht in die Logik dahinter lugte, aber in meinem Fall war es aufgrund Version Konflikte compile 'com.android.support:appcompat-v7:25.3.1' und compile 'com.google.android.gms:play-services:10.2.4' in meiner build.gradle Datei.

Nur aktivieren funktionierte nicht für mich. Bei der Suche nach den anderen Lösungen habe ich einige Leute gefunden, die sich über das seltsame Problem des Versionskonflikts play-services beschweren. Also, ich habe die Code-Änderungen rückgängig gemacht und schließlich play-services Version von 10.2.4 zu 10.2.1 geändert und es funktionierte für mich.

0

oben Absturz-Problem gelöst. Ich habe einige unbenutzte Abhängigkeit entfernt und auch entfernt rx Java-Abhängigkeit io.reactivex.rxjava. Als Ersatz für Rx Java habe ich in meinem Paket einige Dummy-Klassen hinzugefügt, die hier bereits beschrieben sind 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; 
} 
Verwandte Themen