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

时间:2018-03-12 10:09:15

标签: android firebase react-native crashlytics google-fabric

我对Firebase + Crashlytics + Android有疑问。在Android Studio我收到以下错误:

  

org.gradle.api.GradleException:Crashlytics Developer Tools错误。   com.crashlytics.tools.android.exception.PluginException:Crashlytics   Developer Tools错误。 java.lang.illegalArgumentException:Crashlytics   发现无效的API密钥:null。

我已按照说明herehere进行操作。据我了解,我不需要在项目中设置apiKeyFirebase会处理这个问题。但项目构建仍然失败并抱怨。我无法在网上找到适当的帮助。 Crashlytics上的文档似乎也在Firebase上处于测试阶段。

我最接近的是有人建议我设置一个fabric.properties字段集apiKey。但是在Firebase - > Crashlytics信息中心,我无法找到此API密钥。

有没有人知道如何解决这个问题?

注1 :我对Firebase上的项目没有管理员权限。也许钥匙只对他们可见?

注意2 :它实际上是一个react-native项目。但这不应该有所作为,因为这纯粹是一个本机端配置。

修改:根据请求添加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'
}

1 个答案:

答案 0 :(得分:4)

Mike来自Firebase。如果您是现有的Firebase客户,通过Fabric使用Crashlytics,那么您的文件应该是什么样子。注意:我们没有正式的React Native支持,因此我不包含任何这些文件。考虑到原生实现,我不认为这是相关的,但试图明确:)

Project 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的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:

<?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:

应该有一些Firebase的实现。为了简单起见,我正在初始化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);
}