2016-04-27 3 views
2

Когда я скомпилирую свое приложение напрямую, оно работает на всех устройствах. Но когда я делаю билд через ткань и установить мое приложение с бета-приложения Fabric я получил эту аварию сразу после запуска моего приложения:java.lang.NoClassDefFoundError после установки приложения из Fabric Beta

java.lang.NoClassDefFoundError: com.android.tools.fd.runtime.AppInfo 
    at com.android.tools.fd.runtime.BootstrapApplication.attachBaseContext(BootstrapApplication.java:229) 
    at android.app.Application.attach(Application.java:201) 
    at android.app.Instrumentation.newApplication(Instrumentation.java:998) 
    at android.app.Instrumentation.newApplication(Instrumentation.java:982) 
    at android.app.LoadedApk.makeApplication(LoadedApk.java:502) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4720) 
    at android.app.ActivityThread.access$1500(ActivityThread.java:166) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1343) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:136) 
    at android.app.ActivityThread.main(ActivityThread.java:5584) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) 
    at dalvik.system.NativeStart.main(Native Method) 

Это происходит только на устройствах версии 4.4 и ниже. У меня также были проблемы, связанные с this. Считаете ли вы, что произошла авария?

это мой проект build.gradle:

buildscript { 
    repositories { 
     jcenter() 
     maven { url 'https://maven.fabric.io/public' } 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:2.0.0' 
     classpath 'io.fabric.tools:gradle:1.+' 
     // NOTE: Do not place your application dependencies here; they belong 
     // in the individual module build.gradle files 
    } 
} 

allprojects { 
    repositories { 
     jcenter() 
    } 
} 

task clean(type: Delete) { 
    delete rootProject.buildDir 
} 

и это мое приложение build.gradle:

apply plugin: 'com.android.application' 
apply plugin: 'io.fabric' 
... 
buildscript { 
    repositories { 
     jcenter() 
     mavenCentral() 
     maven { url 'https://maven.fabric.io/public' } 
    } 
    dependencies { 
     classpath 'io.fabric.tools:gradle:1.+' 
    } 
} 

repositories { 
    mavenCentral() 
    maven { url 'https://maven.fabric.io/public' } 
} 

ответ

8

Если вы используете Android Studio версии 2.0 или выше, вы должны отключить мгновенный запуск & попытайтесь построить снова.

Instant Run пытается выполнить горячую замену вашего кода; это приводит к перемещению класса приложения.

Чтобы отключить Instant Run Перейти Файл> Настройки> Сборка, выполнение, развертывание> Instant Run> Снимите флажок «Включить мгновенный запуск»

+0

Работал для меня :) – LeonardoSibela

+0

Я не понимаю, как это имеет отношение к вопросу, опубликованному. –

+0

Привет, @EthanHolshouser Мгновенный запуск был в то время багги, и сборка не создавала инкрементные сборки правильно. Это действительно хороший инструмент для экономии времени разработки. Дополнительную информацию о мгновенных запусках можно найти здесь: https://medium.com/google-developers/instant-run-how-does-it-work-294a1633367f – NAUSHAD

0

NoClassDefFoundError - как правило, это связано с multidex вопросов. Ответьте на этот вопрос: Multidex

+0

Если я получаю эту ошибку, когда я скомпилировать и запустить приложение непосредственно на тех, кто телефон? – tufekoi

+0

@Tuff Я не уверен, возможно, сборка из ткани добавит некоторый код (библиотеки) и с тем, что вы превысите ограничение на 64 КБ. Вы можете попробовать запустить скрипт dex-method-count для обоих файлов apk и сравнить результаты. Во всяком случае, я бы постарался исправить выше, прежде всего, требуется всего 2 миллиона, чтобы скорректировать код с помощью multidex. – 3mpty

+0

да, я сделал это, но приложение все еще падает – tufekoi