2015-09-01 7 views
6

Das Problem, mit dem ich konfrontiert ist, dass meine Android-Anwendung funktioniert gut auf Geräten mit API 5.0 und höher, aber stürzt auf Geräte mit Kitkat (4.4) und die entsprechenden niedrigeren Versionen.Ich weiß dass es irgendwie mit den Build-Tools in meiner Gradle-Datei zusammenhängt, aber immer noch nicht in der Lage ist, das Problem herauszufinden. Könnte mir bitte jemand dabei helfen.App Absturz auf Android API weniger als 5.0 (Lollipop)

Das ist mein gradle Datei,

 buildscript { 
    repositories { 
     maven { url 'https://maven.fabric.io/public' } 
    } 

    dependencies { 
     classpath 'io.fabric.tools:gradle:1.+' 
    } 
} 
apply plugin: 'com.android.application' 
apply plugin: 'io.fabric' 
apply plugin: 'android' 

repositories { 
    maven { url 'https://maven.fabric.io/public' } 
    maven { url 'http://clinker.47deg.com/nexus/content/groups/public' } 
} 


android { 
    compileSdkVersion 22 
    buildToolsVersion '22.0.1' 

    defaultConfig { 
     applicationId "com.abc.example" 
     minSdkVersion 10 
     targetSdkVersion 22 
     multiDexEnabled true 
     versionCode 12 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      multiDexEnabled true 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
    android { 
     packagingOptions { 
      exclude 'META-INF/LICENSE' 
     } 
    } 
    android { 
     packagingOptions { 
      exclude 'META-INF/NOTICE' 
     } 
    } 
} 



dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.android.support:appcompat-v7:22.2.0' 
    compile('com.fortysevendeg.swipelistview:swipelistview:[email protected]') { 
     transitive = true 
     exclude module: 'httpclient' 
     exclude group: 'httpclient' 
    } 

    compile 'com.squareup.retrofit:retrofit:1.9.0' 
    compile 'com.squareup.okhttp:mockwebserver:2.3.0' 
    compile 'de.hdodenhof:circleimageview:1.2.2' 
    compile 'com.android.support:multidex:1.0.1' 
    compile 'com.google.android.gms:play-services-maps:7.5.0' 
    compile files('libs/bitlyj-2.0.0.jar') 

} 

Auch diesen Fehler beim Projekt

gebaut
Caused by: java.lang.NoClassDefFoundError: com.package.R$styleable 
      at com.package.widgets.StyleableTextView.<init>(StyleableTextView.java:23) 

Dies wird StyleableTextView Klasse,

public class StyleableTextView extends TextView { 

    public StyleableTextView(Context context) { 
     super(context); 
    } 

    public StyleableTextView(Context context, AttributeSet attrs) { 
     super(context.getApplicationContext(), attrs); 
     UiUtil.setCustomFont(StyleableTextView.this, context, attrs, 
       R.styleable.com_eywa_wonk_widgets_StyleableTextView, 
       R.styleable.com_eywa_wonk_widgets_StyleableTextView_font); 
    } 

    public StyleableTextView(Context context, AttributeSet attrs, int defStyle) { 
     super(context.getApplicationContext(), attrs, defStyle); 
     UiUtil.setCustomFont(StyleableTextView.this, context, attrs, 
       R.styleable.com_eywa_wonk_widgets_StyleableTextView, 
       R.styleable.com_eywa_wonk_widgets_StyleableTextView_font); 
    } 

} 

Dies ist die styleable in attrs,

<resources> 

    <attr name="font" format="string" /> 

<declare-styleable name="com.package.widgets.StyleableTextView"> 
     <attr name="font" /> 

    </declare-styleable> 

</resources> 
+0

Können Sie genauer über den Fehler sein? Post the stack trace – forcewill

+0

Ja sicher.Ich habe ein benutzerdefiniertes Format für eine benutzerdefinierte Textansicht in meiner Attrs-Datei im Ordner "values" erstellt. Das Stilable wird in Geräten mit 5.0 erkannt, aber in Geräten mit API 4.4 und weniger, es sagt, kann die benutzerdefinierte TextView in Ihrer App zusammen mit dem Fehler nicht finden und ich bin ziemlich sicher, ich habe es als "com.package.CustomTextView" verwendet –

+0

Hat der Werte-Ordner einen Versionszähler ? Wie/Werte-v22? Wenn dies der Fall ist, müssen Sie etwas für andere Versionen erstellen oder das benutzerdefinierte Styleable nur für Lollipop-Geräte hinzufügen. – Knossos

Antwort

24

Wenn Sie verwenden, dann versuchen Sie, Ihre Anwendungsklasse mit MultiDexAppication statt Application und unter Methode überschreiben, erweitern diese erforderlich für Android unter 5.0 (weil 5.0 und höher Unterstützung für die Multidex)

und in Abhängigkeit gruenzen hinzufügen, um diese

Kompilierung ‚com.android.support:multidex:1.0.1‘

+1

Mann, dieser Beitrag ist ein Lebensretter. Ich habe 2 Tage lang nach einer Lösung gesucht. Ich war mir auch nicht sicher. – drulabs

0

Ein Problem, das Sie Gesicht kann, ist diese, wie explained in the documentation:

multiDexEnabled true 

Applications that use multidex may not start on devices that run versions of the platform earlier than Android 4.0 (API level 14) due to a Dalvik linearAlloc bug (Issue 22586). If you are targeting API levels earlier than 14, make sure to perform testing with these versions of the platform as your application can have issues at startup or when particular groups of classes are loaded. Code shrinking can reduce or possibly eliminate these potential issues.

+0

Ohh .. könnte dies der Grund sein? .. lass mich überprüfen und lassen Sie es wissen .. –

+0

wenn multiDexEnabled entfernt dann bauen Begegnungen ein Fehler wie "Fehler: Ausführung fehlgeschlagen für Task": app: dexDebug '. > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Prozess' command '/ usr/lib/jvm/java-7-openjdk-amd64/bin/java '' endete mit einem Wert ungleich Null 2 ​​" –

3

ich dieses Problem nur hatte und löste es, indem Sie die folgende Zeile zu den Anwendungen Hinzufügen AndroidManifest.xml als Attribut auf dem application tag:

android:name="android.support.multidex.MultiDexApplication" 

Ich habe zwei Apps, die die gleichen Ressourcen und Bibliotheken teilen. Der einzige Unterschied besteht in der exponierten Schnittstelle. Ich habe Multidex zu beiden hinzugefügt, aber vergessen, das obige Attribut in das Manifest für eins zu setzen. Der NoClassDefFoundError hat nicht viel geholfen.

Sie können auch die folgende Besuche: http://developer.android.com/tools/building/multidex.html

0

Diese nicht auf das bestimmte Szenario relevant sein könnten, aber als die Überschrift der Frage auf das Problem bezieht sich I und der Grund, begegnete ich auf diese Frage kam. Ich beantworte es hier. Ich stieß auf ein ähnliches Problem, aber in meinem Fall die Erweiterung Multidex-Anwendung, und die Freigabe von Multidex waren nicht die Aufgabe. Ich habe am Ende eine plugin für Zählmethoden in meinem Projekt verwendet. Dadurch erkannte ich, dass ich nicht in der Nähe der 65K-Grenze bin und der Bug mit etwas anderem zusammenhängt. Ich fand this Seite, wo sie jemand über Deaktivieren von Instant-Run aus Einstellungen gesprochen hatte, die tatsächlich die Arbeit für mich erledigt hat. Jetzt verwende ich nicht die Multi-Dex-Bibliothek und die Builds sind auch schneller. Wenn das Problem erneut auftritt, aktualisiere ich die Antwort entsprechend.