我一直在使用最新的Crashlytics(Fabric集成)。但是最近我遇到了由于缺少依赖性而导致的以下崩溃错误,尽管我没有对Crashlytics配置进行任何改变。
任何想法?
02-08 22:18:00.935 18887-18887/? E/Fabric﹕ .
02-08 22:18:00.935 18887-18887/? E/Fabric﹕ . | |
02-08 22:18:00.935 18887-18887/? E/Fabric﹕ . | |
02-08 22:18:00.935 18887-18887/? E/Fabric﹕ . | |
02-08 22:18:00.935 18887-18887/? E/Fabric﹕ . \ | | /
02-08 22:18:00.935 18887-18887/? E/Fabric﹕ . \ /
02-08 22:18:00.935 18887-18887/? E/Fabric﹕ . \ /
02-08 22:18:00.935 18887-18887/? E/Fabric﹕ . \/
02-08 22:18:00.935 18887-18887/? E/Fabric﹕ .
02-08 22:18:00.935 18887-18887/? E/Fabric﹕ This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up,
install an Android build tool and ask a team member to invite you to this app's organization.
02-08 22:18:00.935 18887-18887/? E/Fabric﹕ .
02-08 22:18:00.935 18887-18887/? E/Fabric﹕ . /\
02-08 22:18:00.935 18887-18887/? E/Fabric﹕ . / \
02-08 22:18:00.935 18887-18887/? E/Fabric﹕ . / \
02-08 22:18:00.935 18887-18887/? E/Fabric﹕ . / | | \
02-08 22:18:00.935 18887-18887/? E/Fabric﹕ . | |
02-08 22:18:00.935 18887-18887/? E/Fabric﹕ . | |
02-08 22:18:00.935 18887-18887/? E/Fabric﹕ . | |
02-08 22:18:00.935 18887-18887/? E/Fabric﹕ .
02-08 22:18:00.935 18887-18887/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.android.staging, PID: 18887
java.lang.RuntimeException: Unable to create application com.example.android.App: io.fabric.sdk.android.services.concurrency.UnmetDependencyException: com.crashlytics.android.CrashlyticsMissingDependencyException:
This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up,
install an Android build tool and ask a team member to invite you to this app's organization.
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4734)
at android.app.ActivityThread.access$1600(ActivityThread.java:171)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1357)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5506)
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:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:95)
我在实际安装Fabric / Crashlytics之前添加了以下代码:
debug {
ext.enableCrashlytics = false
}
在第一次使用Crashlytics之前删除它解决了这个问题。第一次运行后不再出现此问题。
答案 1 :(得分:26)
我在gradle中注释了这个
apply plugin: 'io.fabric'
需要取消注释
如果您没有,请添加它!
答案 2 :(得分:21)
目前唯一的解决方法是,如果你真的需要发布你的应用程序(比如我),那就是将动态版本号更改为静态版本号:
[...]
classpath 'io.fabric.tools:gradle:1.14.4'
[...]
compile('com.crashlytics.sdk.android:crashlytics:2.2.0@aar') {
transitive = true
}
[...]
修改强>
已发布Fabric SDK的更新版本;你可以通过改变这一行来获得它:
classpath 'io.fabric.tools:gradle:1.26.1'
答案 3 :(得分:14)
似乎将插件版本指定为:
classpath 'io.fabric.tools:gradle:1.+'
拿起1.15.1,这有问题。
指定前一个1.14
的主要和次要似乎是稳定的:
classpath 'io.fabric.tools:gradle:1.14.+'
答案 4 :(得分:13)
更新插件后我遇到了同样的问题。 解决需要从AndroidManifest.xml中删除:
<meta-data
android:name="com.crashlytics.ApiKey"
android:value="API_SECRET_KEY" />
并添加到fabric.properties:
apiSecret=API_SECRET_KEY
apiKey=YOUR_SECRET_KEY
<强>更新强>
现在,您必须使用:
<meta-data
android:name="io.fabric.ApiKey"
android:value="API_KEY" />
答案 5 :(得分:12)
如果您在调试期间使用禁用功能,如图所示
Crashlytics crashlyticsKit = new Crashlytics.Builder()
.core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
.build();
Fabric.with(this, crashlyticsKit);
更新crashlytics版本时会发生什么
Fabric.with(this, crashlyticsKit);
转向
Fabric.with(this,new Crashlytics());
因此请务必将其更改回crashlyticskit。如果您正确执行此操作并且仍然出现错误,请确保您有
debug {
ext.enableCrashlytics = false
}
在android {buildtypes {}}
下答案 6 :(得分:11)
./gradlew assemble --refresh-dependencies
将引入最新版本。您还可以看到更多details on the fix here.
答案 7 :(得分:4)
对我来说,这是因为dataBinding = true
。将fabric gradle插件升级到1.21.0修复了问题:https://twittercommunity.com/t/fabric-gradle-plugin-1-21-0-add-support-for-android-databinding-true/57474
答案 8 :(得分:4)
修复我 来自官方source
禁用Crashlytics进行调试构建
如果您不需要Crashlytics崩溃报告或调试版本的beta版本,您可以通过以下两个步骤完全禁用插件来安全地加速调试版本:
首先,将其添加到您应用的build.gradle:
android {
buildTypes {
debug {
// Disable fabric build ID generation for debug builds
ext.enableCrashlytics = false
...
接下来,在运行时禁用Crashlytics工具包。否则,Crashlytics工具包将抛出以下错误:
com.crashlytics.android.core.CrashlyticsMissingDependencyException:
This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up`
您只能使用以下代码在运行时为调试版本禁用该工具包:
// Set up Crashlytics, disabled for debug builds
Crashlytics crashlyticsKit = new Crashlytics.Builder()
.core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build())
.build();
// Initialize Fabric with the debug-disabled crashlytics.
Fabric.with(this, crashlyticsKit);
答案 9 :(得分:4)
如果您不小心包含了Crashlytics BuildConfig,那么问题也会发生 - 使用Android Studio / IntelliJ自动导入非常容易。
我已导入
import com.crashlytics.android.core.BuildConfig;
而不是我自己的
import <package_name>.BuildConfig;
答案 10 :(得分:3)
就我而言,我在“CommonLib”模块中使用了fabric,它在所有其他模块(包括app)中作为依赖项添加。
所以,我在apply plugin: 'io.fabric'
阻止之后添加了buildscript {}
。所以,我把两个插件放在一起:
apply plugin: 'com.android.library'
apply plugin: 'io.fabric'
问题解决了!
答案 11 :(得分:1)
检查build.gradle文件中是否禁用了crashlytics
debug {
ext.enableCrashlytics = false
}
改为使用
debug {
ext.enableCrashlytics = true
}
答案 12 :(得分:0)
如果这有助于其他人,我在将Crashlytics升级到Fabric时遇到了类似的问题。在我的情况下,插件从Crashlytics留下了2行,我需要手动删除它才能工作。
在gradle文件中,在buildscript依赖项下,我不得不手动删除:
div
此外,在依赖项下,我不得不手动删除:
classpath 'com.crashlytics.tools.gradle:crashlytics-gradle:1.16.0'
答案 13 :(得分:0)
可能我迟到了回复。 但除了以上所有答案之外,还可能出现这种情况
如果您错过了添加
apply plugin:'io.fabric'
这可能看起来很奇怪,但这会导致同样的问题
默认情况下,当我们注册并从Fabric窗口添加代码时,这是由Fabric添加使用IDE但不小心可以删除它。
答案 14 :(得分:0)
确保将apply plugin: 'io.fabric'
添加到您的应用程序项目build.gradle
中。就我而言,我有build.gradle
apply plugin: 'io.fabric'
。将其移至应用程序项目解决了这个问题。
答案 15 :(得分:0)
要删除固定的Crashylitics应用程序图标吗?
我已根据入门教程,使用最新版本等完成了所有工作。
仅仅浪费了一个小时就试图弄清楚这一点。事实证明,有人认为阅读应用程序图标的包名称而不是context.packageName
来获取给定上下文的应用程序资源是一个好主意。通过以下方法完成:
io.fabric.sdk.android.services.common.CommonUtils#getResourcePackageName
如果您碰巧使用的APK之外的图标,例如android:icon="@android:drawable/sym_def_app_icon"
,显然会炸毁。当时这可能是个好主意,想知道他们想解决什么奇怪的错误?!
答案 16 :(得分:-1)
<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false" />
将其添加到AndroidManifest.xml
中。