gradle-packer-plugin 多渠道打包Windows系统文件名格式版本号自增多渠道打包版本号自增 Android 多渠道打包工具

程序名称:gradle-packer-plugin 多渠道打包Windows系统文件名格式版本号自增多渠道打包版本号自增

授权协议: Apache

操作系统: Android

开发语言: Java

gradle-packer-plugin 多渠道打包Windows系统文件名格式版本号自增多渠道打包版本号自增 介绍

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

  • 支持自动替换AndroidManifest文件中的meta-data字段实现多渠道打包

  • 支持自定义多渠道打包输出的存放目录和最终APK文件名

  • 支持自动修改versionName中的build版本号,实现版本号自动增长

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

使用方法

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies{
        classpath 'com.mcxiaoke.gradle:packer:1.0.+'
    }
}
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.1 1.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

gradle-packer-plugin 多渠道打包Windows系统文件名格式版本号自增多渠道打包版本号自增 官网

https://github.com/mcxiaoke/gradle-packer-plugin

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


BBGestureBack Full screen return gesture(全屏手势返回 滑动返回 pop 动画效果) iOS 侧滑返回
Framework7 或者叫 F7 是全功能的绑定 iOS 7 应用的 HTML 框架。Framework7 是免费开源的 HTML
iOS 调试库,支持 iOS8+,无需添加任何代码,方便 iOS 开发和测试。 屏幕截图 使用教程
DarkModeKit是在Apple官方的深色模式发布之前设计和开发的。 它提供了一种机制来支持iOS 11+(包括iOS 13)上的应用程序的暗模式。
SimpleNote iOS 版客户端。SimpleNote 是一款在多平台上发布的笔记应用。 开发准备条件:
Kivy iOS,此工具旨在为 iOS 编译必要的库以运行应用程序并管理 Xcode 项目的创建。
TYDownloadManager是一个iOS的文件下载管理器包,可以提示下载过程中的最新进展和状态的变化。
mruby是一款轻量级的Ruby实现,遵循ISO标准。它可以以解释的形式或者在VM上编译和执行形式运行。
因为涉嫌危害消费者的隐私问题,苹果公司决定停止使用原有的UDID系统,移动应用软件开发者们正在竞相寻找新的替代方案。移动应用销售平台Appsfire目前推出了OpenUDID,它是一个开源版本的UDID。Appsfire声称他们已
EasyIOS 开源至今已经1周年,全新Swift版本今日发布,支持利用HTML来开发IOS应用,支持模拟器实时预览,基于MVVM思想,HTML数据绑定,反射所有
在 iOS 领域使用 Pod 来进行组件化开发时常常需要手动进行一系列的操作,来实现Pod 组件的更新目的。特别是一些业务关联性比较强的 Pod
PokerCard,一款 iOS 多样式弹窗开源库。 Basic Usage import PokerCard class ViewController: UIViewController {
MiaowShow MiaowShow是高仿《喵播APP》的iOS视频直播项目。 项目具体讲解地址 iOS视频直播初窥:高仿<喵播APP>
ZJAttributedText 是高性能轻量级富文本框架 前言 如果遇到上面一个需求, 你会怎么处理, 若干个 UILabel + UIImageView? NSAttributedString拼接? CoreText?
DynamicCocoa,是滴滴 App 架构组自研的 iOS 动态化方案,可以让现有的 Objective-C 代码转换生成中间代码(JS),下发后动态执行。滴滴客户端 App 架构团队表示正在积极准备相关事项,计划于 2017 年初开源。
ObjectiveSupport aims to bring some of the popular Rubyisms found in ActiveSupport to Objective-C. This project originated as a component of
StyleKit 是能让你使用一个简单的 JSON 文件美化你的应用的微框架。 它如何工作?
XCActionBar 是一个用于 Xcoded 的通用生产工具。
Social Go是一个基于iOS平台,在人群中获取小精灵的雷达和匿名聊天App。它使用Swift
Swift版本最新发布 : https://github.com/EasyIOS/EasyIOS- Swift 全新基于MVVM(Model-View-ViewModel)编程模式架构,开启EasyIOS开发函数式编程新篇章。