Android Gradle 3.0.0-alpha2 eklentisi, 'outputFile' salt okunur özelliğinin değeri ayarlanamıyor


86

bu kodu kullanıyordum

applicationVariants.all { variant -> 
    variant.outputs.each { output ->
        def SEP = "_"
        def flavor = variant.productFlavors[0].name
        def buildType = 
        variant.variantData.variantConfiguration.buildType.name
        def version = variant.versionName
        def date = new Date()
        def formattedDate = date.format('ddMMyy_HHmm')
        def newApkName = PROJECT_NAME + SEP + flavor + SEP + buildType + SEP + version + SEP + formattedDate + ".apk"
        def file = new File(newApkName)
        output.outputFile = file
    }
}


Yeni apk oluştururken apk dosyasının adını değiştirmek için, ancak Android Studio 3.0 Canary 2'yi kullandığım için bu hata görünüyor:
Salt okunur özelliği 'outputFile' değerini ayarlayamıyorum ...


1
İşte kötü haberin açıklaması, developer.android.com/studio/preview/features/… , görünüşe göre bunu çözmek için yeni bir API planlanıyor. Bu bağlantılar sayfasının en altına gidin.
Hector

Yanıtlar:


207

As 3.0 taşıma kılavuzu eklentisi Android öneriyor:

  • Yerine all()kullanıneach()
  • Yalnızca dosya adını değiştirirseniz outputFileNamebunun yerine kullanın output.outputFile(bu sizin durumunuzdur)

Kılavuzdan örnek:

// If you use each() to iterate through the variant objects,
// you need to start using all(). That's because each() iterates
// through only the objects that already exist during configuration time—
// but those object don't exist at configuration time with the new model.
// However, all() adapts to the new model by picking up object as they are
// added during execution.
android.applicationVariants.all { variant ->
    variant.outputs.all {
        outputFileName = "${variant.name}-${variant.versionName}.apk"
    }
}

1
Sadece adı değil, çıktı dosyası yolunu da değiştirmem gerekiyor.
Amrut Bidri

@AmrutBidri, yeni bir soru sormanın en iyisi olacağını düşünüyorum (SO'da bir yerde daha önce cevaplanmamışsa). Bu soru sadece dosya adını değiştirmek içindi.
Paweł Nadolski

Evet çalışıyor, benim hatam, gradle sürümünü kontrol eden kendi eklentimle ilgili bir sorun oldu.
sandrstar

7

Aşağıya bakınız:

applicationVariants.all { variant ->
    variant.outputs.all { output ->
        def newApkName = applicationId + "-" + variant.versionName + "(" + variant.versionCode + ")" + ".apk";
        outputFileName = new File("${project.projectDir}/../outputs/apks/" + variant.name, newApkName);
    }
}

1
bu çalışır, ancak çıktı dizinini değiştiremezsiniz
just_user

Sadece adı değil, çıktı dosyası yolunu da değiştirmem gerekiyor.
Amrut Bidri

hata alma: Bir çıktı dosyası adı belirlenirken mutlak yol desteklenmiyor
ozmank

4

Aşağıdaki kod benim için android studio canary 3.0.0-alpha3 üzerinde çalışıyor

android.applicationVariants.all {
    variant.outputs.all {
        def newApkName
        newApkName = "APPLICATION_NAME-" + defaultConfig.versionName + "-" + defaultConfig.versionCode".apk"
        outputFileName = newApkName;
    }
}

Bu, apk dosya adını değiştirir


Com.android.build.gradle.internal.api.ApplicationVariantImpl türündeki nesne için bilinmeyen özellik 'variant' alınamadı.
ozmank

2

Bu, bu sorunun tam örneğidir .

Üründen sonra 3.0+ gradle'ınızı yapıştırmanız yeterlidir.

    android.applicationVariants.all { variant ->
    variant.outputs.all {

        def SEP = "_"
        def flavor = variant.productFlavors[0].name
        def buildType = variant.variantData.variantConfiguration.buildType.name
        def version = variant.versionName
        def versionCode = variant.versionCode
        def date = new Date();
        def formattedDate = date.format('ddMMyy_HHmm')

        outputFileName = "${flavor}${SEP}${buildType}${SEP}${version}${SEP}${versionCode}${SEP}${formattedDate}.apk"
    }
    }

3.0+ gradle'ınıza ve productFlavours'dan sonra yapıştırdınız mı? özel hatayı koyabilir misin?
Pabel

0

Gradle 3.0'ı kurdum artık çalışmıyor. kaynak bağlantısı

Ancak, outputFile nesnelerine erişmeyi içeren daha karmaşık görevler artık çalışmamaktadır. Bunun nedeni, varyanta özgü görevlerin artık yapılandırma aşamasında oluşturulmamasıdır. Bu, eklentinin tüm çıktılarını önceden bilmemesine neden olur, ancak aynı zamanda daha hızlı yapılandırma süreleri anlamına gelir.

sonra gradlewprojeyi derlemek için komut kullandım cpve çıktı apk'yi belirtilen yoluma

Execute shell'de aşağıdaki komutu koydum.

./gradlew clean assembleDebug
cp $WORKSPACE/app/build/outputs/apk/debug/*.apk $WORKSPACE/JenkinsApk

nasıl yaptığınız örneği paylaşır mısınız?
Amrut Bidri

0

Ben de aynı sorunu yaşadım. Hata "Salt okunur 'outputFile' özelliğinin değeri ayarlanamıyor ...." "

Ben de Android Eklenti Deposunun sürümünü Proje Yapısı penceresinde 2.3.3 olarak değiştirdim. Şimdi çalışıyor ve hata ortadan kalktı.

Proje Yapısı

Daha sonra proje için Temizleyin ve Yeniden Oluşturun ve işte bu kadar

Umarım bu size yardımcı olur.


0

Sorunun sorulmasının üzerinden bir buçuk yıl geçti ama belki bu, bu yazıyı ilk keşfeden birine (benim gibi) yardımcı olabilir. Dosya adını ve dizini değiştirme cevabının burada cevaplandığına inanıyorum .

applicationVariants.all { variant ->
        variant.outputs.all { output ->
            def relativeRootDir = output.packageApplication.outputDirectory.toPath()
                     .relativize(rootDir.toPath()).toFile()
            output.outputFileName = new File( "$relativeRootDir/release", newOutputName)
        }
    }

-1

Android Studio 3.0.0'a güncelledikten ve yeni gradle'ı kullandıktan sonra, şimdi, apks'lerin çıktısı, tatlar adına ve derleme türlerine göre dizinlere dağıtılacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.