我已经尝试了一个多星期,将Crashlytics集成到我的一个项目中。我尝试了以下方法。
如果我尝试在不包含任何依赖关系及其用法的新创建项目中实施,我将在下面向您展示,那么Crashlytics将在遵循Firebase的官方文档后自动进行配置。
< / li>如果我试图在包含以下依赖项及其在项目中的用法的项目中实现它,则会引发3种错误。
Must initialize Fabric before using singleton.
当我在我的Application类之一中初始化Fabric时,然后在编译后,它显示以下错误。
Fabric Api key is missing from manifest, Please add it in manifest
或类似的东西。
当我通过从fabric.io中的控制台复制api密钥并将其适当地粘贴到清单中来解决该问题时,
然后在编译后显示以下错误。
The Crashlytics build ID is missing.
即使我尝试了各种与此相关的解决方案,这也是从未发生过的错误。只是永远不会消失。
但是要注意的是,当我将Crashlytics添加到包含以下依赖项及其在项目中的用法的简单项目否时,不需要所有这些额外的事情。
这是那些依赖项
implementation project(':library')
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.annotation:annotation:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.sothree.slidinguppanel:library:3.4.0'
implementation 'de.hdodenhof:circleimageview:3.0.0'
implementation 'com.facebook.fresco:fresco:1.13.0'
implementation 'com.jakewharton:butterknife:10.1.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'
/* dagger dependency for DI*/
implementation "com.google.dagger:dagger:2.23.2"
annotationProcessor "com.google.dagger:dagger-compiler:2.23.2"
compileOnly 'javax.annotation:jsr250-api:1.0'
implementation 'javax.inject:javax.inject:1'
/*Retrofit lib*/
implementation 'com.squareup.retrofit2:retrofit:2.6.0'
implementation 'com.squareup.retrofit2:converter-gson:2.6.0'
/*RxJava lib*/
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation "io.reactivex.rxjava2:rxjava:2.2.9"
implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
/* LiveData lib*/
implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'
implementation 'androidx.lifecycle:lifecycle-runtime:2.1.0'
annotationProcessor 'androidx.lifecycle:lifecycle-common-java8:2.1.0'
/* Crashlytics */
implementation 'com.google.firebase:firebase-analytics:17.2.0'
implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'
/* Necessary library for handling permission callbacks easily */
implementation 'pub.devrel:easypermissions:3.0.0'
/* Better logging */
implementation 'com.jakewharton.timber:timber:4.7.1'
这也是我和我的同伴建造的一个项目,我不知道他为什么在这个项目中以名为“库”的模块的形式添加了另一个项目,这就是为什么您可以看到implementation project(':library')
行的开头。但是我也尝试过删除它,并且仅在项目内部复制该项目的文件,而不是将其添加为单独的模块,但这并没有改变发生的错误。
如果你们中的任何一个知道解决方法或对Crashlytics在两种不同情况下的这种奇怪行为的任何解决方案,请回复。
编辑:
这是没有要求的密钥的清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="fibamlscan.app">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<application
android:name=".App"
android:usesCleartextTraffic="true"
android:icon="@android:drawable/ic_menu_today"
android:supportsRtl="true"
android:label="@string/app_name"
android:theme="@style/AppTheme"
tools:ignore="AllowBackup,GoogleAppIndexingWarning"
tools:targetApi="m">
<activity android:name=".s2s_transfer.S2STransferScanner" />
<activity android:name=".s2s_transfer.S2STransferActivity" />
<activity android:name=".stock_transfer_received.StockTransferReceivedActivity" />
<activity android:name=".damaged_goods.DamagedGoodsActivity" />
<activity android:name=".dispatch.CreateNewDispatchActivity" />
<activity
android:name=".dispatch.DispatchOrder"
android:label="@string/title_activity_dispatch_order"
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".menu.MenuActivity"
android:label="@string/title_activity_menu"
android:theme="@style/AppTheme.NoActionBar" />
<activity android:name=".ui.login.LoginActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".grn.PreviewActivity" />
<activity
android:name=".grn.GrnOrder"
android:label="@string/title_activity_grn"
android:theme="@style/AppTheme.NoActionBar" />
<activity android:name=".dispatch.PreviewActivity" />
<activity android:name=".metro.dispatch.PreviewActivity" />
<activity android:name=".goodsreturn.CreateNewDispatchActivity" />
<activity android:name=".goodsreturn.PreviewActivity" />
<activity android:name=".goodsreturn.DispatchOrder" />
<activity android:name=".metro.dispatch.DispatchOrder" />
<activity android:name=".warehouseAudit.PreviewActivity" />
<activity android:name=".audit.PreviewActivity" />
<activity android:name=".damaged_goods.DamagedGoodsScanner" />
<activity android:name=".warehouseAudit.WarehouseSelectionActivity" />
<meta-data
android:name="com.google.firebase.ml.vision.DEPENDENCIES"
android:value="barcode" />
</application>
</manifest>
编辑:
这是应用程序级别的build.gradle
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
defaultConfig {
applicationId "co.behtarinternal.app"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode rootProject.ext.versionCode
versionName "${rootProject.ext.versionName}"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
useProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled false
// signingConfig signingConfigs.debug
useProguard false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation project(':library')
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.annotation:annotation:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.sothree.slidinguppanel:library:3.4.0'
implementation 'de.hdodenhof:circleimageview:3.0.0'
implementation 'com.facebook.fresco:fresco:1.13.0'
implementation 'com.jakewharton:butterknife:10.1.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'
/* dagger dependency for DI*/
implementation "com.google.dagger:dagger:2.23.2"
annotationProcessor "com.google.dagger:dagger-compiler:2.23.2"
compileOnly 'javax.annotation:jsr250-api:1.0'
implementation 'javax.inject:javax.inject:1'
/*Retrofit lib*/
implementation 'com.squareup.retrofit2:retrofit:2.6.0'
implementation 'com.squareup.retrofit2:converter-gson:2.6.0'
/*RxJava lib*/
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation "io.reactivex.rxjava2:rxjava:2.2.9"
implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
/* LiveData lib*/
implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'
implementation 'androidx.lifecycle:lifecycle-runtime:2.1.0'
annotationProcessor 'androidx.lifecycle:lifecycle-common-java8:2.1.0'
/* Crashlytics */
implementation 'com.google.firebase:firebase-core:17.2.0'
implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'
/* Necessary library for handling permission callbacks easily */
implementation 'pub.devrel:easypermissions:3.0.0'
/* Better logging */
implementation 'com.jakewharton.timber:timber:4.7.1'
}
apply plugin: 'com.google.gms.google-services'