jestem na Canary 3, a to jest praca dla mnie. Ale zobacz kludge do nazwy ABI? Nie mogłem wymyślić, gdzie można uzyskać ABI w nowej strukturze, więc wyodrębniono go z domyślnej nazwy (ssie). Jeśli ktokolwiek zna lepszy sposób na uzyskanie nazwy ABI podczas używania podziałów (aby zmienić kod wersji na ABI), chciałbym usłyszeć. Może czas, aby zamieścić osobne pytanie. W każdym razie działa to na prod APK builds.
def ext = rootProject.extensions.getByName("ext")
ext.versionCodes = ['armeabi': 1, 'armeabi-v7a': 2, 'x86': 8]
android.applicationVariants.all { variant ->
if (variant.buildType.name != "debug") {
variant.outputs.all { vOutput ->
// there has got to be a better way to get the ABI name than this kludge
def nameTokens = vOutput.name.split("-");
def abiName = nameTokens[1]
abiName = nameTokens[2].contains("v7a") ? abiName + "-v7a" : abiName
def versionNumber = ext.versionCodes.get(abiName) * 1000 + variant.versionCode
def newApkName = "${getAppName()}-${variant.flavorName}-${variant.versionName}-${versionNumber}.apk"
outputFileName = newApkName
}
}
}
z tych plików produkowane z "Build APKs" dla versionCode 1 versionName "1.0.0" z armeabi-v7a i x86 ABI odpowiednio:
AppName-Prod-1.0.0-2001.apk
AppName-Prod-1.0.0-8001.apk
nie mogłem znaleźć żadne doc na nazwach ABI w nowej konfiguracji. Stary sposób ich uzyskania jest oczywiście zepsuty :-)
Pomimo tego, co mówi oficjalna dokumentacja, nie działa. –
Szukanie bliżej variant.outputs zwraca kolekcję typu com.android.build.gradle.api.BaseVariantOutput, a nie DefaultDomainObjectCollection, więc nie można zastosować do niej wszystkich zamknięć. –