2015-09-15 9 views
8

Mam Android aplikacji, która niedawno uaktualniony do systemu Gradle budować między innymi, takie jak przy użyciu nowszej wersji narzędzi budowania itdjava.lang.NoClassDefFoundError na Android 4.4 lub niższej

My targetSdkVersion ma 19, więc powinienem być dobry na Androida 4.4 i wyżej. Kiedy uruchamiam przy użyciu urządzenia 5.0+, wszystko jest w porządku; jednak system Android 4.4 zawsze zawiesza się z pewnym błędem o błędzie java.lang.NoClassDefFoundError.

W teście usunąłem oryginalną klasę, na którą skarżyła się jej brak, tylko po to, aby spowodować awarię, wskazując na inną klasę.

Pierwszą klasą, na której się zawiesił, była wewnętrzna klasa prywatna w bibliotece innej firmy. Po usunięciu tej biblioteki wskazywało na wewnętrzną klasę prywatną w samej aplikacji.

Podsumowując:

  • aplikacja działa poprawnie na Androidzie 5.0+. Rozbija się o java.lang.NoClassDefFoundError na poziomie mniejszym niż 5.0.
  • W dotychczasowych testach NoClassDef zawsze odnosi się do klasy wewnętrznej - jest to oparte na dwóch testach, więc może nie być niczym konkretnym.

Oto mój android.manifest file: https://gist.github.com/rscott78/19dd88ccde66172d9332

Odpowiedz

19

Na co warto, to może się zdarzyć, kiedy włączyć obsługę multi-dex bez dodawania poprawnego kodu w swojej klasie aplikacji.

Tworzenie klasy, które nie dziedziczą z aplikacji, a następnie dodać tę funkcję:

@Override 
protected void attachBaseContext(Context base) { 
    super.attachBaseContext(base); 
    MultiDex.install(this); 
} 

W swojej AndroidManifest, dodać atrybut name do tagu aplikacji:

<application name=".MyApplication" 
+0

dla tych, którzy są nadal musi dodać multidexenabled, jednocześnie naprawiając ten błąd, to rozwiązanie całkowicie uratuje Twój dzień! – user724861

+0

Ale jakie dodatkowe znaczenie miał ten kod? chciałem tylko wiedzieć. I tak, ktokolwiek chce włączyć multidex wraz z naprawą, to jest to rozwiązanie. +1 –

+0

Tak naprawdę wdrożyliśmy naszą aplikację, ale nadal mamy awarię. Czemu? –

Powiązane problemy