2015-06-15 5 views
5

Hallo Ich bin derzeit Migrieren der Android-Teil meiner cordova/phonegap App von Ant zu Gradle, und ich versuche, das Fabric SDK hinzuzufügen.Probleme mit dem Hinzufügen von Fabric Abhängigkeiten zu einem Cordoba gebaut Android-Projekt

In cordova-Projekten scheint die build.gradle automatisch generiert zu werden und alle Änderungen sollten zu build-extras.gradle hinzugefügt werden. Wie kann ich zusätzliche Abhängigkeiten im Buildscript-Block hinzufügen?

So sollte das Zeug für Stoff in build.gradle aussehen, und es funktioniert, wenn ich es hier, aber es wird überschrieben.

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.+' 
    } 
} 

Wenn ich diesen Block in der Build-extras.gradle hinzufügen, klagt Groovy mit

Fehler beim Plugin [id 'io.fabric'] Plugin mit id 'io.fabric' gelten nicht gefunden.

aber wenn ich es in die build.gradle fügen Sie es bekommen überschrieben könnte und nicht an meine Kollegen hinzugefügt werden, baut (es gibt eine Warnung an der Spitze der Datei, die es sollte nicht bearbeitet werden).

Mein 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:[email protected]') { 
     transitive = true 
    } 
} 

ich ziemlich neu bin Gradle ... in der build.gradle dieser Linie gibt es ... vielleicht kann es mir helfen?

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

Antwort

1

Zur Lösung des Problems ich derzeit einen before_build cordova Haken verwenden, die die build.gradle und meine MainActivity.java mit meiner eigenen benutzerdefinierten Version in einem nicht-Plattform Ordnern in meiner cordova Projekt-Repository gespeichert außer Kraft setzt.

Die modifizierte MainActivity.java hat nur diese zusätzliche Zeile nach loadUrl (launchUrl) hinzugefügt;

Hier ist der Cordova Haken.

/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 

Im build.gradle Sie gerade dies nach dem buildscript hinzufügen müssen {

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

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

Und in Build-extras.gradle Block in den letzten Abhängigkeiten

compile('com.crashlytics.sdk.android:crashlytics:[email protected]') { 
     transitive = true 
    } 

Diese ist keine endgültige Lösung und nur ein sehr hacky Weg, um es zum Laufen zu bringen. Es könnte bei Cordova Updates brechen.

Ich werde noch einmal antworten, wenn ich eine bessere Lösung finde. Diese Bash-Skripte funktionieren, wenn Sie ein Linux haben und vielleicht ein Mac-System haben.

+0

Hallo Paul, würden Sie Ihr Skript etwas dagegen zu teilen? –

+1

Natürlich. In der aktualisierten Antwort ist das Skript, das ich verwendet habe. –

1

Basierend auf einer ähnlichen Problemumgehung in https://github.com/phonegap/phonegap-plugin-push/issues/1878, konnte ich einen weniger aufdringlichen Ansatz finden.

Ran in ein ähnliches Problem für Google-Dienste-Plugin. Der Fehler war

Anstatt die gesamte generierte build.gradle zu ersetzen, fügte die zu erstellende Klassenpfadabhängigkeit hinzu.gradle, direkt neben der Linie, die Android-Build-Tools verweist, mit Haken:

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

Die Hook-Skript ist in https://gist.github.com/kkleokrish/ac794fc3280bf23e81cce9b6a7f138f9

Verwandte Themen