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的要下载的哦。

gradlev
  • ./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模式包

补充


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 命令的基本使用相关推荐

  1. Android Studio多渠道打包和代码混淆教程

    什么是Gradle Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的领域特定(DSL)语言.Androi ...

  2. Android Studio 多渠道打包之友盟打包

    单一打包比较麻烦需要进行多次重复的打包,在此推荐可以更高效,更安全的多渠道打包方式--------友盟多渠道打包 下面是具体步骤介绍: 1.配置清单文件 代码如下: <meta-data     ...

  3. android 自定义apk名,Android Studio多渠道打包、自定义打包APK名称

    现在为了推广产品,会在多个渠道应用市场发布应用,为了统计不同渠道的数据,需要在应用中表明渠道,如果一个一个去修改打包效率会很低.AS为我们提供了简便的方法,可以多渠道打包,一次打包所有的渠道包. 1. ...

  4. Android Studio 多渠道打包

    2019独角兽企业重金招聘Python工程师标准>>> build.gradle实例: apply plugin: 'com.android.application'android ...

  5. Android studio 多渠道打包(包括不同的包使用不同的资源文件、不同的包写不同的代码,包名等等)

    1,创建一个项目 ** 2,在项目中创建几个文件夹,等级和main文件夹平级,我这里创建了2个文件夹作为测试用.分别为ou1,out2.(文件夹名字按自己需求创建,用于区分不同渠道就行) ** 3,两 ...

  6. Android studio 多渠道(多环境)打包grade配置详解

    Android studio 多渠道(多环境)打包grade配置详解 场景:开发app,我们需要两套环境或者两套环境以上的apk,每套环境的apk分两个版本debug版和release版. 公司有套平 ...

  7. Android studio 多渠道版本打包方法 flavor dimension

    Android studio 多渠道版本打包方法 flavor dimension 前言 开始 新建项目 修改build.gradle 创建差异化文件 创建图标 修改APP配色 修改APP名字 APP ...

  8. Android的多渠道打包

    前言 本篇包括以下内容: 多渠道打包概述 友盟的多渠道打包 美团的多渠道打包 360的多渠道打包 多渠道打包概述 什么是多渠道包 渠道包就是要在安装包中添加渠道信息,也就是channel,对应不同的渠 ...

  9. win10 jenkins svn android studio 自动化打包教程 以及一些问题的解决办法

    win10 jenkins svn android studio 自动化打包教程 这两天搭建jenkins自动构建环境,中间遇到点坑坑洼洼 分享出来希望后来人少走些弯路 准备软件 jenkins.ms ...

最新文章

  1. c语言运算符的语法,C语言中条件运算符的语法为
  2. Win32 基本文件读写操作
  3. 聊城大学计算机学院韩玉艳,人工蜂群优化及其在资源管理中的应用.doc
  4. uwsgi 的app变量名称必须为application
  5. IE与Mozila FireFox 中的 JS
  6. 为什么WEB-INF外的jsp无法根据cookie享受国际化
  7. VTK:曲线样条CurveSpline用法实战
  8. 将字符串和数字合并动态写入
  9. OpenCV辅助对象(help objects)(3)——Ptr
  10. 华为惨遭围剿;京东人工智能养猪;三星承认中国市场失败 | 极客头条
  11. Failed to create AppDomain 'xxx'. Exception has been Failed to create AppDomain
  12. mysql global_MySQL设置global变量和session变量的两种方法详解
  13. JS获取URL传过来的参数
  14. 高级商务办公软件应用【3】
  15. 如何实现图片的上传-(上传到本地)
  16. olcd12864的u8g2库_OLED屏显示功能-U8glib库函数大全。
  17. 魅族 刷机android 6.0,乐视X900+安卓6.0 魅族Flyme6刷机包 最新6.7.12.29R付费纯净版
  18. 苹果CMS安装详细教程
  19. 北京市新型冠状病毒疫情区域图
  20. k8s :pod has unbound immediate PersistentVolumeClaims

热门文章

  1. 深度学习没有GPU怎么办?
  2. python链式赋值与C++赋值的结果比较与分析
  3. 《机器学习》 周志华学习笔记第三章 线性模型(课后习题)python 实现
  4. linux中xjvf指令,linux解压缩命令小结
  5. python对csv文件中的数据进行分类_利用Python对csv文件中的数据进行排序
  6. JEPaas【按钮隐藏】根据单据状态值决定【添加明细】【删除】按钮的隐藏和显示
  7. MobIM仅为开发者提供即时通讯的消息通道服务
  8. amazeui学习笔记一(开始使用4)--Web App 相关
  9. android 两个客户端间的通信(Socket通信)
  10. 利用jsonp实现跨域登陆