Android渠道包自動發布市場,Android Gradle實現打包指定渠道后自動上傳到fir

fir分三個主要步驟1.獲取fir上傳憑證

2.上傳APK+APP logo圖標

3.獲取最新的下載地址供別人下載

注:python使用的是requests網絡請求庫

1.獲取fir上傳憑證

AAffA0nNPuCLAAAAAElFTkSuQmCC

image.png

代碼如下:#?第一步:獲取fir上傳憑證

print("get?fir?upload?certificate")

icondict?=?{}??#?后面上傳圖標和apk需要使用的參數,這里保存下來

binarydict?=?{}????????try:

req?=?requests.post("http://api.fir.im/apps",

{'type':?'android',?'bundle_id':?apppackage,?'api_token':?apitoken})

resjson?=?req.json()

icondict?=?(resjson["cert"]["icon"])

binarydict?=?(resjson["cert"]["binary"])????????????print("get?fir?upload?certificate?success")

except?Exception:????????????print("get?fir?upload?certificate?error")

traceback.print_exc()

2.上傳APK+logo圖標

AAffA0nNPuCLAAAAAElFTkSuQmCC

image.png

代碼如下:#?第二步:上傳APK

try:????????????print("uploading?apk......")

apkfile?=?{'file':?open(apkpath,?'rb')}

param?=?{"key":?binarydict["key"],?????????????????????"token":?binarydict["token"],?????????????????????"x:name":?appname,?????????????????????"x:version":?appversion,?????????????????????"x:build":?appbuild,?????????????????????"x:changelog":?apkchangelog}

req?=?requests.post(url=binarydict["upload_url"],?files=apkfile,?data=param,?verify=False)

except?Exception?as?e:????????????print("upload?apk?error")

traceback.print_exc()#?第三步:上傳APK?logo

try:

apklogofile?=?{'file':?open(apklogo,?'rb')}

param?=?{"key":?icondict["key"],?????????????????????"token":?icondict["token"]}

req?=?requests.post(url=icondict["upload_url"],?files=apklogofile,?data=param,?verify=False)

except?Exception:????????????print("upload?apk?error")

traceback.print_exc()

3.獲取最新的下載地址

AAffA0nNPuCLAAAAAElFTkSuQmCC

image.png

代碼如下:#?第四步:獲取APK最新下載地址

queryurl?=?'http://api.fir.im/apps/latest/%s?api_token=%s&type=android'?%?(apppackage,?apitoken)????????try:

req?=?requests.get(queryurl)

update_url?=?(req.json()["update_url"])????????????print("upload?apk?success,?update?url?is?"?+?update_url)

except?Exception:????????????print("upload?apk?error")

traceback.print_exc()

代碼里面如下參數都是動態傳入的,配合AndroidStudio自帶的gradle使用

appname = sys.argv[1] ?# app名稱

apppackage = sys.argv[2] ?# 唯一包名,也即是bundle_id

appversion = sys.argv[3] ?# app版本號

appbuild = sys.argv[4] ?# app build號

apitoken = sys.argv[5] ?# fir token

apklogo = sys.argv[6] ?# 等待上傳的APK logo路徑

apkpath = sys.argv[7] ?# 等待上傳的APK路徑

apkchangelog = sys.argv[8] ?# 等待上傳的APK更新日志(可能沒有填寫)

完整代碼#?encoding?=?utf-8import?sysimport?tracebackimport?requests

requests.packages.urllib3.disable_warnings()def?uploadtofir():

#?參數檢查

paramnum?=?8

syslen?=?len(sys.argv)????if?syslen?

print("please?input?param")????????return

else:????????#?基礎參數

appname?=?sys.argv[1]??#?app名稱

apppackage?=?sys.argv[2]??#?唯一包名,也即是bundle_id

appversion?=?sys.argv[3]??#?app版本號

appbuild?=?sys.argv[4]??#?app?build號

apitoken?=?sys.argv[5]??#?fir?token

apklogo?=?sys.argv[6]??#?等待上傳的APK?logo路徑

apkpath?=?sys.argv[7]??#?等待上傳的APK路徑

apkchangelog?=?syslen?==?9?and?sys.argv[8]?or?""??#?等待上傳的APK更新日志(可能沒有填寫)

#?第一步:獲取fir上傳憑證

print("get?fir?upload?certificate")

icondict?=?{}??#?后面上傳圖標和apk需要使用的參數,這里保存下來

binarydict?=?{}????????try:

req?=?requests.post("http://api.fir.im/apps",

{'type':?'android',?'bundle_id':?apppackage,?'api_token':?apitoken})

resjson?=?req.json()

icondict?=?(resjson["cert"]["icon"])

binarydict?=?(resjson["cert"]["binary"])

print("get?fir?upload?certificate?success")????????except?Exception:

print("get?fir?upload?certificate?error")

traceback.print_exc()????????#?第二步:上傳APK

try:

print("uploading?apk......")

apkfile?=?{'file':?open(apkpath,?'rb')}

param?=?{"key":?binarydict["key"],?????????????????????"token":?binarydict["token"],?????????????????????"x:name":?appname,?????????????????????"x:version":?appversion,?????????????????????"x:build":?appbuild,?????????????????????"x:changelog":?apkchangelog}

req?=?requests.post(url=binarydict["upload_url"],?files=apkfile,?data=param,?verify=False)????????except?Exception?as?e:

print("upload?apk?error")

traceback.print_exc()????????#?第三步:上傳APK?logo

try:

apklogofile?=?{'file':?open(apklogo,?'rb')}

param?=?{"key":?icondict["key"],?????????????????????"token":?icondict["token"]}

req?=?requests.post(url=icondict["upload_url"],?files=apklogofile,?data=param,?verify=False)????????except?Exception:

print("upload?apk?error")

traceback.print_exc()????????#?第四步:獲取APK最新下載地址

queryurl?=?'http://api.fir.im/apps/latest/%s?api_token=%s&type=android'?%?(apppackage,?apitoken)????????try:

req?=?requests.get(queryurl)

update_url?=?(req.json()["update_url"])

print("upload?apk?success,?update?url?is?"?+?update_url)????????except?Exception:

print("upload?apk?error")

traceback.print_exc()if?__name__?==?'__main__':

uploadtofir()

Android Gradle配置

將上面寫好的.py文件復制到項目的app目錄下(非project目錄),同時在app級別下的gradle文件中添加如下代碼(添加到android{}里面)//自定義一個任務,實現打包meisha渠道自動上傳到fir

task?assembleWithFir{

dependsOn?'assembleXXXXRelease'//打包自己需要的渠道

doLast{

def?appname="你的APP名稱"

def?apppackage=project.android.defaultConfig.applicationId

def?appversion=project.android.defaultConfig.versionName

def?appbuild=project.android.defaultConfig.versionCode

def?apitoken="你的fir?ApiToken"

def?apklogo="你的APK?LOGO"

def?apkpath="你的APK本地地址"

def?apkchangelog=""

//調用python腳本??這個腳本需要放在app工程目錄下,不要放在project目錄下

def?process="python?UploadToFir.py?${appname}?${apppackage}?${appversion}?${appbuild}?${apitoken}?${apklogo}?${apkpath}?${apkchangelog}".execute()????????????//打印Python腳本日志,便于出錯調試

ByteArrayOutputStream?result?=?new?ByteArrayOutputStream()

def?inputStream?=?process.getInputStream()????????????byte[]?buffer?=?new?byte[1024]????????????int?length????????????while?((length?=?inputStream.read(buffer))?!=?-1)?{

result.write(buffer,?0,?length)

}

println(result.toString("utf-8"))

}

}

至此全部搞定,同步一下gradle后發現多了一個assembleWithFir命令

AAffA0nNPuCLAAAAAElFTkSuQmCC

image.png

雙擊assembleWithFir開始打包剛才指定的渠道,之后自動上傳APK到fir,如下點擊該連接就能查看相關了

AAffA0nNPuCLAAAAAElFTkSuQmCC

image.png

注意事項:.py python文件要放在app級別的目錄下(非project)

確保電腦已安裝python運行環境,requests網絡請求庫

作者:CKTim

鏈接:https://www.jianshu.com/p/833cc4d0c0ae

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529322.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529322.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529322.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android studio vfs,Android Studio:嘗試呈現XML布局的InvalidVirtualFileAccessException

我正在嘗試在我的應用中預覽xml布局(任何xml布局).我正在使用Android Studio 1.5 Preview 2.我一遍又一遍地收到此錯誤:InvalidVirtualFileAccessException:訪問無效的虛擬文件:file:// D:/Scott/Android/Studio/MyApp/app/build/intermediates/classes/debug/com/scott/myapp/…

android 基類fragment,Android DialogFragment 基類的定制

鴻洋博客介紹:DialogFragment的基本使用好處:1:使用DialogFragment來管理對話框,當旋轉屏幕和按下后退鍵時可以更好的管理其聲明周期,它和Fragment有著基本一致的生命周期2.DialogFragment也允許開發者把Dialog作為內嵌…

升級鴻蒙系統無法選擇應用,申請鴻蒙系統有一個應用選擇怎么選擇呢

[分享交流]申請鴻蒙系統有一個應用選擇怎么選擇呢34364電梯直達huafen774590890新學乍練發表于 2020-12-18 22:19:17來自:HUAWEI Mate 30 Pro 5G最新回復 2020-12-19 09:31:55要怎么選擇大家知道嗎?想著你的狼自成一派發表于 2020-12-18 22:22:29來自&am…

html5 網頁游戲論文,JavaScript編寫的網頁小游戲,很給力

以下為游戲代碼:var timerID null;var INT 40;var loadFLG 0;var gameFLG 0;var missFLG 0;var tim 0;var blcol new Array(5); // block colorvar blsta new Array(40); // block statusvar blNO new Array(40); // block Novar blclr 0; // clear block…

c 插件讀取有屬性的html6,廖雪峰的JS教程6-jQuery

jQueryjQuery是JavaScript世界中使用最廣泛的一個庫。jQuery這么流行,肯定是因為它解決了一些很重要的問題。實際上,jQuery能幫我們干這些事情:消除瀏覽器差異:你不需要自己寫冗長的代碼來針對不同的瀏覽器來綁定事件,…

html5中的css特性,淺談HTML5 CSS3的新交互特性

本文標題的這副圖片,是用phosotshop制作的。但是,在搜索引擎中你卻無法搜索到它,搜索引擎還沒有強大到能夠識別圖片里面的文字。并且由于圖片的體積不算太小,可能網速慢的網友在瀏覽的時候不得不耐心的等待圖片的刷新。那么&#…

html表格通過郵件發送,通過html表格發電子郵件

[email protected]>Create this tableThe field "what" is for different categoriesCREATE TABLE email_notify (ID int(11) DEFAULT ‘0‘ NOT NULL,What varchar(60) DEFAULT ‘0‘ NOT NULL,Name varchar(60) DEFAULT ‘0‘ NOT NULL,Email varchar(60) DEFAU…

計算機專業知識多選題證監會,2019年國家公務員考試中國證監會(計算機類)專業科目考試大綱...

2019年國家公務員考試中國證監會(計算機類)專業科目考試大綱由國家公務員考試網公告解讀欄目由提供,更多關于2019國家公務員考試大綱,計算機類國考考試大綱,證監會國考考試大,國家公務員考試公告解讀的內容,請關注國家公務員考試網/廣東公務員考試網&…

計算機和網絡老是斷開,電腦插上網線還是顯示斷開連接怎么辦

在網絡故障處理中遇到過千奇百怪的問題,這里就說一個比較怪異的問題。一個網線插口,有的電腦插上網線可以正常上網,而有的電腦插上就顯示斷開連接。試了好多辦法,換了網線,換了插口,換了路由器,…

計量經濟學第六版計算機答案,伍德里奇計量經濟學導論計算機習題第六章第13題c_6.13...

伍德里奇計量經濟學導論計算機習題第六章第13題,答案和MATLAB代碼clear,clc;% c6.13 by% 打開文字文件和數據文件importdata(meap00_01.des);dataxlsread(meap00_01);% 檢驗所用數據是否為非空Isnanisnan(data(:,[3,5,8,9]));asum(Isnan);bfind(a0);data1data(b,:);% 變量命名m…

思品課如何使用計算機教學課件,小學思品獲獎論文巧用多媒體,優化思品課堂教學...

小學思品獲獎論文巧用多媒體,優化思品課堂教學摘要:信息技術輔助課堂教學,有利于促進思想品德課教學內容呈現方式、教師教學方式、學生學習方式和師生互動方式的變革。利用信息技術能提高學生學習思想品德的興趣;有利于培養學生的…

計算機網絡的資源共享功能包,計算機網絡的資源共享功能包括

資源共享是現代計算機網絡的最主要的作用,它包括軟件共享、硬件共享及數據共享。在網絡中,多臺計算機或同一計算機中的多個用戶,同時使用硬件和軟件資源。通常多用戶同時需要的資源總是超過系統實際物理資源的數量,但采用邏輯(或虛…

《計算機應用基礎》期末試卷.,《計算機應用基礎》期末試卷(A卷)《計算機應用基礎》期末試卷(A卷).doc...

廣東外語藝術職業學院成人高等教育2012學年第 一 學期 三年 制2012級 初等教育專業計算機應用基礎課程 期末 考試試題試卷類型:A 考試形式:閉卷本試題共 五 大題, 4 頁,滿分 100 分,考試時間為 120 分鐘,答…

計算機學院嘉年華標題,“芯動盛夏 AI創南航” 計算機學院舉辦第八屆計算機嘉年華...

當前,我們正迎來一個科技主導的全智能時代,為激發大家學習探索人工智能的興趣,切身感受AI科技的魅力所在,計算機科學與技術學院/人工智能學院于6月20日在體育館廣場舉辦了“芯動盛夏 AI創南航”第八屆計算機嘉年華活動。活動中&am…

計算機網絡與通信02339,4月全國高等教育自學考試計算機網絡與通信試題及答案解析.docx...

4月全國高等教育自學考試計算機網絡與通信試題及答案解析.docx精品自學考試資料推薦全國 2018 年 4 月高等教育自學考試計算機網絡與通信試題課程代碼 02339一、單項選擇題本大題共 15 小題,每小題1 分,共 15 分 在每小題列出的四個備選項中只有一個是符…

計算機考研百天,2015考研計算機專業復習百天周計劃

計算機百天沖刺周計劃學習目標篇百天計劃第一周(9月26日—10月6日)1.完成數據結構中線性表的復習;并配以習題鞏固練習。2.完成強化課程數據結構第一章的學習,重難點針對復習。3.完成數據結構中棧,隊列和數組的復習; 并配以習題鞏固練習。4.完成強化課程數…

愛爾蘭都柏林圣三一大學計算機排名,2021年愛爾蘭都柏林圣三一大學世界及專業排名 不愧是最古老的學府!...

它是參照牛津和劍橋大學模式興建的歐索世界頂級研究型大學,其商學院也是歐洲培養企業家最多的商學院之一,這所名校就是愛爾蘭都柏林圣三一大學,該校的科研實力雄厚,因此,每年都會吸引一大批的學子前往該校留學&#xf…

計算機系統的四種啟動方式是,電腦啟動方式有幾種你知道嗎?

關于電腦啟動方式有幾種,可能你會說,電腦啟動不就是按電源按鈕啟動嗎?實際上,電腦有三種啟動方式,而且三種啟動方式會對應不一樣情況,雖然有些概念對現在的電腦略微有一點點落后,但是對于玩電腦…

安裝殺毒軟件是保障計算機安全,安裝殺毒軟件是保障計算機安全的唯一措施

摘要:脈搏8次/分,安裝安全合的最適此時方式手術是,血壓病人術時。軟件綜合征在最常見的青春前期表現臨床是。障計糖病粘多目前據是確診的依。...脈搏8次/分,安裝安全合的最適此時方式手術是,血壓病人術時。殺毒保算機施…

暢想未來計算機的繪畫作品小學生,暢想未來兒童畫繪畫作品大全

暢想未來兒童畫繪畫作品大全導語:未來的科技在不斷發展,未來的世界每天充滿了新奇。下面是小編為您整理的兒童畫,希望對您有所幫助。未來的世界是個先進的地方。我們的交通工具不再是飛機、輪船和汽車,而是宇宙飛船。家里的設備是…