简体   繁体   English

设置Firebase + Crashlytics时,Android项目构建失败

[英]Android project build failure while setting up Firebase+Crashlytics

I have a question about Firebase + Crashlytics + Android . 我对Firebase + Crashlytics + Android有疑问。 On Android Studio I am getting the following error: Android Studio我收到以下错误:

org.gradle.api.GradleException: Crashlytics Developer Tools error. org.gradle.api.GradleException:Crashlytics Developer Tools错误。 com.crashlytics.tools.android.exception.PluginException: Crashlytics Developer Tools error. com.crashlytics.tools.android.exception.PluginException:Crashlytics Developer Tools错误。 java.lang.illegalArgumentException: Crashlytics found an invalid API key: null. java.lang.illegalArgumentException:Crashlytics发现了一个无效的API密钥:null。

I have followed the instructions here and here . 我按照这里这里的说明进行操作。 As I understand it, I don't need to set the apiKey in the project and Firebase will take care of this. 据我了解,我不需要在项目中设置apiKeyFirebase将负责这一点。 But the project build still fails and complains. 但项目构建仍然失败并抱怨。 I haven't been able to find appropriate help online about this. 我无法在网上找到适当的帮助。 The documentation on Crashlytics also seems to be in beta on Firebase. 关于Crashlytics的文档似乎也在Firebase上进行测试。

The closest I've gotten is someone suggesting that I set up a fabric.properties file with an apiKey field set. 我最接近的是有人建议我设置一个带有apiKey字段集的fabric.properties文件。 But on the Firebase -> Crashlytics dashboard I can't find this API key. 但在Firebase - > Crashlytics仪表板上,我找不到此API密钥。

Does anyone have an idea how this can be resolved? 有谁知道如何解决这个问题?

Note 1 : I don't have admin access to the project on Firebase. 注1 :我没有Firebase上项目的管理员权限。 Maybe the key is only visible to them? 也许钥匙只对他们可见?

Note 2 : It's actually a react-native project. 注2 :它实际上是一个react-native项目。 But that shouldn't really make a difference since this is purely a native-side configuration. 但这不应该真正有所作为,因为这纯粹是本机端配置。

Edit : Adding app/build.gradle on request: 编辑 :根据要求添加app/build.gradle

apply plugin: "com.android.application"
apply plugin: "io.fabric"
apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle" // MANUAL CHANGE

import com.android.build.OutputFile
def enableSeparateBuildPerCPUArchitecture = false
def enableProguardInReleaseBuilds = false

android {

    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.my.app"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 4
        versionName "1.0"
        ndk {
            abiFilters "armeabi-v7a", "x86"
        }
    }
    splits {
        abi {
            reset()
            enable enableSeparateBuildPerCPUArchitecture
            universalApk false  // If true, also generate a universal APK
            include "armeabi-v7a", "x86"
        }
    }

    buildTypes {
        release {
            minifyEnabled enableProguardInReleaseBuilds
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
            signingConfig signingConfigs.release
        }
    }

    applicationVariants.all { variant ->
        variant.outputs.each { output ->

            def versionCodes = ["armeabi-v7a":1, "x86":2]
            def abi = output.getFilter(OutputFile.ABI)
            if (abi != null) {  // null for the universal-debug, universal-release variants
                output.versionCodeOverride =
                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
            }
        }
    }
}

dependencies {
    compile(project(':react-native-firebase')) {
        transitive = false
    }
    compile project(':react-native-push-notification')
    compile project(':react-native-google-analytics-bridge')
    compile project(':react-native-device-info')
    compile (project(':react-native-google-analytics-bridge')) {
        exclude group: 'com.google.android.gms'
    }

    compile (project(':react-native-device-info')) {
        exclude group: 'com.google.android.gms'
    }

    compile (project(':react-native-push-notification')) {
        exclude group: 'com.google.android.gms'
    }
    compile(project(':react-native-maps')) {
        exclude group: 'com.google.android.gms'
    }
    compile project(':react-native-config')
    compile project(':react-native-vector-icons')

    compile('com.crashlytics.sdk.android:crashlytics:2.9.1@aar') {
        transitive = true
    }

    // Forcing version 11.8.0 of play-services because that's the version firebase needs for all its features
    compile ("com.google.android.gms:play-services-maps:11.8.0") {
        force = true
    }
    compile ("com.google.android.gms:play-services-gcm:11.8.0") {
        force = true
    }
    //Analytics
    compile ('com.google.firebase:firebase-core:11.8.0') {
        force = true
    }
    //Cloud Messaging
    compile ('com.google.firebase:firebase-messaging:11.8.0') {
        force = true
    }
    //Authentication
    compile ('com.google.firebase:firebase-auth:11.8.0') {
        force = true
    }

    compile fileTree(dir: "libs", include: ["*.jar"])
    compile "com.android.support:appcompat-v7:23.0.1"
    compile "com.facebook.react:react-native:+"  // From node_modules
}

task copyDownloadableDepsToLibs(type: Copy) {
    from configurations.compile
    into 'libs'
}

Mike from Firebase here. Mike来自Firebase。 If you are an existing Firebase customer, using Crashlytics via Fabric, then here's what your files should look like. 如果您是现有的Firebase客户,通过Fabric使用Crashlytics,那么这就是您的文件应该是什么样子。 Note: We don't have official React Native support, so I'm not including any of those files. 注意:我们没有正式的React Native支持,因此我不包含任何这些文件。 I don't think it's relevant given the native implementation here, but trying to be clear :) 鉴于这里的原生实现,我不认为它是相关的,但试图明确:)

Project build.gradle: 项目build.gradle:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
        maven {
            url 'https://maven.fabric.io/public'
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath 'com.google.gms:google-services:3.2.0' // google-services plugin
        classpath 'io.fabric.tools:gradle:1.25.1'


        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        maven {
            url 'https://maven.google.com/'
        }
    }


}

task clean(type: Delete) {
    delete rootProject.buildDir
}

App's build.gradle: App的build.gradle:

buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.25.1'

    }
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'

repositories {
    maven { url 'https://maven.fabric.io/public' }
    maven {url 'https://maven.google.com'} // Google's Maven repository}

}


android {
    compileSdkVersion 25
    buildToolsVersion "26.0.2"
    defaultConfig {
        applicationId "com.example.mbonnell.myapplication"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled false

        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.0'
    testCompile 'junit:junit:4.12'
    compile('com.crashlytics.sdk.android:crashlytics:2.9.1@aar') {
        transitive = true;
    }
    compile('com.google.firebase:firebase-core:11.8.0')


}

apply plugin: 'com.google.gms.google-services'

AndroidManifest.xml: AndroidManifest.xml中:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mbonnell.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
      <!--<meta-data-->
            <!--android:name="io.fabric.ApiKey"-->
            <!--android:value="YourApiKey" />-->
    </application>

    <uses-permission android:name="android.permission.INTERNET" />
</manifest>

MainActivity.java: MainActivity.java:

There should be some implementation of Firebase. 应该有一些Firebase的实现。 To keep thing simple, I'm initializing Firebase analytics: 为了简单起见,我正在初始化Firebase分析:

public class MainActivity extends AppCompatActivity {

    private FirebaseAnalytics mFirebaseAnalytics;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
        setContentView(R.layout.activity_main);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM