2013-09-30 13 views
6

Ich möchte ProGuard auf Release-Build meiner Android-Bibliothek laufen lassen. Unten ist meine build.gradle Datei, die in meinem Projekt ist.Wie runProguard funktioniert für das Android-Bibliothek Gradle Plugin?

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.5.+' 
    } 
} 

apply plugin: 'android-library' 

repositories { 
    mavenCentral() 
} 

android { 
    compileSdkVersion 18 
    buildToolsVersion "18.0.1" 

    defaultConfig { 
     minSdkVersion 10 
     targetSdkVersion 18 
    } 

    sourceSets { 
     main { 
      java { 
       srcDir 'src/main/java' 
      } 
      resources { 
       srcDir 'src/../lib' 
      } 
     } 
    } 

    buildTypes { 
     release { 
      runProguard true 
      proguardFile getDefaultProguardFile('proguard-android.txt') 
     } 
    } 
} 

Lauf gradlew clean oder gradlew build gibt die folgende Fehlermeldung:

> Could not find method buildTypes() for arguments [[email protected]d] on project

es, dass Plugin scheint android-library ist die buildTypes Methode fehlt. Wenn ich apply plugin zu android ändere, wird gradlew erfolgreich ausgeführt. Dies ist jedoch ein Bibliotheksprojekt und ich möchte es so behalten. Andere Teile meine gradle.build (hier nicht erwähnt) verlassen sich auf das Projekt, das eine Bibliothek ist.

Gibt es eine Möglichkeit, das android-library Plugin ProGuard auf Build ausführen zu lassen?

+0

Ich denke, die Idee ist, ProGuard einmal für den gesamten Code auszuführen, der die endgültige App umfasst, nicht für jede Bibliothek einzeln. –

+0

Ich erstelle ein SDK-Jar für die Verteilung. Ich möchte, dass öffentliche Funktionen sichtbar sind, aber private Variablen und Funktionen nicht sichtbar sind. – BVB

Antwort

2

mein Problem wurde gelöst durch release aus buildTypes wie so nehmen:

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.5.+' 
    } 
} 

apply plugin: 'android-library' 

repositories { 
    mavenCentral() 
} 

android { 
    compileSdkVersion 18 
    buildToolsVersion "18.0.1" 

    defaultConfig { 
     minSdkVersion 10 
     targetSdkVersion 18 
    } 

    sourceSets { 
     main { 
      java { 
       srcDir 'src/main/java' 
      } 
      resources { 
       srcDir 'src/../lib' 
      } 
     } 
    } 

    release { 
     runProguard true 
     proguardFile getDefaultProguardFile('proguard-android.txt') 
     proguardFile 'proguard-android.txt' 
    } 
} 

Beachten Sie auch, dass ich eine andere proguardFile unter release hinzugefügt. Dies behob ein weiteres Problem, das ich hatte, nachdem ich das erste buildTypes Problem gelöst hatte.

+0

Können Sie genauer angeben, wo Sie die andere proguardFile hinzugefügt haben und warum Sie dies tun mussten? – davidgyoung

+0

Ich habe es direkt an die Wurzel des Projektverzeichnisses (wo die 'build.gradle' Datei ist) hinzugefügt. Die Datei kann verwendet werden, um verschiedene Optionen zu konfigurieren (zum Beispiel welche Funktionen/Klassen/Variablen nicht" geschützt "werden sollen). Ein Handbuch ist hier verfügbar: http://proguard.sourceforge.net/index.html – BVB

+0

Ah, ich verstehe das. Der Punkt, der mir fehlte, ist, dass Sie * den Release-Block * verschoben * haben, so dass es auf dem gleichen Level ist, auf dem releaseTypes verwendet wurde in Build.gradle – davidgyoung