android newrelic

android - No se encontró la nueva clase de reliquia... ni siquiera uso una nueva reliquia



newrelic (4)

Ni siquiera uso una nueva reliquia y estoy recibiendo errores por ellos. Simplemente sucedió de repente.

Estoy usando la última versión de Android Studio (0.61). Incluso mi rama maestra tiene el mismo error. Hay otros proyectos en mi máquina que usan una nueva reliquia, pero no esta. Este proyecto no usa una nueva reliquia de ninguna manera, no tanto como una dependencia descarriada.

He intentado borrar mi caché de gradle y volver a descargar todas las librerías de terceros, no funcionó.

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 para el módulo:

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 para el proyecto:

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

Editar

El proyecto ahora importa New Relic en el build.gradle por las sugerencias de un usuario. Esto solucionó el problema pero todavía estoy explorando por qué, ya que no parece que deba ser necesario. La clase que lanza el error está en la biblioteca de tareas de Path, la biblioteca no se ha actualizado en 4 meses y mi aplicación ha funcionado bien, esto solo comenzó a suceder de repente. La clase que está cometiendo un error en la biblioteca de terceros ni siquiera usa New Relic.

Editar 2

La biblioteca de la cola de trabajos prioritarios no usa reliquia nueva. No tengo ni idea de por qué el rastro de la pila dice que sí, parece una pista falsa. He escuchado que el New Relic SDK modifica la API de Android y da errores extraños. Pero una vez más, no uso una nueva reliquia en mi proyecto. ¿Es posible usar el NR SDK en otro proyecto de alguna manera infectado este (tal vez un error en Android Studio)?

Editar 3

De acuerdo, la biblioteca de cola de tareas prioritarias en el seguimiento de pila original es definitivamente una marca falsa. Seguí adelante y accedí a mi propio proveedor antes de que JobQueue tuviera la oportunidad de acceder a su (sabiendo que esto forzaría la creación de mi propia base de datos antes de la biblioteca de JobQueue). Mi lógica era que si Android Sqlite estaba siendo infectado por New Relic entonces causaría un error similar en mi propio OpenHelper, lo hizo.

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)

Editar 4

Acabo de ejecutar el proyecto en una máquina que nunca ha tenido una biblioteca de New Relic instalada en ningún proyecto y funcionó bien. Creo que esta es una evidencia bastante sólida de que New Relic está haciendo algo divertido con su plugin / biblioteca.

Editar 5

Actualicé mi archivo gradle-wraper.properties para usar la distribución rc-1 y eso parece haber solucionado el problema. Eliminé las nuevas dependencias de reliquias de mi build.gradle que un comentarista sugirió, y la aplicación aún funciona bien.

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

Supongo que la biblioteca New Relic se almacenaba en caché en la distribución de 1.12-gradle, y este era el enlace común que causaba errores en otros proyectos. Todavía no estoy seguro de por qué la biblioteca New Relic es diferente, por lo que Gradle cree que debería incluirla en otros proyectos. Dado que New Relic tuvo un problema casi idéntico con su complemento Eclipse no hace mucho tiempo, creo que es razonable suponer que algo está sucediendo con su distribución de Maven. Tengo un ticket de soporte abierto con ellos y continuaré investigando e informando.

La parte impar es que si elimino todas las distribuciones / caches / etc de gradle en ~ / .gradle dir y trato de usar la distribución 1.12-all, aún arroja ese nuevo error de reliquia. La única forma en que funcionará es si utilizo la distro de 1.12-rc-1-all gradle.


Intenté gradle --stop pero no funcionó.

Borre el directorio .gradle y vuelva a sincronizar el proyecto, funcionó.


Me enfrenté a la extraña cuestión de NoClassDefFoundError en kitkat. pero estaba funcionando bien en piruleta.

Probé todas las soluciones anteriores pero no funcionó.

Finalmente llego a saber que es debido a un error multidex. Crucé el método 65k. Entonces, seguí este tutorial desde el sitio de desarrolladores de Android. y funcionó a la perfección


Parece que Android Studio cambió al daemon de Gradle para compilaciones más rápidas. Desafortunadamente, esto almacena en caché partes del agente de New Relic y es necesario detener el daemon cuando se cambia a un proyecto sin el agente (o una versión diferente. Para lograr esto, simplemente ejecute:

gradle --stop

También querrás limpiar tu proyecto para asegurarte de que las clases se reconstruyan y se ajusten.

Si bien esto debería ponerlo en funcionamiento por ahora, trabajaremos en una solución para este problema de inmediato y puede esperarlo en la próxima versión del agente.


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

funciona para mi