最近負責公司研究新的多渠道打包方案,之前的打包方案太慢了,因此採用了美團的Android Signature V2 Scheme簽名下的新一代渠道包打包神器 方案進行了多渠道打包。但是由於馬虎,在配置多渠道打包定製渠道包的APK的文件名稱的時候,在apk文件名稱簽名多敲了一個空格,因此出出現了FTP文件一直無法下載的悲劇,下面具體描述一下。
在Jenkins成功的時候多渠道包之後,會轉移編譯好的apk到FTP服務器,如下圖所示,Jenkins第557次編譯成功後的產物轉移到FTP服務器之後,如下所示:
這個時候,用火狐瀏覽器去點擊相應的apk進行下載可以正常下載下來,例如我們就下載XTCWatch_v3.6.0.App_Android_Trunk_557_imoo.apk到桌面,如下所示:
鏈接爲:
project/Android/Common/App_Android_Trunk/2017-04-14-00-40-55-svn-19462-build-557/%20XTCWatch_v3.6.0.App_Android_Trunk_557_imoo.apk
- 1
成功下載到桌面之後,如下所示:
特別注意上圖中的文件名,發現在XTCWatch_v3.6.0.App_Android_Trunk_557_imoo.apk字符串之前還有一個空格,之前我一直忽略了。
然後我提測給測試人員,測試人員沒有安裝火狐瀏覽器,使用的是Google Chrome瀏覽器,然後一直無法下載下來。我們自己用Google Chrome瀏覽器來複現一下,如下所示:
我們也下載XTCWatch_v3.6.0.App_Android_Trunk_557_imoo.apk到桌面,點擊鏈接,直接提示無法訪問此網站,如下所示:
可以發現鏈接爲:
/project/Android/Common/App_Android_Trunk/2017-04-14-00-40-55-svn-19462-build-557/XTCWatch_v3.6.0.App_Android_Trunk_557_imoo.apk
- 1
對比一下之前的火狐瀏覽器的請求
FireFox 瀏覽器點擊請求的鏈接
/project/Android/Common/App_Android_Trunk/2017-04-14-00-40-55-svn-19462-build-557/%20XTCWatch_v3.6.0.App_Android_Trunk_557_imoo.apk
Google Chrome瀏覽器點擊請求的鏈接
/project/Android/Common/App_Android_Trunk/2017-04-14-00-40-55-svn-19462-build-557/XTCWatch_v3.6.0.App_Android_Trunk_557_imoo.apk
- 1
- 2
- 3
- 4
- 5
我還不信邪了,我又去使用XFTP下載該apk,發現也是報錯,如下圖所示:
我又換了CuteFTP軟件下載該apk,發現可以正常下載,如下圖所示:
點擊查看剛剛的下載任務屬性,發現下載路徑有空格符,如下圖所示:
下面是XFTP和CuteFTP請求的鏈接對比
XTFP的請求鏈接
/project/Android/Common/App_Android_Trunk/2017-04-14-00-40-55-svn-19462-build-557/XTCWatch_v3.6.0.App_Android_Trunk_557_imoo.apk
CuteFTP的請求鏈接
/project/Android/Common/App_Android_Trunk/2017-04-14-00-40-55-svn-19462-build-557/ XTCWatch_v3.6.0.App_Android_Trunk_557_imoo.apk
- 1
- 2
- 3
- 4
- 5
因此可以總結原因就是:
FireFox瀏覽器和CuteFTP保持FTP服務器上的文件原版路徑不改變,因此可以正常下載下來。
而Google Chrome瀏覽器和XFTP軟件,自作聰明的將FTP服務器上的文件的文件名中的空格符去掉了,導致下載請求鏈接時,鏈接並不存在,所以無法下載。
手賤,增加了空格符的groovy腳本語言如下所示:
walle {
// 指定渠道包的輸出路徑
apkOutputFolder = new File("${project.buildDir}/outputs/channels");
// 定製渠道包的APK的文件名稱
apkFileNameFormat = ' XTCWatch_'+'v${versionName}_${channel}.apk';
// 渠道配置文件
channelFile = new File("${project.getProjectDir()}/channel")
- 1
- 2
- 3
- 4
- 5
- 6
- 7
通過一段時間查找原因,終於找到了是因爲文件名加了一個空格符導致無法下載的問題後,修復的groovy腳本語言如下所示:
walle {
// 指定渠道包的輸出路徑
apkOutputFolder = new File("${project.buildDir}/outputs/channels");
// 定製渠道包的APK的文件名稱
apkFileNameFormat = 'XTCWatch_'+'v${versionName}_${channel}.apk';
// 渠道配置文件
channelFile = new File("${project.getProjectDir()}/channel")
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
提交代碼,重新Jenkins編譯之後,再次用Google Chrome瀏覽器和XFTP下載多渠道包apk,正常,如下所示:
點擊鏈接下載的話,可以正常下載,如下所示:
使用XFTP也可以正常下載,如下所示: