簡(jiǎn)介
apk自動(dòng)打包上傳困擾了我很久竿裂,很想有一個(gè)腳本或程序能夠一鍵自動(dòng)打包上傳腻异,這樣可以節(jié)省很多時(shí)間产喉,還不容易出打包的錯(cuò)誤敢会,拿這點(diǎn)時(shí)間,去抽跟煙塞俱,扯扯蛋吏垮,該多好。唯蝶。粘我。
項(xiàng)目已經(jīng)上傳到githup了,想要自己定制化需求征字,可以通過(guò)修改源碼實(shí)現(xiàn)匙姜,項(xiàng)目為Java項(xiàng)目,需要配置java和aapt環(huán)境變量框杜,且項(xiàng)目為window環(huán)境系統(tǒng)下的腳本操作
思路
以下為上傳到fir服務(wù)器為例:
- 配置gradle的apk輸出路徑
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
applicationVariants.all { variant ->
variant.outputs.each { output ->
//開(kāi)始輸出,自定義輸出路徑
output.outputFile =
new File("f:/app/apkauto"+".apk")
}
}
}
}
- 通過(guò)Java運(yùn)行cmd命令到項(xiàng)目目錄郭计,運(yùn)行g(shù)rald命令,gradlew assembleRelease命令為正式環(huán)境打包昭伸,你可以手動(dòng)配置打包環(huán)境命令
public static String genAPK(String projectPath) throws IOException {
String params1=projectPath.substring(0,1);
String params2=projectPath;
String cmd=params1+": "+"&cd "+params2+" &gradlew assembleRelease";
return Cmd.exec(cmd);
}
- 通過(guò) aapt解析apk的信息,解析命令為<code>aapt dump badging apk路徑</code>
public static APPInfo parasAPk(String apkPath) throws IOException {
String reulst=Cmd.exec(PARASE_APK+apkPath);
return APPInfo.getAPPInfo(reulst);
}
- 配置上傳文件信息
#apk生成后絕對(duì)地址选调,這個(gè)路徑需要在gralde里面設(shè)置
apkPath=f:/app/apkauto.apk
#app項(xiàng)目的本地路徑
appProjectPath=E:/work/APkAuto/
#更新日志
updateLog=更新日志
- 上傳到服務(wù)器(目前以上傳到fir為例灵份,具體請(qǐng)參考fir上傳接口)
a.獲取apk上傳信息->b.上傳icon->c.上傳apk
流程
apk自動(dòng)打包流程
啟動(dòng)程序(App.java)
public static void main(String[] args) {
String apkPath = PropertiesUtils.getValue("apkPath");
String projectPath=PropertiesUtils.getValue("appProjectPath");
String updateLog=PropertiesUtils.getValue("updateLog");
try {
//1. 生成apk
APkUtils.genAPK(projectPath);
//2. 解析apk,獲取apk的信息
APPInfo info2 =APkUtils.parasAPk(apkPath);
System.out.println(info2.toString());
//3. 上傳apk
UpdateI updateI=new FirUpdate();
try {
updateI.updateAPk(info2,apkPath,updateLog);
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("上傳失敗");
}
}