29

Quando costruisco il mio progetto dopo aver cercato di coniugare sapori e buildTypes wearApp con applicationIdSuffixes, ricevo il seguente messaggio di errore:progetto di usura Android con 3 gusti, 3 buildTypes e 2 applicationIdSuffixes

Error:Execution failed for task ':app:handleFirstCustomerTestMicroApk'. 
> The main and the micro apps do not have the same package name. 

Da mia app/build .gradle:

buildTypes { 
    debug { 
     applicationIdSuffix '.debug' 
     debuggable true 
     embedMicroApp = true 
    } 
    customerTest { 
     applicationIdSuffix '.customertest' 
     debuggable true 
     embedMicroApp = true 
    } 
    release { 
     proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 
     minifyEnabled true 
     embedMicroApp = true 
    } 
} 

productFlavors { 
    first { 
     applicationId 'com.my.app.first' 
    } 
    second { 
     applicationId 'com.my.app.second' 
    } 
    third { 
     applicationId 'com.my.app.third' 
    } 
} 

dependencies { 
    firstWearApp project(path: ':wear', configuration: 'firstDebug') 
    firstWearApp project(path: ':wear', configuration: 'firstCustomerTest') 
    firstWearApp project(path: ':wear', configuration: 'firstRelease') 

    secondWearApp project(path: ':wear', configuration: 'secondDebug') 
    secondWearApp project(path: ':wear', configuration: 'secondCustomerTest') 
    secondWearApp project(path: ':wear', configuration: 'secondRelease') 

    thirdWearApp project(path: ':wear', configuration: 'thirdDebug') 
    thirdWearApp project(path: ':wear', configuration: 'thirdCustomerTest') 
    thirdWearApp project(path: ':wear', configuration: 'thirdRelease') 
} 

Dal mio usura/build.gradle:

buildTypes { 
    debug { 
     applicationIdSuffix '.debug' 
     minifyEnabled false 
    } 
    customerTest { 
     applicationIdSuffix '.customertest' 
     minifyEnabled false 
    } 
    release { 
     minifyEnabled true 
     proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 
    } 
} 
productFlavors { 
    first { 
     applicationId 'com.my.app.first' 
    } 
    second { 
     applicationId 'com.my.app.second' 
    } 
    third { 
     applicationId 'com.my.app.third' 
    } 
} 

android { 
    publishNonDefault true 
} 

So per questi che <buildType>WearApp è possibile, ma quello che mi ha realmente bisogno è <flavor><BuildType>WearApp (che non sembra possibile in questo momento):

Mantenere tutte le suddette dipendenze da WearApp di qualche tipo funziona se rimuovo applicationIdSuffixes, ma poi costruisce ancora un apk di usura per buildType, non importa quale buildType scelgo in Android Studio - e reall ho bisogno di applicationIdSuffixes.

Qualcuno ha una soluzione alternativa per questo? A partire da oggi aggiungo e rimuovo manualmente le dipendenze wearApp ogni volta che ho bisogno di modificare il mio buildType e/o il sapore e non è esattamente una soluzione con cui mi trovo a mio agio nel lungo periodo.

EDIT: Inizialmente non l'avevo notato, ma per qualche ragione le varianti firstDebug, secondDebug e thirdDebug si adattano perfettamente a tutte e 9 le dipendenze wearApp in build.gradle. Il messaggio di errore rimane lo stesso per firstCustomerTest, firstRelease, secondCustomerTest, secondRelease, thirdCustomerTest e thirdRelease. Tutte le varianti compilare i 9 wearApps ogni volta, sarebbe pulito per ridurre questo a 1.

+0

non correlati alla propria domanda: definire "initwith debug" in buildTypes -customerTest, quindi il tuo tipo di build personalizzato utilizzerà automaticamente tutte le impostazioni di "debug". Ora è sufficiente definire "applicationIdSuffix": l'unico diverso rispetto a "debug" Vedere dev.android.com per riferimento: https://developer.android.com/studio/build/build-variants.html#build- tipi ... Sono consapevole che non è incredibilmente utile nel tuo caso, ma mi piacerebbe ancora sottolineare la possibilità. –

risposta

8

Secondo This Post

Prova questo

configurations { 
    firstDebugWearApp 
    firstCustomerTestWearApp 
    firstReleaseWearApp 
    secondDebugWearApp 
...// And all the others 
} 
    dependencies { 
     firstDebugWearApp project(path: ':wear', configuration: 'firstDebug') 
     firstCustomerTestWearApp project(path: ':wear', configuration: 'firstCustomerTest') 
     firstReleaseWearApp project(path: ':wear', configuration: 'firstRelease') 

     secondDebugWearApp project(path: ':wear', configuration: 'secondDebug') 
     secondCustomerTestWearApp project(path: ':wear', configuration: 'secondCustomerTest') 
     secondReleaseWearApp project(path: ':wear', configuration: 'secondRelease') 

     thirdDebugWearApp project(path: ':wear', configuration: 'thirdDebug') 
     thirdCustomerTestWearApp project(path: ':wear', configuration: 'thirdCustomerTest') 
     thirdReleaseWearApp project(path: ':wear', configuration: 'thirdRelease') 
    } 
+0

Grazie, "configurazioni" era il collegamento mancante! Li costruisce ancora tutti su ogni build, ma l'importante è che funzioni. – Tormod