将结构依赖项添加到cordova构建的android项目中的问题

时间:2015-06-15 16:42:34

标签: android cordova gradle twitter-fabric

您好我正在将我的cordova / phonegap应用程序的android部分从ant迁移到gradle,我正在尝试添加结构SDK。

在cordova项目中,build.gradle似乎是自动生成的,所有更改都应该添加到build-extras.gradle中。如何在buildscript块中添加其他依赖项?

这是面料的内容应该在build.gradle中看起来的样子,如果我把它放在这里它会起作用,但它会被覆盖。

buildscript {
    repositories {
        mavenCentral()
        // this line needs to be added
        maven { url 'https://maven.fabric.io/public' }
    }

    // this block needs to be added
    dependencies {            
        classpath 'io.fabric.tools:gradle:1.+'
    }
}

如果我在build-extras.gradle中添加此块,Groovy会抱怨

  

无法应用插件[id'io.fabric']   找不到ID为'io.fabric'的插件。

但是如果我将它添加到build.gradle中,它可能会被覆盖并且不会被添加到我的同事构建中(文件顶部有一个警告,它不应该被编辑)。

我的build-extras.gradle

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

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }
}

android {
    dependencies {
        compile('com.facebook.android:facebook-android-sdk:3.21.1') {
            exclude module: 'support-v4'
        }
        compile 'com.google.android.gms:play-services:7.5.0'
    }

//    dexOptions {
//        preDexLibraries = false
//    }
}

apply plugin: 'io.fabric'

repositories {
    jcenter()
    maven { url 'https://maven.fabric.io/public' }
}

dependencies {
    // Crashlytics Kit
    compile('com.crashlytics.sdk.android:crashlytics:2.3.2@aar') {
        transitive = true
    }
}

我对Gradle很新...在build.gradle中有这条线......也许它可以帮到我?

// Allow plugins to declare Maven dependencies via build-extras.gradle.
repositories {
    mavenCentral()
}

2 个答案:

答案 0 :(得分:2)

为了解决这个问题,我目前正在使用一个before_build cordova钩子,它覆盖build.gradle和我的MainActivity.java,我自己的自定义版本存储在我的cordova项目存储库的非平台文件夹中。

修改后的MainActivity.java在loadUrl(launchUrl)之后添加了这个额外的行;

Fabric.with(this, new Crashlytics());

这是Cordova钩子。

/hooks/before_build/addGradleExtras.sh

#!/bin/sh

if [ -d "platforms/android" ]; then

echo "copying extra gradle configuration to android directory"
cp resources/build-extras.gradle platforms/android/build-extras.gradle

echo "OVERWRITING GENERATED build.gradle IN PROJECT, AS LONG AS WE DO    NOT FIND A BETTER WAY"
cp resources/build.gradle platforms/android/build.gradle

echo "Adding fabric.properties file"
cp resources/fabric.properties platforms/android/fabric.properties

echo "Overwriting mainactivity with our changes"
cp resources/MainActivity.java platforms/android/src/com/updatemi/app2/MainActivity.java

在build.gradle中,您只需要在buildscript {

之后添加它
repositories {
    mavenCentral()
    maven { url 'https://maven.fabric.io/public' }
}

dependencies {
    classpath 'io.fabric.tools:gradle:1.+'
}

在build-extras.gradle中,在最后的依赖项块中

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

这不是最终解决方案,只是一种非常黑客的方法才能使其发挥作用。它可能会破坏cordova更新。

如果我找到更好的解决方案,我会再次回答。如果您有Linux,并且可能有Mac系统,则此bash脚本将起作用。

答案 1 :(得分:1)

基于https://github.com/phonegap/phonegap-plugin-push/issues/1878中的类似解决方法,我可以找到一种不那么具有侵入性的方法。

谷歌服务插件的类似问题。错误是

Plugin with id 'com.google.gms.google-services' not found.

不是替换整个生成的build.gradle,而是使用hooks将classpath依赖项添加到build.gradle,紧挨着引用android构建工具的行:

classpath 'com.android.tools.build:gradle:1.5.0'

钩子脚本在https://gist.github.com/kkleokrish/ac794fc3280bf23e81cce9b6a7f138f9

中可用