Autore Topic: BuildConfig.BUILD_TYPE & BuildConfig.DEBUG  (Letto 635 volte)

Offline arlabs

  • Utente normale
  • ***
  • Post: 434
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
BuildConfig.BUILD_TYPE & BuildConfig.DEBUG
« il: 06 Novembre 2014, 16:55:33 CET »
0
Ciao,

qualcuno sa dirmi come mai BuildConfig.BUILD_TYPE mi ritorna sempre "release" e BuildConfig.DEBUG è false?

Cioé, funziona correttamente nel modulo principale, non funziona invece in un modulo libreria.
La BuildVariant è selezionata debug per tutti i moduli.

E' capitato ad altri?

Grazie

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:BuildConfig.BUILD_TYPE & BuildConfig.DEBUG
« Risposta #1 il: 06 Novembre 2014, 19:20:28 CET »
0
I valori sono assolutamente normali. Se selezioni in buildType release l'applicazione di default la costante DEBUG viene messa a false. Cosa ci trovi di strano?

Per quanto riguarda la libreria, quando la usi in altri progetti dovrebbe essere in modalità release. Puoi postare il build.gradle di app e library?
« Ultima modifica: 06 Novembre 2014, 19:22:17 CET da Ricky` »

Offline arlabs

  • Utente normale
  • ***
  • Post: 434
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:BuildConfig.BUILD_TYPE & BuildConfig.DEBUG
« Risposta #2 il: 07 Novembre 2014, 10:01:05 CET »
0
Grazie per aver risposto Ricky,

ma non mi sono spiegato bene.

Con AS, io seleziono la BuildVariant debug per tutti e tre i moduli che ho (App + 2 librerie).
Uso le librerie in debug perché le sto sviluppando contestualmente all'App.

BuildConfig.BUILD_TYPE vale "debug" (e contestualmente BuildConfig.DEBUG è true) nel modulo principale.
BuildConfig.BUILD_TYPE vale "release" (e contestualmente BuildConfig.DEBUG è false) in una libreria (nell'altra non ho controllato).

Sono certo che sto usando la debug, perché riesco a debuggare step-by-step anche nella libreria (non ho fatto cose strane come mettere debaggable "true" in release)

Colgo l'occasione per porti anche un'altra domanda.
ProGuard va configurato per ogni modulo o è sufficiente nel modulo principale?
Lo stesso dubbio mi viene per SigningConfig, io l'ho configurato solo nel modulo principale (e credo vada bene così), ma essendoci la possibilità di configurarlo anche per le librerie... che senso ha? Ci sono casi in cui serve?

build.gradle app
Codice (XML): [Seleziona]
apply plugin: 'android'

android {
    compileSdkVersion 19
    buildToolsVersion '19.1.0'
    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 19
        versionCode 100
        versionName '1.0'
    }
    signingConfigs {
        release {
            ...
        }
    }
    buildTypes {
        release {
            runProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
            signingConfig signingConfigs.release
        }
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile project(':AREngine')
    compile project(':ArLabsUtils')
    // You must install or update the Support Repository through the SDK manager to use this dependency.
    compile 'com.android.support:support-v4:19.1.+'
    compile 'com.google.android.gms:play-services:6.1.11'
}

build.gradle libreria AREngine
Codice (XML): [Seleziona]
apply plugin: 'android-library'

android {
    compileSdkVersion 19
    buildToolsVersion '19.1.0'
    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 19
        versionCode 1
        versionName '1.0'
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
}

Ciao e grazie.

Post unito: [time]07 Novembre 2014, 12:10:00 CET[/time]
Ho letto un po' di documentazione ed ho capito un po' di cose.

Citazione
By default a library only publishes its release variant

Quindi la libreria che viene "linkata" è release ed è normale quello che mi succede. Ma mi sorgono spontanee 2 domande:
 - A cosa serve la dockable window "Build Variant"? O meglio perché è selezionabile una variante per ogni module, anche se questo esporta un solo jar?
 - Perché riesco a debuggarci dentro? Anche se è stata compilata con debuggable a false? Sembra che il flag debuggable del modulo app faccia override su quello delle librerie.

Cmq, posso forzare la libreria ad essere compilata in tutte le varianti mettendo

    publishNonDefault true

nel build.gradle della libreria
e posso selezionare la variante da usare mettendo

    compile project(path: ':AREngine', configuration: 'debug')

nel build.gradle nella app

E la BuildConfig mi ritorna i valori corretti.
Ma così facendo la libreria è in variante 'debug' sempre. Come posso "legare" la variante della libreria a quela della app?

A riguardo di proguard, lavora sul jar di ogni modulo quindi la risposta alla domanda è che va configurato per ogni modulo. Attivandolo al momento ho qualche problema... cerco di capire come risolvere...

Ciao.



Post unito: 07 Novembre 2014, 15:29:31 CET
Mi ri-rispondo da solo:

Citazione
A cosa serve la dockable window "Build Variant"?

Nella Gradle-console mi scrive:

Citazione
Configuration on demand is an incubating feature.

Ciao
« Ultima modifica: 07 Novembre 2014, 15:29:31 CET da arlabs, Reason: Merged DoublePost »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:BuildConfig.BUILD_TYPE & BuildConfig.DEBUG
« Risposta #3 il: 07 Novembre 2014, 17:24:31 CET »
+1
Citazione
ProGuard va configurato per ogni modulo o è sufficiente nel modulo principale?

Se non hai intenzione di distribuire a terzi la tua libreria offuscata puoi configurarlo solo per il progetto principale

Citazione
Lo stesso dubbio mi viene per SigningConfig, io l'ho configurato solo nel modulo principale (e credo vada bene così), ma essendoci la possibilità di configurarlo anche per le librerie... che senso ha? Ci sono casi in cui serve?

Da quanto ne so io la SigningConfig per le librerie non serve a niente. Puoi comunque impostarle ma non credo verranno mai prese in considerazione.

Citazione
Ma così facendo la libreria è in variante 'debug' sempre. Come posso "legare" la variante della libreria a quela della app?

Al momento non c'è modo di "legare" automaticamente il build type dell'app con quello delle librerie da cui dipende. C'è però un issue aperto e assegnato, quindi magari in futuro implementeranno un supporto migliore a questa casistica.

Per ora puoi farlo tu aggiungendo publishNonDefault true alla libreria e successivamente linkandola in questo modo:

Codice: [Seleziona]
debugCompile project(path: ':library', configuration: 'debug')
releaseCompile project(path: ':library', configuration: 'release')

Citazione
- A cosa serve la dockable window "Build Variant"? O meglio perché è selezionabile una variante per ogni module, anche se questo esporta un solo jar?

Idealmente tu potresti avere delle source-set differenziate per build-variant (che poi vengono "mergiate" con il codice dentro la source-set main). Selezionando il build-type in Android Studio fa in modo che venga attivata la source-set dentro l'IDE.

Citazione
- Perché riesco a debuggarci dentro? Anche se è stata compilata con debuggable a false? Sembra che il flag debuggable del modulo app faccia override su quello delle librerie.

Il concetto di debuggabile, da quanto ne so io, è a livello di applicazione e non è applicato alle librerie.
« Ultima modifica: 07 Novembre 2014, 17:26:55 CET da Ricky` »

Offline arlabs

  • Utente normale
  • ***
  • Post: 434
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:BuildConfig.BUILD_TYPE & BuildConfig.DEBUG
« Risposta #4 il: 07 Novembre 2014, 20:26:56 CET »
0
Grazie per le risposte esaurienti Ricky.

Tra l'altro avevo provato stamattina ad usare debugCompile, ma non ci ero riuscito. Ora funziona...
Forse avevo scritto male... o perché non avevo definito anche releaseCompile. Boh.

Ciao.
« Ultima modifica: 07 Novembre 2014, 20:28:38 CET da arlabs »