关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » 安卓开发 »Android多渠道打包工具Gradle插件使用详解

    Android多渠道打包工具Gradle插件使用详解

    2015-08-05 00:00:00 出处:APP开发者
    分享

    项目介绍

    gradle-packer-plugin 是Android多渠道打包工具Gradle插件,可方便的于自动化构建系统集成,通过很少的配置可实现如下功能 :

    支持自动替换AndroidManifest文件中的meta-data字段实现多渠道打包 支持自定义多渠道打包输出的存放目录和最终APK文件名 支持自动修改versionName中的build版本号,实现版本号自动增长

    gradle-packer-plugin 库路径:com.mcxiaoke.gradle:packer:1.0.+简短名:packer,可以在项目的build.gradle中指定使用

    使用方法

    修改项目根目录的build.gradle:

    buildscript {
        repositories {
            mavenCentral()
        }
    
        dependencies{
            classpath 'com.mcxiaoke.gradle:packer:1.0.+'
        }
    }

    修改Android项目的build.gradle:

    apply plugin: 'packer'

    多渠道打包

    需要在命令行指定 -Pmarket=yourMarketFileName属性,market是你的渠道名列表文件名,market文件是基于项目根目录的相对路径,假设你的项目位于~/github/myapp你的market文件位于~/github/myapp/config/markets.txt那么参数应该是-Pmarket=config/markets.txt,一般建议直接放在项目根目录,假如market文件参数错误或者文件不存在会抛出异常

    渠道名列表文件是纯文本文件,每行一个渠道号,列表解析的时候会自动忽略空白行,但是格式不规范会报错,渠道名和注释之间用#号分割开,行示例:

    Google_Play#play store market
     Gradle_Test#test
     SomeMarket#some market

    渠道打包的命令行参数格式示例(在项目根目录执行):

    ./gradlew -Pmarket=markets.txt clean archiveApkRelease

    Windows系统

    假如你是在windows系统下使用,需要下载 Gradle,设置 GRADLE_HOME 环境变量,并且将Gradle的 bin 目录添加到环境变量PATH,然后将命令行中的./gradlew替换为gradle.bat 假如同时还需要使用gradlew,你需要给你的项目配置使用gradle wrapper,在设置好了gradle之后,在你的项目根目录命令行输入gradle.bat wrapper然后就可以使用gradlew.bat了 Windows系统下的命令行参考: 使用gradle:gradle.bat clean assembleRelease 使用gradle wrapper:gradlew.bat clean assembleRelease

    文件名格式

    可以使用archiveNameFormat自定义渠道打包输出的APK文件名格式,默认格式是

    ${appPkg}-${flavorName}-${buildType}-v${versionName}-${versionCode}

    举例:假如你的App包名是com.your.company,渠道名是Google_Play,buildType是release,versionName是2.1.15,versionCode是200115,那么生成的APK的文件名是

    com.your.company-Google_Player-release-2.1.15-20015.apk

    版本号自增

    版本号自动会自动在在vesionName尾部增加.buildNumer该字段会自动增长,举例:假如App本来的版本号是 1.2.3,那么使用版本号自动后会是1.2.3.11.2.3.2…1.2.3.25末尾的build版本号会随构建次数自动增长。注意:假如在命令行使用-PbuildNum=123这种形式指定了build版本号,那么自增版本号不会生肖

    配置选项

    archiveOutput 指定渠道打包输出的APK存放目录,默认位于${项目根目录}/build/archives archiveNameFormat-Groovy格式字符串, 指定渠道打包输出的APK文件名格式,默认文件名格式是:${appPkg}-${flavorName}-${buildType}-v${versionName}-${versionCode},可使用以下变量: projectName – 项目名字 appName – App模块名字 appPkg -applicationId(App包名packageName) buildType -buildType(release/debug/beta等) flavorName -flavorName(对应渠道打包中的渠道名字) versionName -versionName(显示用的版本号) versionCode -versionCode(内部版本号) buildTime -buildTime(编译构建日期时间) manifestMatcher 指定渠道打包需要修改的AndroidManifest.xml的meta-data的项名称,列表类型,举例:['UMENG_CHANNEL', 'Promotion_Market'],注意:需要同时在命令行使用-Pmarket=yourMarketFileName指定market属性多渠道打包才会生效,假如没有配置就使用多渠道打包,将会抛出异常 buildNumberAuto – 布尔值,是否使用自增版本号功能 设为true为使用插件提供的自增build版本号功能,该功能会在项目目录生成一个packer.properties文件,建议加入到.gitignore中,注意:该功能不会应用于多渠道打包生成的APK,不会影响渠道打包 buildNumberTypeMatcher – 指定需要使用自增版本号的buildType,列表类型,举例:['release', 'beta']默认是全部

    使用示例:

    多渠道打包

    修改项目根目录的build.gradle在buildscript.dependencies部分加入classpath ‘com.mcxiaoke.gradle:packer:1.0.0′ 修改Android项目的build.gradle在apply plugin: ‘com.android.application’下面加入apply plugin: ‘packer’ 修改Android项目的build.gradle加入如下配置项,manifestMatcher是必须指定的,其它几项可以使用默认值:
    packer {
        // 指定渠道打包输出目录
        // archiveOutput = file(new File(project.rootProject.buildDir.path, "archives"))
        // 指定渠道打包输出文件名格式
        // archiveNameFormat = ''
        // 指定渠道打包需要修改的AndroidManifest文件项
        manifestMatcher = ['UMENG_CHANNEL','Promotion_Market']
    
    }
    假设渠道列表文件位于项目根目录,文件名为markets.txt,在项目根目录打开shell运行命令:
    ./gradlew -Pmarket=markets.txt clean archiveApkRelease
    // Windows系统下替换为:
    gradle.bat -Pmarket=markets.txt clean archiveApkRelease
    // 或
    gradlew.bat -Pmarket=markets.txt clean archiveApkRelease

    假如没有错误,打包完成后你可以在${项目根目录}/build/archives/目录找到最终的渠道包。说明:渠道打包的Gradle Task名字是archiveApk${buildType}buildType一般是release,也可以是你自己指定的beta或者someOtherType,使用时首字母需要大写,例如release的渠道包任务名是archiveApkRelease,beta的渠道包任务名是archiveApkBeta,其它的以此类推

    版本号自增

    修改项目根目录的build.gradle在buildscript.dependencies部分加入classpath ‘com.mcxiaoke.gradle:packer:1.0.0′ 修改Android项目的build.gradle在apply plugin: ‘com.android.application’下面加入apply plugin: ‘packer’ 修改Android项目的build.gradle加入如下配置项,buildNumberAuto是开关
    packer {
        // 指定是否使用build版本号自增
        buildNumberAuto = true
        // 指定使用版本号自增的buildType,默认是全部
        buildNumberTypeMatcher = ['release', 'beta']
    
    }
    在项目根目录打开shell运行命令:./gradlew clean assembleRelease假如没有错误,你可以安装apk查看versionName自增是否生效, 也可以运行./gradlew -PbuildNum=123 clean assembleRelease从命令行指定build版本号,该方法多用于自动化构建系统

    完整示例:

    项目的samples目录包含一个完整的项目示例,可以查看其中的build.gradle

    buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:1.0.0'
            // `添加packer插件依赖`
            classpath 'com.mcxiaoke.gradle:packer:1.0.0'
        }
    }
    
    repositories {
        mavenCentral()
    }
    
    apply plugin: 'com.android.application'
    // 建议放在 `com.android.application` 下面  
    // `使用 apply plugin使用packer插件`  
    apply plugin: 'packer'
    
    packer {
        // 指定渠道打包输出目录
        archiveOutput = file(new File(project.rootProject.buildDir.path, "apks"))
        // 指定渠道打包输出文件名格式
        archiveNameFormat = ''
        // 指定渠道打包需要修改的AndroidManifest文件项
        manifestMatcher = ['UMENG_CHANNEL','Promotion_Market']
        // 指定是否使用build版本号自增
        buildNumberAuto = true
        // 指定使用版本号自增的buildType,默认是全部
        buildNumberTypeMatcher = ['release', 'beta']
    
    }
    
    android {
        compileSdkVersion 21
        buildToolsVersion "21.1.1"
    
        defaultConfig {
            applicationId "com.mcxiaoke.packer.sample"
            minSdkVersion 15
            targetSdkVersion 21
            versionCode 12345
            versionName "1.2.3"
        }
    
        signingConfigs {
            release {
                storeFile file("android.keystore")
                storePassword "android"
                keyAlias "android"
                keyPassword "android"
            }
        }
    
        buildTypes {
            release {
                signingConfig signingConfigs.release
                minifyEnabled false
            }
    
            beta {
                signingConfig signingConfigs.release
                minifyEnabled false
                debuggable true
            }
    
        }
    
    }
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:support-v4:21.0.2'
    }

    参与开发

    plugin目录是插件的源代码,用Groovy语言编写,项目sample目录是一个完整的Andoid项目示例,在项目根目录有几个脚本可以用于测试:

    deploy-local.sh 部署插件到本地的/tmp/repo/目录,方便即时测试 test-build.sh 部署并测试插件是否有错误,测试build版本号自增功能 test-market.sh 部署并测试插件是否有错误,测试多渠道打包功能

    感谢

    本项目参考了公司内部Android项目使用的多渠道打包工具,最初作者是 googolmo,文件名模板自定义部分的代码修改自此项目 android-appversion-gradle-plugin

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    帝国CMS7.5编辑器上传图片取消宽高的三种方法

    帝国cms如何自动生成缩略图的实现方法

    Windows 12即将到来,将彻底改变人机交互

    帝国CMS 7.5忘记登陆账号密码怎么办?可以phpmyadmin中重置管理员密码

    帝国CMS 7.5 后台编辑器换行,修改回车键br换行为p标签

    Windows 11 版本与 Windows 10比较,新功能一览

    Windows 11激活产品密钥收集及专业版激活方法

    IT头条

    无线路由大厂 TP-Link突然大裁员:补偿N+3

    02:39

    Meta 千万美金招募AI高级人才

    00:22

    更容易爆炸?罗马仕充电宝被北京多所高校禁用,公司紧急回应

    17:19

    天衍”量子计算云平台,“超算+量算” 告别“算力孤岛时代”

    18:18

    华为Pura80系列新机预热,余承东力赞其复杂光线下的视频拍摄实力

    01:28

    技术热点

    MySQL基本调度策略浅析

    MySQL使用INSERT插入多条记录

    SQL Server高可用的常见问题

    3D立体图片展示幻灯片JS特效

    windows 7上网看视频出现绿屏的原因及解决方法

    windows 7 64位系统的HOSTS文件在哪里?想用它加快域名解析

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。