Android Studio3.0修改apk名稱

1. 如何修改打包好的apk名稱

Android Studio從2.0升級到3.0之后,要修改打包后的apk名稱,必須采用以下配置:

android {
    ...
    
    applicationVariants.all {variant ->
        variant.outputs.all {output ->
            if (variant.buildType.name == "debug") {
                output.outputFileName = "iou_v${android.defaultConfig.versionName}_debug_${getCurrentTime()}.apk"
            } else if (variant.buildType.name == "release") {
                output.outputFileName = "iou_v${android.defaultConfig.versionName}_release_${getCurrentTime()}.apk"
            }
        }
    }
}

//獲取當(dāng)前時間
def getCurrentTime() {
    return new Date().format("yyyy-MM-dd HH:mm:ss")
}

以我自己的某個工程為例,最終打出的一個debug包如下:

iou_v1.1.6.1_debug_2018-10-17 17:11:36.apk

這斷配置的核心是設(shè)置output.outputFileName,鼠標(biāo)點(diǎn)上去可以發(fā)現(xiàn),這個output對象是BaseVariantOutput類型的,但是我們查看BaseVariantOutput的代碼,發(fā)現(xiàn)死活找不到outputFileName屬性,這樣就很令人費(fèi)解了,網(wǎng)上找了一圈也沒相關(guān)資料介紹。
秉著刨根究底的精神,我們看看這個output到底是個什么鬼?采用以下代碼在控制臺打印出來看看:

  println output 
  Field[] fields = output.getClass().getDeclaredFields()
  fields.each { field ->
      println field.name
  }
ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=debug, filters=[]}}
__dyn_obj__
__meta_class__
__mapping__
__apkData__
__assemble__
__baseName__
__dirName__
__filterTypes__
__filters__
__mainOutputFile__
__name__
__outputFile__
__outputFileName__
__outputType__
__outputs__
__packageApplication__
__processManifest__
__processResources__
__versionCode__
__versionCodeOverride__
__versionNameOverride__
__zipAlign__

可以看到這個output的真實(shí)類型是ApkVariantOutputImpl_Decorated,里面有個屬性__outputFileName__,這其實(shí)是個裝飾類,它真正的類型是ApkVariantOutput,outputFileName就是ApkVariantOutput里的屬性值。

2. 如何打包完成后將apk復(fù)制到指定目錄

我們做持續(xù)集成的時候,自動打包之后,可能會需要將包復(fù)制到指定的目錄。

project.tasks.all {task ->
    if ("assembleDebug" == task.name || "assembleRelease" == task.name) {
        //在打包完成之后,增加一個任務(wù)
        task.doLast {
            println "====${task.name} doLast===="
            android.applicationVariants.all { variant ->
                variant.outputs.all { output ->
                    def apkFile = output.outputFile
                    //如果目標(biāo)文件存在
                    if (apkFile.exists()) {
                        //將apk文件復(fù)制到桌面去
                        copy {
                            from apkFile.getCanonicalPath()
                            into "/Users/hjy/Desktop"
                        }
                        //復(fù)制到指定目錄后刪除原文件
                        delete(apkFile)
                    }
                }
            }
       }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 你偶爾睡不著,你想起以前,種種種種,歷歷在目,你沉浸在過去的悲歡離合之中,難以入睡,于是,很多個夜晚,情緒占了上風(fēng)...
    icer_閱讀 265評論 0 0
  • 《金文誠〈孟子〉學(xué)習(xí)筆記606,盡心章13-1-2-14》 【"存其心,養(yǎng)其性,所以事天也。"】 今天是戊戌年乙卯...
    金吾生閱讀 218評論 0 0
  • 去年中秋,在宿舍耐不住寂寞,于是一個人背著包,坐著慢悠悠的火車去了開封,七個小時的硬座,在欣喜的心...
    Rachel曹閱讀 335評論 0 1
  • 怎樣的自己,才是想要的期許? 暗夜里,靈魂搖擺追隨記憶而去。 眼眸中的淚滴,換不回?fù)肀У奶鹈邸?悄然逝去,除卻了青...
    林中可有李子樹閱讀 191評論 0 0
  • 10.2感恩日記 感恩十一長假,孩子們不用上學(xué),時間寬松,心情也很放松!祝愿所有的人假期玩的愉快,生活開心幸福!感...
    rainlove2011閱讀 247評論 0 0

友情鏈接更多精彩內(nèi)容