2013-09-30 9 views
6

Mi piacerebbe eseguire ProGuard sulla versione di rilascio della mia libreria Android. Di seguito è il mio file build.gradle che è all'interno del mio progetto.Come far funzionare runProguard per il plugin Gradle della libreria Android?

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') 
     } 
    } 
} 

esecuzione gradlew clean o gradlew build restituisce il seguente errore:

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

Sembra che plug android-library manca il metodo buildTypes. Se cambio apply plugin a android, gradlew funziona correttamente. Tuttavia, questo è un progetto di biblioteca e vorrei mantenerlo così. Altre parti my my gradle.build (non menzionato qui) si basano sul fatto che il progetto sia una libreria.

C'è un modo per far funzionare il plugin android-library su ProGuard?

+0

Penso che l'idea è di eseguire ProGuard una volta per tutto il codice che comprende l'app finale, non per ogni libreria singolarmente. –

+0

Sto creando un jar SDK per la distribuzione. Vorrei che le funzioni pubbliche fossero visibili, ma le variabili e le funzioni private non fossero visibili. – BVB

risposta

2

Ha risolto il problema prendendo release fuori buildTypes in questo modo:

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

Si noti inoltre che ho aggiunto un altro proguardFile sotto release. Questo risolve un altro problema che stavo avendo dopo aver risolto il problema iniziale buildTypes.

+0

Puoi essere più specifico su dove hai aggiunto l'altro proguardFile e perché hai dovuto farlo? – davidgyoung

+0

L'ho aggiunto direttamente alla radice della directory del progetto (dove si trova il file 'build.gradle'. Il file può essere utilizzato per configurare varie opzioni (ad esempio, quali funzioni/classi/variabili non devono essere" protette "). Un manuale è disponibile qui: http://proguard.sourceforge.net/index.html – BVB

+0

Ah, ho capito.Il punto che mi mancava era che tu * spostassi * il blocco di rilascio in modo che fosse allo stesso livello in cui useTipi utilizzava essere in build.gradle – davidgyoung