最强打包插件,支持fir,蒲公英上传, 360加固 ,自动生成二维码

序言

由于公司的项目具有多个环境。每次打包都要手动选择编译类型,打包还得上传fir,和蒲公英。最后截二维码给测试。为了偷懒写了一个gradle 脚本。实现以下功能

  1. 自定义打包类型,可以指定buildType和flavor
  2. 支持定义多种,多个服务器,fir和蒲公英都支持,每种服务都可以配置多个。
  3. 支持自动打包上传,上传使用curl具有上传进度
  4. 支持360加固。只需要简单配置即可实现360自动加固
  5. 支持自动获取git日志作为更新日志
  6. 支持配置邮箱,实现打包完成自动提醒。

说明

目前支持的Android gradle插件版本有 3.4.1 ,4.0.1 ,4.1.0

在项目根目录的build.gradle文件中可以查看插件版本。4.1.0以上是否支持还没测试,可自行测试。

     buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        //gradle Android插件版本
        classpath "com.android.tools.build:gradle:4.1.0"
    }
}

效果

口说无凭直接看效果。

功能 截图
自定义打包类型,可以指定buildType和flavor
在这里插入图片描述
通过简单配置,自动生成相关任务双击即可执行。
在这里插入图片描述
发布到相关服务器显示进度信息
在这里插入图片描述
上传成功自动生成二维码弹出提示框
在这里插入图片描述
支持360加固
在这里插入图片描述
配置邮箱,发布成功自动提醒
在这里插入图片描述

使用

下载demo

相关的脚本和使用的demo已经上传至github。需要先下载demo。

Publish-GitHub地址

在这里插入图片描述

导入文件

将其中的publish文件夹引入到你的app module中


在这里插入图片描述

文件内容说明

在这里插入图片描述
文件 功能
icon/app_logo.png 存放应用的图标,使用的时候,直接覆盖即可。建议尺寸150px*150px 太大的话还得压缩没必要。也可以不使用这个图片,自行配置logo路径既可
lib/AppPublish-1.0-SNAPSHOT.jar 提供了弹窗功能,二维码生成功能,发送邮件功能
log 主要是存放curl访问接口时产生的临时文件,访问结束后会自动删除。这个文件夹不要动它
publish.gradle 所有功能的脚本,生成打包,发布,加固任务

配置gradle

配置gradle.properties

为了能在多个项目共享配置,建议在gradle的安装目录,配置一个gradle.properties文件。也便于一个部门内统一使用这个打包插件。更多内容可以参考【Gradle深入浅出】——Gradle配置(一)

文件位置

在这里插入图片描述

内容

#-------------------------App发布助手需要的变量---start---------------------------

#注意配置的路径的时候需要使用转义符,:要加转义符,\也要。

#比如地址是E:\abc 需要写成 E\:\\abc

#360加固配置

#360jar包地址,不能包含中文
TRSJiaGuJirPath=E\:\\WORK\\JiaGu\\360jiagubao_windows_64\\jiagu\\jiagu.jar
#360用户名
TRSJiaGuUserName=xxx
#360密码
TRSJiaGuPassword=yyy
#打包输出路径,不能包含中文
TRSJiaGuOutPath=C\:\\Users\\Administrator\\Desktop\\360JiaGuOut\\

#Email配置

#Email的Smtp服务器地址
TRSPublishEmailServer=smtp.qq.com
#Email地址
TRSPublishEmailAddress=123123123@qq.com
#Email的密码,或者token
TRSPublishEmailPassword=abcdabcd
#Email功能是否启用,true或fasle
TRSPublishEmailEnable=true

#公司的FIR

#api_token

TRSFirApiToken=abc123456789

#公司的蒲公英配置

#ukey
TRSPgyUKey=abc123456789
#api_key
TRSPgyApiKey=abc123456789
#安装的时候使用密码 true 或false
TRSPgyUsePasswordOnInstall=false
#安装密码
TRSPgyInstallPassword=123456
#-------------------------App发布助手需要的变量---end---------------------------

补充: 这个properties文件最后解析成一个Map<String,String> 所以如果是路径包含了斜杠等符号,需要使用转义。注释中有说明。

定义在该文件中的变量可以在build.gradle中直接使用。但是如果要让其转换成其他值,比如String转Boolean需要这样写。

 email {
        smtpServer TRSPublishEmailServer
        emailAddress TRSPublishEmailAddress
        emailPassWord TRSPublishEmailPassword
        //string转bool
        enable TRSPublishEmailEnable.toBoolean()
    }

因为360加固包不支持中文,所以生成的apk的名字和存放的路径都不能含有中文

项目中配置

这是demo中的完整build.gradle文件。方便大家查看 。相关的说明我都写在注释里了。

plugins {
    id 'com.android.application'
}
//引用打包插件
apply from: "publish/publish.gradle"

//配置打包插件
ApkPublish {
    //配置加固信息    
    jiaGu{
        jarPath TRSJiaGuJirPath
        userName TRSJiaGuUserName
        password  TRSJiaGuPassword
        //outPutPath路径中不能包含中文
        outPutPath TRSJiaGuOutPath
    }
    //配置应用信息,在弹窗和而成二维码的时候需要使用
    apkInfo {
        appName "昨日头条"
        appLogo file("/publish/icon/app_logo.png")
    }

    //配置Email,如果不需使用,可以将enable设置为false
    email {
        smtpServer TRSPublishEmailServer
        emailAddress TRSPublishEmailAddress
        emailPassWord TRSPublishEmailPassword
        enable TRSPublishEmailEnable.toBoolean()
    }
    
    //fir服务器,下面可以配置多个
    fir {
        //一个fir服务器,"公司fir"是他的名字,只有一个属性apiToken
        //可以配置多个,只有名字唯一就行。该名字只需要配置为apk中的serverName属性
        //即可实现自动选择该服务器作为上传服务器
        公司fir {
            apiToken TRSFirApiToken
        }
    }
    //蒲公英服务器,下面可以配置多个
    pgy{
        //一个蒲公英服务器,"公司pgy"是他的名字,需要两个属性
        //uKey和apiKey
        //usePasswordOnInstall 表示安装的时候是否需要密码 值是bool
        //password  安装需要的密码,值是String
        //可以配置多个,只有名字唯一就行。该名字只需要配置为apk中的serverName属性
        //即可实现自动选择该服务器作为上传服务器
        公司pgy{
            uKey TRSPgyUKey
            apiKey TRSPgyApiKey
            usePasswordOnInstall TRSPgyUsePasswordOnInstall.toBoolean()
            password TRSPgyInstallPassword
        }
    }
    //配置需要生成的apk文件
    apk {
        //配置一个apk文件
        //“正式版”是它的名字,根据这个名字会生成3个任务
        //打包正式版,发布正式版,加固正式版
        //buildType 值是String类型,必须是Android配置下的的buildType中的某给值
        //flavor  值是flavor ,必须是Android配置下的productFlavors中的某个值,没有的话可以自己建一个
        //serverName 上传的服务器名称,必须是fir配置下,或pgy配置下 某项的名字
        //useGitLog 是否使用git日志作为更新日志。true的话会提取最近的五条日志作为更新日志
        //否则更新日志会显示upload by 打包助手
        正式版 {
            buildType "release"
            flavor "official"
            serverName "公司fir"
            useGitLog true
        }

        测试版 {
            buildType "release"
            flavor "BJTest"
            serverName "公司pgy"
            useGitLog true
        }

    }

}

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "com.zgh.apkpublish"
        minSdkVersion 16
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    //需要配置签名,这样才可以实现全过程的自动化
    signingConfigs {
        release {
            storeFile file('../key/apk_publish.jks')
            storePassword 'admin123'
            keyPassword 'admin123'
            keyAlias = 'publish'
        }
    }

    buildTypes{
        release{
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
                //设置需要使用的签名配置
            signingConfig signingConfigs.release
        }
        debug{
            //设置需要使用的签名配置
            signingConfig signingConfigs.release
        }
    }
    
    //不同的产品风味
    productFlavors {
        flavorDimensions "api"
        official {
            buildConfigField "String", "BASE_URL", "\"正式环境\""
        }
        BJTest{
            buildConfigField "String", "BASE_URL", "\"测试环境\""
        }
    }
}


dependencies {

    implementation 'androidx.appcompat:appcompat:1.3.0'
    implementation 'com.google.android.material:material:1.3.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

补充说明

1.360加固配置

360加固下载地址
安装成功以后它的安装地址是

在这里插入图片描述

jar包就在这个位置
在这里插入图片描述

2.curl乱码

win10 自带了curl。但是上传的时候如果包含了中文会出现乱码。比较简单的解决办法就是修改系统的编码。

小编教你把win10系统默认编码为utf8

在这里插入图片描述

3.邮箱配置

建议使用QQ邮箱,手机上安装QQ邮箱可以实时收到提醒。
进入QQ邮箱->设置->账户

在这里插入图片描述

往下翻


在这里插入图片描述

4.Fir Token 获取

fir官网

在这里插入图片描述

5.蒲公英 uKey,api key获取

蒲公英首页
点击API信息

在这里插入图片描述

在这里插入图片描述

功能拓展

GUI扩展

我的GUI是自己编写的库也上传到github了,需要修改的可以自行fork。
GUI

gradle扩展

所有功能实现都在publish.gradle中。可以自行阅读,扩展功能。

也可以参考以下内容实现扩展

Android Gradle学习(五):Extension详解 这是一个系列,值得学习

【Gradle Task】FIR上传脚本(cURL方式、关联git提交次数、更新日志)

curl 的用法指南
Android Gradle 插件版本说明

下载Android gradle 插件

分享一个下载gradle插件源码的小技巧,只需要将你需要的gradle插件作为依赖配置在你的项目中
在这里插入图片描述

然后gradle就会下载代码,可以通过反编译查看一些Android gradle不同版本间实现的差异。这样可以提高脚本的兼容性。


在这里插入图片描述
在这里插入图片描述
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容