Android Studio 多渠道打包、自动版本号及 gradlew 命令的基本使用

news/2024/5/20 3:06:00 标签: android, android studio, 渠道, gradle

博客: 安卓之家
微博: 追风917
CSDN: 蒋朋的家
简书: 追风917

android-studio-多渠道打包">Android Studio 多渠道打包


Android Studio 真可谓神器,详细请点这里:打造安卓开发航空母舰

这里介绍其多渠道打包:

1 建立多渠道

这里介绍一种简单的,直接as操作:

直接上图咯,在项目结构你添加flavor就好了

1

确定后,项目会自动同步,完成后,渠道就配置好了。

当然,也可以直接在gradle脚本里操作:

gradle hljs bash">android {
    productFlavors {
        dev {
            manifestPlaceholders = [channel: "dev"]
        }
        official {
            manifestPlaceholders = [channel: "official"]
        }
        xiaomi {
            manifestPlaceholders = [channel: "xiaomi"]
        }
        wandoujia {
            manifestPlaceholders = [channel: "wandoujia"]
        }
        "360" {
            manifestPlaceholders = [channel: "360"]
        }
    }
}

项目同步好后,会发现Build Variant会多了很多渠道

variant

2 打包

上面的各种variant,你需要选择一个,然后build和run的时候只会构建运行这一个variant,全部打包的话,这里采用命令行,我知道的as全部打包是需要签名的,大家有知道的不需要签名的方法麻烦告知。

gradle hljs ">gradlew build

这样就会把所有的包打好,每种渠道的debug和release版本都会打包。

2

上面几个包一共用了半分钟多点。这个包的文件名带时间版本号等信息是怎么来的呢,当然这得益于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 命令


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

<a class=gradlev" title="" />

  • ./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 =~ pattern

    if (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 发布自动版本号方案

分享是一种美德,更是一种生活方式!!

也许你会说我是一个梦想者,但我不是唯一的一个。

悦分享,越快乐^_^

欢迎交流,转载请注明出处,谢谢!


http://www.niftyadmin.cn/n/900291.html

相关文章

游戏原画 or 游戏建模?

游戏原画师 1、要有素描和色彩基础&#xff0c;逐步提升为概念设计师。原画部门当中有美术宣传组&#xff0c;要求尤其高&#xff0c;必须有画插画的基础和概念设计的功底。 2、作为原画师需要懂得运用 photoshop和paint软件与电子手绘板来创作&#xff0c;熟练掌握电脑CG绘画…

3D游戏模型师的日常工作内容

现在3D建模是非常热门的行业&#xff0c;很多同学想入行&#xff0c;但是多数人对于3D设计师的概念非常模糊&#xff0c;这里我介绍一下3D设计师大概有哪些职业&#xff1a; 1.3D游戏设计师 2.效果图设计师&#xff08;室内&#xff0c;建筑等等&#xff09; 3.工业设计师 4.3…

zbrush如何雕zbrush如何雕刻写实人脸刻写实人脸

海量的练习&#xff0c;先练习大型&#xff0c;体块之间的穿插和覆盖&#xff0c;结构准确了&#xff0c;再雕细节过渡&#xff0c;脂肪&#xff0c;皱皮&#xff0c;人体雕刻也是这样 然后找海量的参考图&#xff0c;解剖图&#xff0c;了解每块肌肉的表现形式&#xff0c;起始…

3D建模:极限精度挑战-仿真女神赵丽颖

最开始我收集了大量的赵丽颖照片&#xff0c;说实话这个明星一开始并没有太看她的电影电视。由于是友人推荐的所以就开始了这个工作。 这个明星有一个特点就是没有什么特点&#xff0c;如果是杨幂迪丽热巴&#xff0c;做起来会更好做一些&#xff0c;因为她的特点并不明显&…

3D建模师需要什么软件,电脑配置应该如何,以及学习路线安排

一、CPU 1、3dmax建模的时候&#xff0c;实时预览除了依靠显卡&#xff0c;也要依靠CPU单核的运算能力。CPU频率越低&#xff0c;遇到复杂的贴图&#xff0c;千万级的模型面&#xff0c;就会预览越卡顿&#xff0c;甚至死机。渲染的时候&#xff0c;光线跟踪也好&#xff0c;光…

3D建模大神都在用的学习技巧!

整个互联网的形态一直以来都是2D模式的&#xff0c;但是随着3D技术的不断进步&#xff0c;在未来的5年时间里&#xff0c;将会有越来越多的互联网应用以3D的方式呈现给用户&#xff0c;包括网络视讯、电子阅读、网络游戏、虚拟社区、电子商务、远程教育等等。甚至对于旅游业&am…

将DNS改成8 8 8 8有什么利与弊

如果DNS服务器设置不当&#xff0c;可能会导致网速慢、弹窗广告、网址打不开、打开不是自己想要的网站、劫持等一系列问题。国内用户“将DNS改成8.8.8.8”只会造成有弊无利的结果&#xff0c;原因就在于这个DNS服务器是企业提供的公用DNS服务器&#xff0c;它由谷歌公司于2009年…

揭秘你喜欢的3D电影、游戏角色的制作过程!

你有没有好奇过平常生活当中我们看到的3d电影或者是游戏角色是如何制作而成的呢&#xff1f; 完整的制作3d电影或者是游戏角色或者是环境的过程被业界称为“计算机图形流水线”。为了将一个3d角色从构思开始到最后创造出来&#xff0c;通常需要经历六个主要的阶段。 下面我们一…