2013-08-30 38 views
5

Tôi đang sử dụng Gradle để lập dự án Android của tôi:Gradle: applicationVariants.all bỏ qua một biến thể

buildTypes { 
    release { 
     signingConfig signingConfigs.release 
     applicationVariants.all { variant -> 
      def file = variant.outputFile 
      def fileName = file.name 
      fileName = fileName.replace(".apk", "-renamed".apk") 
      variant.outputFile = new File(file.parent, fileName) 
     } 
    } 
} 

Không phải tất cả các file đầu ra được đổi tên, nó luôn luôn bỏ qua 1 file. Tại sao?

myapp-debug-unaligned-renamed.apk <-renamed, OK! 
myapp-release.apk     <-NOT renamed, WRONG! 
myapp-release-unaligned-renamed.apk <-renamed, OK! 

Trả lời

15

tôi giải quyết sử dụng mã này:

buildTypes { 
    release { 
     signingConfig signingConfigs.release 
    } 

    applicationVariants.all { variant -> 
     def apk = variant.packageApplication.outputFile; 
     def newName = apk.name.replace(".apk", "-renamed.apk"); 
     variant.packageApplication.outputFile = new File(apk.parentFile, newName); 
     if (variant.zipAlign) { 
      variant.zipAlign.outputFile = new File(apk.parentFile, newName.replace("-unaligned", "")); 
     } 
    } 
} 

Khối applicationVariants.all {...} tại là ngoài khối release {...}.

Tôi nghĩ rằng variant.zipAlign.outputFile tạo sự khác biệt.

+2

Cú pháp đã thay đổi với phiên bản 1.0.0 của plugin gradle. Xem giải pháp được cập nhật tại đây: http://stackoverflow.com/questions/23693309/renaming-apk-in-gradle/27369185#27369185 – Nebu

-1

tôi đơn giản hóa nó bằng cách loại bỏ một trong những dòng của bạn, nhưng về cơ bản bạn cần thay đổi nó như vậy:

android { 

    buildTypes { 
    ... 
    } 

    applicationVariants.all { variant -> 
     def file = variant.outputFile 
     def fileName = file.name.replace(".apk", "-renamed".apk") 
     variant.outputFile = new File(file.parent, fileName) 
    } 
} 
+0

đưa ra mã từ khối buildTypes {} không giải quyết được sự cố. –

+0

biến thể có outputFiles (số nhiều) bây giờ. –

4

Nên có 3 đầu ra file apk khi sử dụng cấu hình build.gradle của bạn: debug unsigned unaligned, phát hành đã ký liên kết và phát hành có chữ ký đã ký kết. Có hai biến cho applicationVariant để xử lý các tệp đầu ra: outputFilepackageApplication.outputFile, trước đây được sử dụng cho zipalign và sau này được sử dụng trong trường hợp chung.

Vì vậy, các cách thích hợp để đổi tên tất cả các file sẽ như thế này:

android.applicationVariants.all { variant -> 
    if (variant.zipAlign) { 
     def oldFile = variant.outputFile; 
     def newFile = oldFile.name.replace(".apk", "-renamed.apk") 
     variant.outputFile = new File(oldFile.parent, newFile) 
    } 

    def oldFile = variant.packageApplication.outputFile; 
    def newFile = oldFile.name.replace(".apk", "-renamed.apk") 
    variant.packageApplication.outputFile = new File(oldFile.parent, newFile) 
} 
Các vấn đề liên quan