问题
I have two build flavors in gradle but for some reason whenever i change the following flag to false i get the titled error message:
ext.enableCrashlytics = false
the error itself complete is below:
Process: com.mobile.myapp.staging, PID: 5439
java.lang.RuntimeException: Unable to create application com.mobile.myapp.UI.myappApplication: io.fabric.sdk.android.services.concurrency.UnmetDependencyException: 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:4710)
at android.app.ActivityThread.-wrap1(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1405)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: io.fabric.sdk.android.services.concurrency.UnmetDependencyException: 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 com.crashlytics.android.core.CrashlyticsCore.onPreExecute(CrashlyticsCore.java:234)
at com.crashlytics.android.core.CrashlyticsCore.onPreExecute(CrashlyticsCore.java:207)
at io.fabric.sdk.android.InitializationTask.onPreExecute(InitializationTask.java:44)
at io.fabric.sdk.android.services.concurrency.AsyncTask.executeOnExecutor(AsyncTask.java:611)
at io.fabric.sdk.android.services.concurrency.PriorityAsyncTask.executeOnExecutor(PriorityAsyncTask.java:43)
at io.fabric.sdk.android.Kit.initialize(Kit.java:69)
at io.fabric.sdk.android.Fabric.initializeKits(Fabric.java:440)
at io.fabric.sdk.android.Fabric.init(Fabric.java:384)
at io.fabric.sdk.android.Fabric.setFabric(Fabric.java:342)
at io.fabric.sdk.android.Fabric.with(Fabric.java:313)
at com.mobile.myapp.UI.base.BaseApplication.setupExceptionHandling(BaseApplication.java:51)
at com.mobile.myapp.UI.myappApplication.onCreate(myappApplication.java:45)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1013)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4707)
And this is how I initialize crashlytics in my Application subclass:
Fabric.with(this, new Crashlytics());
what i am trying to do is have control over whether or not a crashlytics can run or not per flavor. lets say i want flavor1 not to run crashlytics i thought i could use that gradle flag and set it to false. am i missing something ?
回答1:
Addition to answer of Todd Burner
Be carefull with BuildConfig.DEBUG
. IDE can auto-import it from
com.crashlytics.android.BuildConfig (= false)
instead of your app config
${app_package}.BuildConfig
UPDATE
Providing an example on the request of j2emanue
...
import com.fiot.ot.BuildConfig <- should be
import com.crashlytics.android.BuildConfig <- my IDE automatically imported
fun initFabric(context: Context) {
val core = CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()
val kit = Crashlytics.Builder().core(core).build()
Fabric.with(context, kit)
}
Where com.fiot.ot
package name of my app
回答2:
Maybe missing apply plugin fabric
I added this line on top of file app/build.gradle
resolved my issues!
apply plugin: 'io.fabric'
回答3:
Whenever I set
ext.enableCrashlytics = false
my app crashes with
io.fabric.sdk.android.services.concurrency.UnmetDependencyException
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.
What seems to work for me is that I have to disable automatic initialization of Crashlytics by adding this line to AndroidManifest.xml
<meta-data android:name="firebase_crashlytics_collection_enabled" android:value="false" />
Then I manually initialize Crashlytics in the onCreate() method of my Application subclass, use BuildConfig.DEBUG to decide whether to disable CrashlyticsCore, and call Fabric.with(). In fact, I no longer set
ext.enableCrashlytics = false
at all. It all seems to work to me.
回答4:
Todd from Fabric. You will get this error unless you also disable Fabric at run time.
// 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);
Check out this link for more details: https://docs.fabric.io/android/crashlytics/build-tools.html#disable-crashlytics-for-debug-builds
回答5:
Make sure you add in
app.gradle
apply plugin: 'io.fabric'
I also have
classpath 'io.fabric.tools:gradle:1.26.1'
in the
project gradle dependencies
and add the Crashlytics api in the strings, signup in the Crashlytics Site
回答6:
For Xamarin Android
You need to have the following not to receive the above error:
- Include the NuGet packages:
- Xamarin.Android.Crashlytics [by Microsoft]
- Xamarin.Android.Crashlytics.Core [by Microsoft]
- Xamarin.Android.Crashlytics.Beta [by Microsoft]
- Xamarin.Android.Crashlytics.Answers [by Microsoft]
Add this line in your
AndroidManifest.xml
file within<application>
:<meta-data android:name="io.fabric.ApiKey" android:value="<FABRIC_API_KEY>" />
(You can obtain the key when you do the onboarding on https://fabric.io/onboard)
or go to https://fabric.io/kits/ios/crashlytics/install after you have signed in, you should see your key there in the tutorial.
Add this line in
Resources/values/Strings.xml
resource file:<string name="com.crashlytics.android.build_id">15</string>
Add this line in
MainApplication.cs
orYourActivity.cs
inOnCreate()
:Fabric.Fabric.With(this, new Crashlytics.Crashlytics());
Your app should build and run past the initialization line without any issues. Only problem I have with it is the fact that there is one more place you need to update the Build version of your app everytime your release.
EDIT :
As far as I'm experiencing, the one value is required but not used at all. You do not actually have to increase the build number in Strings.xml
, it picks up the build number from the app automatically, so you should be fine just to leave the value at:
<string name="com.crashlytics.android.build_id">1</string>
If you experience it differently for Xamarin, please comment below.
回答7:
In My case this got worked.
so, this is the top level project build.gradle
buildscript {
repositories {
jcenter()
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'com.android.tools.build:gradle:1.2.3'
classpath 'io.fabric.tools:gradle:1.+'
}
}
apply plugin: 'java'
allprojects {
repositories {
jcenter()
maven { url 'https://maven.fabric.io/public' }
}
}
and this is the build.gradle for app module
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "your application package name"
minSdkVersion 10
targetSdkVersion 22
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile 'com.google.code.gson:gson:2.3'
compile 'com.android.support:support-v4:22.0.0'
testCompile 'junit:junit:4.12'
testCompile "org.mockito:mockito-core:1.9.5"
compile('com.crashlytics.sdk.android:crashlytics:2.5.2@aar') {
transitive = true;
}
}
and at last "clean build" and all was set for me.
来源:https://stackoverflow.com/questions/45839054/crashlytics-error-this-app-relies-on-crashlytics-please-sign-up-for-access