with the supports plugin only new how higher and gradle android-studio android-gradle crashlytics

gradle - the - Utilice Crashlytics dentro del sabor de un producto en Android Studio



install fabric (5)

Muchas gracias a @bonnell por responder mi pregunta por correo electrónico.

Simplemente agregue ext.enableCrashlytics = false a cualquier compilación / sabor del que no desee que forme parte Crashlytics.

Para una respuesta completa que resuelve mi problema:

buildscript { repositories { maven { url ''http://download.crashlytics.com/maven'' } } dependencies { classpath ''com.crashlytics.tools.gradle:crashlytics-gradle:1.+'' } } apply plugin: ''android'' apply plugin: ''crashlytics'' repositories { maven { url ''http://download.crashlytics.com/maven'' } } android { compileSdkVersion 19 buildToolsVersion "19.0.1" defaultConfig { minSdkVersion 8 targetSdkVersion 19 versionCode 1 versionName "1.0" packageName "com.mcarrano.example" } buildTypes { debug { packageNameSuffix ''.debug'' versionNameSuffix ''-DEBUG'' } release { runProguard true debuggable false proguardFile ''proguard-rules.txt'' proguardFile getDefaultProguardFile(''proguard-android-optimize.txt'') } } productFlavors { google { packageName = android.defaultConfig.packageName versionName = android.defaultConfig.versionName ext.enableCrashlytics = false } beta { packageName = android.defaultConfig.packageName + ".beta" versionName = android.defaultConfig.versionName + "-BETA" } lab { packageName = android.defaultConfig.packageName + ".lab" versionName = android.defaultConfig.versionName + "-LAB" ext.enableCrashlytics = false } } sourceSets { main { manifest.srcFile ''src/main/AndroidManifest.xml'' java.srcDirs = [''src/main/java''] res.srcDirs = [''src/main/res''] assets.srcDirs = [''src/main/assets''] } google { java.srcDirs = [''src/google/java''] } beta { manifest.srcFile ''src/beta/AndroidManifest.xml'' java.srcDirs = [''src/beta/java''] } lab { java.srcDirs = [''src/lab/java''] } } } dependencies { compile ''com.android.support:support-v4:19.0.+'' compile ''com.android.support:appcompat-v7:19.0.+'' betaCompile ''com.crashlytics.android:crashlytics:1.+'' }

Estoy usando Android Studio para desarrollar mi aplicación y hacer uso de gradle creando algunos sabores de producto. Los sabores del producto son google, beta y lab.

Solo quiero integrar Crashlytics con un sabor de producto ( beta ) pero me encuentro con un problema que no he podido resolver.

Con el archivo build.gradle actual, puedo obtener la variante de compilación betaDebug y betaRelease para compilar, sin embargo, no puedo hacer que los demás compilen.

Además, no he podido lograr que Crashlytics reconozca mi aplicación después de iniciar con éxito la variante de compilación betaDebug.

El error que recibo cuando cambio a una variante de compilación diferente:

Gradle Running Failed to complete Gradle exection. Cause: Could not execute build using Gradle distribution ''http://services.gradle.org/distributions/gradle-1.10-all.zip''.

Aquí está mi archivo build.gradle:

buildscript { repositories { maven { url ''http://download.crashlytics.com/maven'' } } dependencies { classpath ''com.crashlytics.tools.gradle:crashlytics-gradle:1.+'' } } apply plugin: ''android'' apply plugin: ''crashlytics'' repositories { maven { url ''http://download.crashlytics.com/maven'' } } android { compileSdkVersion 19 buildToolsVersion "19.0.1" defaultConfig { minSdkVersion 8 targetSdkVersion 19 versionCode 1 versionName "1.0" packageName "com.mcarrano.example" } buildTypes { debug { packageNameSuffix ''.debug'' versionNameSuffix ''-DEBUG'' } release { runProguard true debuggable false proguardFile ''proguard-rules.txt'' proguardFile getDefaultProguardFile(''proguard-android-optimize.txt'') } } productFlavors { google { packageName = android.defaultConfig.packageName versionName = android.defaultConfig.versionName } beta { packageName = android.defaultConfig.packageName + ".beta" versionName = android.defaultConfig.versionName + "-BETA" } lab { packageName = android.defaultConfig.packageName + ".lab" versionName = android.defaultConfig.versionName + "-LAB" } } sourceSets { main { manifest.srcFile ''src/main/AndroidManifest.xml'' java.srcDirs = [''src/main/java''] res.srcDirs = [''src/main/res''] assets.srcDirs = [''src/main/assets''] } google { java.srcDirs = [''src/google/java''] } beta { manifest.srcFile ''src/beta/AndroidManifest.xml'' java.srcDirs = [''src/beta/java''] } lab { java.srcDirs = [''src/lab/java''] } } } dependencies { compile ''com.android.support:support-v4:19.0.+'' compile ''com.android.support:appcompat-v7:19.0.+'' betaCompile ''com.crashlytics.android:crashlytics:1.+'' }

Aquí está la consola Gradle cuando la aplicación no puede compilar:

Executing tasks: [:example:generateGoogleDebugSources] Relying on packaging to define the extension of the main artifact has been deprecated and is scheduled to be removed in Gradle 2.0 :example:preBuild :example:preGoogleDebugBuild :example:checkGoogleDebugManifest :example:preBetaDebugBuild :example:preBetaReleaseBuild :example:preGoogleReleaseBuild :example:preLabDebugBuild :example:preLabReleaseBuild :example:prepareComAndroidSupportAppcompatV71901Library UP-TO-DATE :example:prepareGoogleDebugDependencies :example:compileGoogleDebugAidl UP-TO-DATE :example:compileGoogleDebugRenderscript UP-TO-DATE :example:generateGoogleDebugBuildConfig UP-TO-DATE :example:processGoogleDebugManifest UP-TO-DATE :example:crashlyticsCleanupResourcesGoogleDebug ERROR - Crashlytics Developer Tools error. java.lang.IllegalArgumentException: Invalid API key: null. Check the Crashlytics plugin to make sure that the application has been added successfully! Contact [email protected] for assistance. at com.crashlytics.tools.android.DeveloperTools.processProperties(DeveloperTools.java:439) at com.crashlytics.tools.android.DeveloperTools.processArgs(DeveloperTools.java:325) at com.crashlytics.tools.android.DeveloperTools.main(DeveloperTools.java:285) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.invoke(StaticMetaMethodSite.java:43) at org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite.call(StaticMetaMethodSite.java:88) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) at com.crashlytics.tools.gradle.CrashlyticsTaskBuilder.callDevtoolsWrappingRuntimeExceptions(CrashlyticsTaskBuilder.groovy:136) at com.crashlytics.tools.gradle.CrashlyticsTaskBuilder.this$2$callDevtoolsWrappingRuntimeExceptions(CrashlyticsTaskBuilder.groovy) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:361) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:877) at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:66) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:46) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141) at com.crashlytics.tools.gradle.CrashlyticsTaskBuilder$_crashlyticsCleanupResources_closure2.doCall(CrashlyticsTaskBuilder.groovy:57) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:272) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:877) at groovy.lang.Closure.call(Closure.java:412) at groovy.lang.Closure.call(Closure.java:425) at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:502) at org.gradle.api.internal.AbstractTask$ClosureTaskAction.execute(AbstractTask.java:483) at org.gradle.api.internal.tasks.TaskStatusNagger$1.execute(TaskStatusNagger.java:77) at org.gradle.api.internal.tasks.TaskStatusNagger$1.execute(TaskStatusNagger.java:73) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46) at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35) at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53) at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:289) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$1.run(DefaultTaskPlanExecutor.java:33) at org.gradle.internal.Factories$1.create(Factories.java:22) at org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(DefaultCacheAccess.java:198) at org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(DefaultCacheAccess.java:266) at org.gradle.cache.internal.DefaultPersistentDirectoryStore.longRunningOperation(DefaultPersistentDirectoryStore.java:135) at org.gradle.api.internal.changedetection.state.DefaultTaskArtifactStateCacheAccess.longRunningOperation(DefaultTaskArtifactStateCacheAccess.java:95) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:31) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:86) at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61) at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23) at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:67) at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:54) at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:166) at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:113) at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:81) at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:64) at org.gradle.tooling.internal.provider.BuildModelAction.run(BuildModelAction.java:70) at org.gradle.tooling.internal.provider.BuildModelAction.run(BuildModelAction.java:30) at org.gradle.tooling.internal.provider.ConfiguringBuildAction.run(ConfiguringBuildAction.java:108) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:35) at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:45) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34) at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125) at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:42) at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125) at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:24) at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125) at org.gradle.launcher.daemon.server.exec.StartStopIfBuildAndStop.execute(StartStopIfBuildAndStop.java:33) at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125) at org.gradle.launcher.daemon.server.exec.ReturnResult.execute(ReturnResult.java:34) at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125) at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:71) at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:69) at org.gradle.util.Swapper.swap(Swapper.java:38) at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:69) at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125) at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34) at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125) at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:60) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34) at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125) at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:45) at org.gradle.launcher.daemon.server.DaemonStateCoordinator.runCommand(DaemonStateCoordinator.java:186) at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy.doBuild(StartBuildOrRespondWithBusy.java:49) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34) at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125) at org.gradle.launcher.daemon.server.exec.HandleStop.execute(HandleStop.java:36) at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125) at org.gradle.launcher.daemon.server.exec.DaemonHygieneAction.execute(DaemonHygieneAction.java:39) at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125) at org.gradle.launcher.daemon.server.exec.CatchAndForwardDaemonFailure.execute(CatchAndForwardDaemonFailure.java:32) at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125) at org.gradle.launcher.daemon.server.exec.DefaultDaemonCommandExecuter.executeCommand(DefaultDaemonCommandExecuter.java:51) at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.handleCommand(DefaultIncomingConnectionHandler.java:155) at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.receiveAndHandleCommand(DefaultIncomingConnectionHandler.java:128) at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.run(DefaultIncomingConnectionHandler.java:116) at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) at java.lang.Thread.run(Thread.java:695) usage: com.crashlytics.tools.android.DeveloperTools -androidManifest <androidManifestPath> Path to AndroidManifest.xml) -androidRes <androidResPath> Path to Android resources (res/ folder) -apiSecret <key> API Secret for the project -buildEvent Notify Crashlytics that a build event has occurred -cleanupResourceFile Remove Crashlytics-generated resource files -generateResourceFile Generate Crashlytics-required resources for the project. -help Display command help. -obfuscator <obfuscatorId> Optionally specify an obfuscator vendor identifier for use with storeDeobs. -obVer <obfuscatorVersion> Optionally specify the obfuscator vendor software version for use with obfuscator. -projectPath <path> Path to Android project root -properties <propertiesarg> Properties file that overrides the input properties -quiet Silent command line output -requireUploadSuccess Throw an exception if the deobfuscation upload was not successful -resourceCheck Check if a resource file already exists. -storeDeobs <file> Store the specified deobfuscation file in preparation for upload. -tool <toolarg> Name of the build tool -uploadDeobs Attempt to upload deobfuscation file(s) to Crashlytics servers. -uploadDist <file> -verbose Verbose command line output -version <versionarg> Version of the build tool


Para cualquier otra persona que tenga este problema, mi problema es que la clave Crashlytics no está definida en mi archivo AndroidManifest.xml, por ejemplo:

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp" android:versionCode="1" android:versionName="1.0"> <uses-permission android:name="android.permission.INTERNET"/> <application android:label="@string/app_name"> <activity android:name="MyActivity" android:label="@string/app_name" /> <meta-data android:name="com.crashlytics.ApiKey" android:value="YOUR_API_KEY"/> </application> </manifest>


Si quiero compartir la compilación a través de crashlytics.

Necesito instalar el complemento de Fabric & register Después de eso ...

**

debug {ext.enableCrashlytics = true}

**

después de compilar la aplicación, podemos compartirla fácilmente a través de crashlytics

Gracias


Tuve un problema similar: tuve que desactivar los informes de crashlytics en compilaciones de depuración. La respuesta de Michael no me ayudó: la aplicación destruida por crashlytics al inicio después de agregar ext.enableCrashlytics = false a gradle configuration. Gracias a Github encontré una solución funcional:

build.gradle:

//... android { buildTypes { debug { // enable crashlytics where you need buildConfigField "boolean", "USE_CRASHLYTICS", "false" ext.enableCrashlytics = false } } } // ...

y clase de aplicación :

@Override public void onCreate() { //... if ( BuildConfig.USE_CRASHLYTICS ) { Crashlytics.start(this); } //... }

EDITAR

De acuerdo con el comentario de slott : con Fabric deberías usar algo como esto:

Fabric.with(this, new Crashlytics.Builder().core(new CrashlyticsCore.Builder().disabled(!BuildConfig.USE_CRASHLYTICS).build()).build());


para detener crashlytics para compilaciones de depuración, agregué el código siguiente después del código de inicialización en la primera actividad (inicial)

CrashlyticsCore core = new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build(); Fabric.with(this, new Crashlytics.Builder().core(core).build(), new Crashlytics());