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 ?
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
Maybe missing apply plugin fabric
I added this line on top of file app/build.gradle
resolved my issues!
apply plugin: 'io.fabric'
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.
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
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
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.
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