Подтвердить что ты не робот

Новый Relic Class не найден... Я даже не использую новую реликвию

Я даже не использую новую реликвию, и я получаю ошибки для них. Это произошло внезапно.

Я использую последнюю версию Android Studio (0.61). Даже моя главная ветвь имеет ту же ошибку. На моей машине есть другие проекты, которые используют новую реликвию, но не эту. Этот проект никоим образом не использует новую реликвию, а не похожую зависимость gradle.

Я попытался очистить мой кеш gradle и повторно загрузить все сторонние библиотеки, не работал.

StackTrace:

06-15 01:05:54.872  20117-20117/com.waxwings.happyhour.staging D/HappyHourApplication﹕ CREATE TABLE job_holder (_id integer  primary key autoincrement , `priority` integer, `group_id` text, `run_count` integer, `base_job` byte, `created_ns` long, `delay_until_ns` long, `running_session_id` long, `requires_network` integer );
    06-15 01:05:54.874  20117-20117/com.waxwings.happyhour.staging D/AndroidRuntime﹕ Shutting down VM
    06-15 01:05:54.877  20117-20117/com.waxwings.happyhour.staging E/AndroidRuntime﹕ FATAL EXCEPTION: main
        Process: com.waxwings.happyhour.staging, PID: 20117
        java.lang.NoClassDefFoundError: Failed resolution of: Lcom/newrelic/agent/android/instrumentation/SQLiteInstrumentation;
                at com.path.android.jobqueue.persistentQueue.sqlite.DbOpenHelper.onCreate(DbOpenHelper.java:42)
                at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
                at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
                at com.path.android.jobqueue.persistentQueue.sqlite.SqliteJobQueue.<init>(SqliteJobQueue.java:42)
                at com.path.android.jobqueue.JobManager$DefaultQueueFactory.createPersistentQueue(JobManager.java:594)
                at com.path.android.jobqueue.JobManager.<init>(JobManager.java:77)
                at com.waxwings.happyhour.HappyHourApplication.configureJobManager(HappyHourApplication.java:84)
                at com.waxwings.happyhour.HappyHourApplication.onCreate(HappyHourApplication.java:38)
                at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1030)
                at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4425)
                at android.app.ActivityThread.access$1500(ActivityThread.java:139)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1270)
                at android.os.Handler.dispatchMessage(Handler.java:102)
                at android.os.Looper.loop(Looper.java:136)
                at android.app.ActivityThread.main(ActivityThread.java:5102)
                at java.lang.reflect.Method.invoke(Native Method)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
         Caused by: java.lang.ClassNotFoundException: Didn't find class "com.newrelic.agent.android.instrumentation.SQLiteInstrumentation" on path: DexPathList[[zip file "/data/app/com.waxwings.happyhour.staging-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.waxwings.happyhour.staging-1, /vendor/lib, /system/lib]]
                at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
                at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
                at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
                at com.path.android.jobqueue.persistentQueue.sqlite.DbOpenHelper.onCreate(DbOpenHelper.java:42)
                at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
                at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
                at com.path.android.jobqueue.persistentQueue.sqlite.SqliteJobQueue.<init>(SqliteJobQueue.java:42)
                at com.path.android.jobqueue.JobManager$DefaultQueueFactory.createPersistentQueue(JobManager.java:594)
                at com.path.android.jobqueue.JobManager.<init>(JobManager.java:77)
                at com.waxwings.happyhour.HappyHourApplication.configureJobManager(HappyHourApplication.java:84)
                at com.waxwings.happyhour.HappyHourApplication.onCreate(HappyHourApplication.java:38)
                at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1030)
                at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4425)
                at android.app.ActivityThread.access$1500(ActivityThread.java:139)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1270)
                at android.os.Handler.dispatchMessage(Handler.java:102)
                at android.os.Looper.loop(Looper.java:136)
                at android.app.ActivityThread.main(ActivityThread.java:5102)
                at java.lang.reflect.Method.invoke(Native Method)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
        Suppressed: java.lang.ClassNotFoundException: com.newrelic.agent.android.instrumentation.SQLiteInstrumentation
                at java.lang.Class.classForName(Native Method)
                at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
                at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
                at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
                ... 19 more
         Caused by: java.lang.NoClassDefFoundError: Class "Lcom/newrelic/agent/android/instrumentation/SQLiteInstrumentation;" not found
                ... 23 more

build.gradle для модуля:

apply plugin: 'android'
apply plugin: 'newrelic'

android {
    compileSdkVersion 19
    buildToolsVersion "19.1.0"

    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"

    }

    buildTypes {
        release {
            runProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }

    }

    useOldManifestMerger true

    productFlavors {

        staging {
            applicationId "com.waxwings.happyhour.staging"
        }

        production {
            applicationId "com.waxwings.happyhour"
        }
    }

    packagingOptions {
        exclude 'LICENSE.txt'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
    }


}

dependencies {
    compile 'com.path:android-priority-jobqueue:1.1.2'
    compile "com.android.support:support-v4:19.1.0"
    compile 'com.google.android.gms:play-services:4.4.52'

//    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile files('libs/wearable-preview-support.jar')
    compile group: 'com.squareup.okhttp', name: 'okhttp', version: '1.5.3'
    compile group: 'com.squareup.picasso', name: 'picasso', version: '2.2.0'
    compile 'com.jakewharton:butterknife:5.0.1'
    compile 'com.squareup.retrofit:retrofit:1.5.1'
    compile 'com.squareup:otto:+'
    compile 'com.squareup.phrase:phrase:+'
    compile 'com.newrelic.agent.android:android-agent:3.402.0'

    // Mockito dependencies
    androidTestCompile "org.mockito:mockito-core:1.9.5"
    androidTestCompile files(
            'libs/dexmaker-1.0.jar',
            'libs/dexmaker-mockito-1.0.jar')

    androidTestCompile ('com.squareup:fest-android:1.0.8'){
        exclude group:'com.android.support', module: 'support-v4'
    }
    androidTestCompile 'com.squareup.spoon:spoon-client:1.1.1'

    androidTestCompile('junit:junit:4.11') {
        exclude module: 'hamcrest-core'
    }

    androidTestCompile('com.jakewharton.espresso:espresso:1.1-r3') {
        exclude group: 'org.hamcrest:hamcrest-core:1.1'
        exclude group: 'org.hamcrest:hamcrest-library:1.1'
        exclude group: 'org.hamcrest', module: 'hamcrest-integration'
        exclude group:'com.android.support', module: 'support-v4'

    }

    androidTestCompile ('com.jakewharton.espresso:espresso-support-v4:1.1-r3'){
        exclude group:'com.android.support', module: 'support-v4'
    }

}

build.gradle для проекта:

buildscript {
    repositories {
        mavenCentral()
        maven {
            url 'https://oss.sonatype.org/content/repositories/comnewrelic-1153'
        }
        maven {
            url 'https://oss.sonatype.org/content/repositories/comnewrelic-1154'
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.11.+'
        classpath 'com.newrelic.agent.android:agent-gradle-plugin:3.402.0'

    }
}

allprojects {
    repositories {
        mavenCentral()
        maven {
            url 'https://oss.sonatype.org/content/repositories/comnewrelic-1153'
        }
    }
}

Изменить

Теперь проект импортирует новую реликвию в build.gradle для каждого предложения пользователя. Это устранило проблему, но я все еще изучаю, почему, поскольку это не похоже, что это должно быть необходимо. Класс, бросающий ошибку, находится в Path JobQueue lib, библиотека не обновляется через 4 месяца, и мое приложение работает нормально, это только что началось внезапно. Класс, который является ошибкой в ​​третьей стороне lib, даже не использует New Relic.

Изменить 2

В очереди приоритетных заданий lib не используется новая реликвия. Я понятия не имею, почему трассировка стека говорит, что это так, похоже на красную селедку. Я слышал, что новый Relic SDK изменяет API Android и дает странные ошибки. Но опять же, я не использую новую реликвию в своем проекте. Возможно ли, что использование NR sdk в другом проекте каким-то образом заразило это (возможно, ошибка в Android Studio)?

Изменить 3

ОК, библиотека очереди приоритетных заданий в исходной трассировке стека определенно является флагом. Я пошел вперед и получил доступ к своему собственному провайдеру до того, как JobQueue имел возможность получить доступ к нему (зная, что это заставит создать мою собственную БД впереди JobQueue lib). Моя логика заключалась в том, что если Android Sqlite был заражен New Relic, тогда это вызвало бы аналогичную ошибку на моем собственном OpenHelper.

06-15 15:29:39.848    1368-1368/com.waxwings.happyhour.staging W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0xa4d81b20)
06-15 15:29:39.848    1368-1368/com.waxwings.happyhour.staging E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.waxwings.happyhour.staging, PID: 1368
    java.lang.NoClassDefFoundError: com.newrelic.agent.android.instrumentation.SQLiteInstrumentation
            at com.waxwings.happyhour.services.HHOpenHelper.onCreate(HHOpenHelper.java:56)
            at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
            at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:188)
            at com.waxwings.happyhour.services.HappyHourProvider.query(HappyHourProvider.java:121)
            at android.content.ContentProvider.query(ContentProvider.java:857)
            at android.content.ContentProvider$Transport.query(ContentProvider.java:200)
            at android.content.ContentResolver.query(ContentResolver.java:461)
            at android.content.ContentResolver.query(ContentResolver.java:404)
            at com.waxwings.happyhour.HappyHourApplication.onCreate(HappyHourApplication.java:39)
            at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
            at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4344)
            at android.app.ActivityThread.access$1500(ActivityThread.java:135)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            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:779)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
            at dalvik.system.NativeStart.main(Native Method)

Изменить 4

Я просто запускал проект на машине, в которой никогда не было библиотеки New Relic, установленной в любом проекте, и она работала нормально. Я думаю, что это довольно убедительное доказательство того, что New Relic делает что-то смешное с их плагином/библиотекой.

Изменить 5

Я обновил файл gradle -wraper.properties, чтобы использовать дистрибутив rc-1 и, похоже, исправил проблему. Я удалил новые реликвийные зависимости из моего build.gradle, которые предложил один комментатор, и приложение все еще работает нормально.

distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-rc-1-all.zip

Я предполагаю, что библиотека New Relic была кэширована в дистрибутиве 1.12-all gradle, и это была общая ссылка, вызывающая ошибки других проектов. Я все еще не уверен, что делает новую библиотеку Relic отличной, поэтому gradle думает, что она должна включать ее в другие проекты. Учитывая, что у New Relic была почти идентичная проблема с их плагином Eclipse не так давно, я думаю, что разумно предположить, что что-то происходит с их распределением Maven. У меня есть билет на поддержку, и я продолжу расследование и отправку отчетов.

Нечетная часть, если я удалю все gradle дистрибутивы/кеши/etc в ~/.gradle dir и попытаюсь использовать дистрибутив 1.12-all, он все еще бросает эту новую реликтовую ошибку. Единственный способ, которым это будет работать, - использовать дистрибутив 1.12-rc-1-all gradle.

4b9b3361

Ответ 1

Похоже, что Android Studio переключилась на gradle демон для более быстрой сборки. К сожалению, это кэширует части агента New Relic и необходимо остановить демон, когда вы переключаетесь на проект без агента (или на другую версию). Вы можете выполнить это, просто выполнив:

gradle --stop

Вы также захотите очистить проект, чтобы убедиться, что классы перестроены и обработаны.

Пока это должно вывести вас на работу и сейчас, мы сразу исправим проблему, и вы можете ожидать ее в следующей версии агента.

Ответ 2

./gradlew --stop
./gradlew cleanBuildCache
./gradlew clean

работает для меня

Ответ 3

Я пробовал gradle --stop, но это не сработало.

Снова удалите каталог .gradle и проект синхронизации.

Ответ 4

Я столкнулся с странной проблемой NoClassDefFoundError в kitkat. но он отлично работал на леденец.

Я пробовал все исправления, но не работал.

Наконец, я узнаю, что это из-за ошибки multidex. Я перешел 65k метод. Итак, я следил за этим учебником с сайта разработчика Android. и работал как шарм