2017-06-28 19 views
6

Tôi đang cố gắng sử dụng công cụ xây dựng android "com.android.tools.build:gradle:3.0.0-alpha4" trong dự án của tôi. Trong kịch bản xây dựng của tôi, tôi đổi tên gói ứng dụng đã hoạt động tốt trong quá khứ nhưng dường như không được hỗ trợ nữa.thay đổi tên tập tin apk trong gradle không thành công với gradle: 3.0.0-alpha4

android { 

    productFlavors { 
     flavorUnsigned { 
      applicationVariants.all { variant -> 
       variant.outputs.all { output -> 
        output.outputFile = new File(
          output.outputFile.parent, 
          output.outputFile.name.replace("app-flavorUnsigned-release-unsigned.apk", "DemoApp-${variant.versionName}($variant.versionCode).apk")) 
        def mappingFile = "${rootDir}/app/build/outputs/mapping/${getCurrentFlavor()}/release/mapping.txt" 
        if (variant.getBuildType().isMinifyEnabled()) { 
         variant.assemble.doLast { 
          copy { 
           from "${mappingFile}" 
           into "${rootDir}/app/build/outputs/apk" 
          } 
         } 
        } 
       } 
      } 
     } 

    } 
} 

Nhưng bây giờ tôi đang nhận được lỗi này trong khi xây dựng dự án của tôi

Error:Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=flavorUnsignedDebug, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl. 

Trả lời

20

Nếu bạn muốn di chuyển dự án của bạn để Plugin Android 3.0.0-alpha1 hoặc cao hơn bạn nên làm như sau: thay đổi API trong biến thể đầu ra:

// 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" 
    } 
} 

Đọc this trang để tìm hiểu cách t o áp dụng plugin và điều chỉnh dự án của bạn thành một số thay đổi đột phá.

+0

Tôi đã cố gắng gợi ý từ liên kết đó nhưng vẫn không được làm việc – pk4393

0

Hãy thử điều này,

Use output.outputFileName instead of output.outputFile 

này làm việc cho tôi ...

Các vấn đề liên quan