Android Studio 多渠道打包、自动版本号及 gradlew 命令的基本使用
Android Studio 真可谓神器,详细请点这里:打造安卓开发航空母舰
这里介绍其多渠道打包:
1 建立多渠道
这里介绍一种简单的,直接as操作:
直接上图咯,在项目结构你添加flavor就好了
确定后,项目会自动同步,完成后,渠道就配置好了。
当然,也可以直接在gradle脚本里操作:
android {productFlavors {dev {manifestPlaceholders = [channel: "dev"]}official {manifestPlaceholders = [channel: "official"]}xiaomi {manifestPlaceholders = [channel: "xiaomi"]}wandoujia {manifestPlaceholders = [channel: "wandoujia"]}"360" {manifestPlaceholders = [channel: "360"]}}
}
项目同步好后,会发现Build Variant会多了很多渠道
2 打包
上面的各种variant,你需要选择一个,然后build和run的时候只会构建运行这一个variant,全部打包的话,这里采用命令行,我知道的as全部打包是需要签名的,大家有知道的不需要签名的方法麻烦告知。
gradlew build
这样就会把所有的包打好,每种渠道的debug和release版本都会打包。
上面几个包一共用了半分钟多点。这个包的文件名带时间版本号等信息是怎么来的呢,当然这得益于gradle强大的功能,后面会讲到的。
而as打包需要就是build --> Generated signed APK,这样你选择下就可以把所有渠道打包。
最近发现了个下一代Android打包工具,1000个渠道包只需要5秒钟
自动版本号
昨天 2016.03.02 刚发现的好东西,更优雅的 Android 发布自动版本号方案
这里简单总结下,配合 git 获取软件版本号和版本名
- 版本号 versionCode
使用 Git 中 commit 的数量来作为版本号——versionCode
def cmd = 'git rev-list HEAD --first-parent --count'
def gitVersion = cmd.execute().text.trim().toInteger()android { defaultConfig {versionCode gitVersion}
}
- 版本名 versionName
使用 git describe,获取从当期 commit 到距离它最近的 tag 的描述。默认都是 annoted tag,如果要指所有的类型的 tag 的话,就加 --tags 参数。
def cmd = 'git describe --tags'
def version = cmd.execute().text.trim()android { defaultConfig {versionName version}
}
最终的脚本详见后文。
gradlew 命令
gradlew 是什么东西呢,和gradle貌似不大一样,肯定有关系。没错,他就是 gradle wrapper,意思是gradle的一个包装,大家可以理解为在这个项目本地就封装了gradle,比如我的项目是HelloWord, 在HelloWord/gradle/wrapper/gralde-wrapper.properties文件中声明了它指向的目录和版本,比如我的内容是:
#Thu Dec 28 20:02:55 CST 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
如果你项目没有该文件的话,那么gradlew会到~/.gradle/wrapper/dists/gradle-2.10-all下寻找,或者你新建给文件,内容复制到里面。其实你会发现是同一个目录咯。里面会有个随机数的文件夹,里面就是gradle,只要下载成功即可用grdlew wrapper的命令代替全局的gradle命令。
常用命令如下:(linux下是./gradlew,该脚本在项目下,windows直接gradlew即可)
- ./gradlew -v 版本号,首次运行,没有gradle的要下载的哦。
./gradlew clean 删除HelloWord/app目录下的build文件夹
./gradlew build 检查依赖并编译打包
这里注意的是 ./gradlew build 命令把debug、release环境的包都打出来,生成的包在目录HelloWord/app/build/outputs/apk/下。如果正式发布只需要打release的包,该怎么办呢,下面介绍一个很有用的命令 assemble, 如
./gradlew assembleDebug 编译并打Debug包
./gradlew assemblexiaomiDebug 编译并打xiaomi的debug包,其他类似
./gradlew assembleRelease 编译并打Release的包
./gradlew assemblexiaomiRelease 编译并打xiaomi的Release包,其他类似
./gradlew installRelease Release模式打包并安装
./gradlew uninstallRelease 卸载Release模式包
补充
1 gradlew build 和 gradle build 有区别吗?
使用gradle wrapper是gradle官方推荐的build方式,而gradlew正是运行了wrapper task之后生成的(运行wrapper task是Android Studio自动做的)。使用gralde wrapper的一个好处就是每个项目可以依赖不同版本的gradle,构建的时候gradle wrapper会帮你自动下载所依赖的版本的gradle。而如果你使用gradle build的话,同时你又有多个项目使用不同版本的gradle,那就需要你手动在自己的机器上配置多个版本的gradle,稍微麻烦一些
2 自定义apk包名
gradle脚本大法好:
def releaseTime() {return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}def gitVersionCode() {def cmd = 'git rev-list HEAD --first-parent --count'cmd.execute().text.trim().toInteger()
}def gitVersionTag() {def cmd = 'git describe --tags'def version = cmd.execute().text.trim()def pattern = "-(\\d+)-g"def matcher = version =~ patternif (matcher) {version = version.substring(0, matcher.start()) + "." + matcher[0][1]} else {version = version + ".0"}return version
}//自定义apk安装包名
applicationVariants.all { variant ->variant.mergedFlavor.versionCode = gitVersionCode()variant.mergedFlavor.versionName = gitVersionTag()variant.outputs.each { output ->output.outputFile = new File(output.outputFile.parent + "/${variant.buildType.name}","HelloWord-${variant.buildType.name}-v${variant.versionName}-${variant.productFlavors[0].name}-${releaseTime()}.apk".toLowerCase())}
}
参考文章:
Android Studio系列教程五--Gradle命令详解与导入第三方包
Android打包的那些事
更优雅的 Android 发布自动版本号方案
Android Studio 多渠道打包、自动版本号及 gradlew 命令的基本使用相关推荐
- Android Studio多渠道打包和代码混淆教程
什么是Gradle Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的领域特定(DSL)语言.Androi ...
- Android Studio 多渠道打包之友盟打包
单一打包比较麻烦需要进行多次重复的打包,在此推荐可以更高效,更安全的多渠道打包方式--------友盟多渠道打包 下面是具体步骤介绍: 1.配置清单文件 代码如下: <meta-data ...
- android 自定义apk名,Android Studio多渠道打包、自定义打包APK名称
现在为了推广产品,会在多个渠道应用市场发布应用,为了统计不同渠道的数据,需要在应用中表明渠道,如果一个一个去修改打包效率会很低.AS为我们提供了简便的方法,可以多渠道打包,一次打包所有的渠道包. 1. ...
- Android Studio 多渠道打包
2019独角兽企业重金招聘Python工程师标准>>> build.gradle实例: apply plugin: 'com.android.application'android ...
- Android studio 多渠道打包(包括不同的包使用不同的资源文件、不同的包写不同的代码,包名等等)
1,创建一个项目 ** 2,在项目中创建几个文件夹,等级和main文件夹平级,我这里创建了2个文件夹作为测试用.分别为ou1,out2.(文件夹名字按自己需求创建,用于区分不同渠道就行) ** 3,两 ...
- Android studio 多渠道(多环境)打包grade配置详解
Android studio 多渠道(多环境)打包grade配置详解 场景:开发app,我们需要两套环境或者两套环境以上的apk,每套环境的apk分两个版本debug版和release版. 公司有套平 ...
- Android studio 多渠道版本打包方法 flavor dimension
Android studio 多渠道版本打包方法 flavor dimension 前言 开始 新建项目 修改build.gradle 创建差异化文件 创建图标 修改APP配色 修改APP名字 APP ...
- Android的多渠道打包
前言 本篇包括以下内容: 多渠道打包概述 友盟的多渠道打包 美团的多渠道打包 360的多渠道打包 多渠道打包概述 什么是多渠道包 渠道包就是要在安装包中添加渠道信息,也就是channel,对应不同的渠 ...
- win10 jenkins svn android studio 自动化打包教程 以及一些问题的解决办法
win10 jenkins svn android studio 自动化打包教程 这两天搭建jenkins自动构建环境,中间遇到点坑坑洼洼 分享出来希望后来人少走些弯路 准备软件 jenkins.ms ...
最新文章
- c语言运算符的语法,C语言中条件运算符的语法为
- Win32 基本文件读写操作
- 聊城大学计算机学院韩玉艳,人工蜂群优化及其在资源管理中的应用.doc
- uwsgi 的app变量名称必须为application
- IE与Mozila FireFox 中的 JS
- 为什么WEB-INF外的jsp无法根据cookie享受国际化
- VTK:曲线样条CurveSpline用法实战
- 将字符串和数字合并动态写入
- OpenCV辅助对象(help objects)(3)——Ptr
- 华为惨遭围剿;京东人工智能养猪;三星承认中国市场失败 | 极客头条
- Failed to create AppDomain 'xxx'. Exception has been Failed to create AppDomain
- mysql global_MySQL设置global变量和session变量的两种方法详解
- JS获取URL传过来的参数
- 高级商务办公软件应用【3】
- 如何实现图片的上传-(上传到本地)
- olcd12864的u8g2库_OLED屏显示功能-U8glib库函数大全。
- 魅族 刷机android 6.0,乐视X900+安卓6.0 魅族Flyme6刷机包 最新6.7.12.29R付费纯净版
- 苹果CMS安装详细教程
- 北京市新型冠状病毒疫情区域图
- k8s :pod has unbound immediate PersistentVolumeClaims
热门文章
- 深度学习没有GPU怎么办?
- python链式赋值与C++赋值的结果比较与分析
- 《机器学习》 周志华学习笔记第三章 线性模型(课后习题)python 实现
- linux中xjvf指令,linux解压缩命令小结
- python对csv文件中的数据进行分类_利用Python对csv文件中的数据进行排序
- JEPaas【按钮隐藏】根据单据状态值决定【添加明细】【删除】按钮的隐藏和显示
- MobIM仅为开发者提供即时通讯的消息通道服务
- amazeui学习笔记一(开始使用4)--Web App 相关
- android 两个客户端间的通信(Socket通信)
- 利用jsonp实现跨域登陆