2015-08-25 12 views
11

Potrzebuję generować zarówno niepodpisane, jak i podpisane apki wydawania, używając polecenia gradle (gradlew assembleRelease to polecenie im teraz używane)Jak wygenerować podpisane i niepodpisane APK przy użyciu gradle?

Apki muszą być wyrównane. Sprawdziłem to: Build Unsigned APK with Gradle, ale wydaje się, że to stary sposób na osiągnięcie tego, teraz nie działa i coś się zmieniło w ostatnich wersjach kompilacji Androida i gradle. Muszę też generować jednocześnie oba apki, a nie tylko tryb wydania lub unsigned mode.

+0

Przepraszam za pierwszą odpowiedź, źle odczytałem pytanie –

+0

uruchom 'gradle clean assemble' (spowoduje to wykonanie' assembleDebug' i 'assembleRelease'. Upewnij się, że debugujący buildType nie ma singingConfig, ale wersja buildType ma jeden. –

+0

Więc, czy rozwiązałeś swój problem? –

Odpowiedz

3

Odpowiedź, z którą się łączysz jest prawidłowa - jeśli wybrany wariant (np. Typ budowy + kombinacja smaku) nie używa "podpisu gotowego "konfiguracja podpisu, gradle utworzy niepodpisany plik APK.

Tak można określić konfigurację tak:

android { 
    signingConfigs { 
    release { ... } 
    } 

    productFlavors { 
    signed { 
     signingConfig signingConfigs.release // defined above 
    } 

    unsigned {} // use the default options 
    } 
} 

Następnie uruchomiony ./gradlew :app:assembleRelease będą tworzyć APKs:

app/build/outputs/apk 
├── app-signed-release.apk 
├── app-signed-release-unaligned.apk 
└── app-unsigned-release-unsigned.apk 
+3

Myślę, że podpisywanieConfig powinno odbywać się w buildTypes, a smaki są dla logiki aplikacji. –

+1

Dobrze, zgodzili się. –

7

myślę buildTypes jest bardziej odpowiednie miejsce niż productFlavors.
Można rozszerzyć kompilację wydania, zastępując metodę signingConfig.

buildTypes { 
    release { 
     .... 
     signingConfig signingConfigs.release 
    } 

    releaseUnsigned.initWith(buildTypes.release) 
    releaseUnsigned { 
     signingConfig null 
    } 
} 

Następnie na budowę zarówno APK-pliki:

./gradlew assemble 

Albo jeśli chcesz tylko uwolnienie buduje

./gradlew assembleRelease assembleReleaseUnsigned 
or ./gradlew assR assRU 

Jeśli naprawdę chcesz używać tylko zadanie assembleRelease, możesz zrobić to Zależność:

assembleRelease.dependsOn assembleReleaseUnsigned 

i budować z tylko

./gradlew assembleRelease 
3

Wiem, że to dość stary odpowiedź, ale nadal może pomóc komuś zdobyć swój cel bez dodawania dodatkowego smaku (nawet jak w moim przypadku może to być trudne, ponieważ wiele zależnościami w projekcie).

android { 
    signingConfigs { 
    release { ... } 
    } 

    productFlavors { 
    signed { 
     signingConfig (checkUnsigned() ? null : signingConfigs.release) 

    } 
} 

def checkUnsigned() { 
    return project.hasProperty("unsigned") 
} 

W celu wykorzystania go po prostu używać

gradle assembleRelease 

lub

gradle assembleRelease '-Punsigned' 

tworzenia niepodpisanych (cytaty dla CI, w przeciwnym razie może nie być potrzebne)

wadą rozwiązaniem jest właśnie wtedy, gdy chcesz zebrać kilka smaków w jednej linii czyli

gradle assembleRelease assembleDebug assembleRelease '-Punsigned' 

weryfikacje assembleRelease wszystkie właściwości w wierszu poleceń, więc najpierw assembleRelease będą callse również z param „-Punsigned” postanowiłem ten problem przy użyciu CI 2 polecenia - jeden dla podpisane, inne dla wersji niepodpisanych

gradle assembleRelease assembleOtherFlavour '-Punsigned' 
gradle assembleDebug assembleRelease assembleOtherFlavour 
+0

Nigdy się nie spóźniłem, aby pomóc innym jak ja: Dziękuję! – Equiman

+0

To jest mniejszy ciężar niż dodanie nowego wariantu budowy. Dzięki! –

Powiązane problemy