Проблемы с добавлением зависимостей фабрики в проект Android, созданный с помощью Cordova

Здравствуйте, в настоящее время я переношу Android-часть моего приложения cordova / phonegap с 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()
}

person Paul Weber    schedule 15.06.2015    source источник


Ответы (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
    }

Это не окончательное решение, а всего лишь очень хитрый способ заставить его работать. Это может сломаться при обновлениях кордовы.

Я отвечу еще раз, если найду лучшее решение. Эти сценарии bash будут работать, если у вас есть Linux и, возможно, система Mac.

person Paul Weber    schedule 19.06.2015
comment
Конечно. В обновленном ответе есть сценарий, который я использовал. - person Paul Weber; 03.08.2015

На основе аналогичного обходного пути в https://github.com/phonegap/phonegap-plugin-push/issues/1878, я мог бы найти менее навязчивый подход.

Возникла аналогичная проблема для плагина google-services. Ошибка была

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

Вместо того, чтобы заменять весь сгенерированный build.gradle, добавлена ​​зависимость пути к классам для build.gradle, прямо рядом со строкой, которая ссылается на инструменты сборки Android, используя хуки:

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

Скрипт перехвата доступен в https://gist.github.com/kkleokrish/ac794fc32f13bf23e81

person Krishna    schedule 10.10.2017