教你如何玩转 AndroidStudio 一键多渠道打包

标签: 多渠道打包 gradle 一键打包 android github
202人阅读 评论(0) 收藏 举报
分类:

如果你还在手动的对每个市场进行打包,先不说 Low 不 Low,自己也会觉得很痛苦对吧,甚至有的同学使用 Windows build 打包一次就得 3-5min;打 6 个市场包半个小时就过去了,最重要的是这个过程中还有可能出现错误,增加测试的难度与成本。

多渠道打包也有很多种方式;有远程的 jenkins + gradle +github 等方法;网上资料很多,由于这种方式需要的配置环境比较繁琐;适用于需要大量打包的企业,并且需要远程打包的需求;本文将介绍 Android Studio 本地一键打包与自动配置签名的方法;

废话说这个多,现在开始搞定多渠道打包;

一、在 AndroidManifest.xml 里设置动态渠道变量

<!-- 自动升级类型  self、_360、baidu -->
        <meta-data
            android:name="sdk_key_version_update_type"
            android:value="${CHANNEL_VALUE}" />

二、在 build.gradle 设置 productFlavors

这里假定我们需要打包的渠道为 360、google、百度 以及本公司

方法 1:直接在 app:gradle 下配置

android {  

    defaultConfig {
        ...
        flavorDimensions "versionCode"
    }
    productFlavors {
        google {
            manifestPlaceholders = [CHANNEL_VALUE: "google"]
        }
        qh360 {
            manifestPlaceholders = [CHANNEL_VALUE: "360"]
        }
        baidu {
            manifestPlaceholders = [CHANNEL_VALUE: "baidu"]
        }
        self {
            manifestPlaceholders = [CHANNEL_VALUE: "self"]
        }
    }  
}

或者批量修改

defaultConfig {
        ...
        flavorDimensions "versionCode"
    }

android {  
    productFlavors {
        kuan {}
        xiaomi {}
        qh360 {}
        baidu {}
        wandoujia {}
    }  

    productFlavors.all { 
        flavor -> flavor.manifestPlaceholders = [CHANNEL_VALUE: name] 
    }
}

上面这个配置的作用就是,为每个渠道包产生不同的 CHANNEL_VALUE 的值。这里需要注意的是你对应的标签与配置的 Name 获取逻辑一定要保持一致,否则会出现找不到的逻辑异常。

方法 2:通过快捷键 command + ; 打开配置界面。( Windows 对应的快捷键 Ctrl + Alt + Shift + S )并添加对应的配置渠道。如下图:

这里写图片描述

注意:这里仅修改 Name 即可,其他信息无特别需求不要修改

三、执行打包操作

打开 Build App 界面:

这里写图片描述

输入对应的信息点击 Next:

这里写图片描述

选中对应的渠道版本点击 Finish 即可在项目的 app: 目录 下看到对应的apk文件。

这里写图片描述

四、执行打包命令 ./gradlew assembleRelease

除了使用 AndroidStudio 图形打包操作以外,我们也可以使用命令行进行打包操作,具体步骤如下:

在 AndroidStudio 窗口左下角打开 Terminal 面板,输入 gradlew assembleRelease 命令即可。

五、配置签名文件

由于使用命令时打出的包是未签名的文件,这个和我们的一键打包还有些瑕疵。对此我们需要配置下签名文件。

首先在项目目录下的 gradle.properies 下配置签名文件的 keyPassWord 与 storePassWord 。

APK_SIGN_KEY_PASSWORD=******
APK_SIGN_STORE_PASSWORD=******

这样做得好处是没必要把对应的密码暴露出去

    //签名
    signingConfigs {
        release{
            keyAlias '1'
            keyPassword APK_SIGN_KEY_PASSWORD
            storeFile file('../snaillove.keystore')
            storePassword APK_SIGN_STORE_PASSWORD
        }
        debug{
            keyAlias '1'
            keyPassword APK_SIGN_KEY_PASSWORD
            storeFile file('../snaillove.keystore')
            storePassword APK_SIGN_STORE_PASSWORD
        }

    }

    buildTypes {
        release {
            //启用混淆代码的功能
            minifyEnabled false
            //指定混淆规则,需要压缩优化的混淆要把proguard-android.txt换成proguard-android.txt
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }

注意:一定要把 signingConfigs 文件配置到 buildTypes 前面 否则会编译时抛出异常 Could not find property ‘debugConfig’ on SigningConfig container.

配置自定义打包路径与名称

生成对应的 APK 后,如果还需要我们手动的去修改对应的名称或者路径,是否根标题的一键还有些距离?OK,接着来,这里我们输出 apk 名称为 com_biniusports_app_bnsports_v1.0.0_20171205_baidu.apk 的路径:

    android {
        // 自定义APK输出配置
        applicationVariants.all { variant ->
        variant.outputs.all { output ->
            def outputFile = output.outputFile
            if (outputFile != null && outputFile.name.endsWith('.apk')) {
                // 输出apk名称为com_biniusports_app_bnsports_v1.0.0_20171205_baidu.apk
                def fileName = "com_biniusports_app_bnsports_v${defaultConfig.versionName}_${getNowTime()}_${variant.productFlavors[0].name}.apk"
                outputFileName = fileName
                }
            }
        }
    }

//获取时间戳
def getNowTime() {
    def date = new Date()
    def now = date.format('yyyyMMdd')
    return now
}

注意:Android Studio 版本大于 3.0 时不要使用v ariant.outputs.each 进行查找内容并且不要使用 new File(outputFile.parent, fileName),否则会抛出异常 Android Gradle 3.0.0-alpha2 plugin, Cannot set the value of read-only property ‘outputFile’。

完成以上配置后,即可开心的点击运行按钮进行签名打包了;

这里写图片描述

如出现如图的路径与对应的 APK 名称,恭喜你,本地一键多渠道打包已收入囊中。

查看评论

apk signapk.jar 解析

发布过Android应用的朋友们应该都知道,Android APK的发布是需要签名的。签名机制在Android应用和框架中有着十分重要的作用。 例如,Android系统禁止更新安装签名不一致的APK...
  • fyh2003
  • fyh2003
  • 2011-11-17 16:52:28
  • 3367

Android--获取系统时间的几种方式

方式一:import java.text.SimpleDateFormat; SimpleDateFormat formatter = new SimpleDateFo...
  • chaoyu168
  • chaoyu168
  • 2016-02-24 11:52:35
  • 73770

手把手教你如何玩转Maven

一:什么是Maven 是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目的。 二:Maven的好处 1:依赖管理:就是对jar包的同意管理,可以节省空间 2:一键构建 3...
  • Cs_hnu_scw
  • Cs_hnu_scw
  • 2017-10-31 17:27:04
  • 283

[Android Studio 权威教程]多渠道打包和一键完成(全部产品)打包并签名

好久没有更新blog了,今天给大家带来的是AS 的2种方式实现多渠道打包,并且我们还要验证是否实现了多渠道打包的功能,最后在让大家爽一下实现一键打包所有的渠道包并且给apk签名 多渠道打包 方法1...
  • yy1300326388
  • yy1300326388
  • 2015-09-08 20:16:08
  • 17879

Others1_教你快速玩转chrome浏览器

我觉得浏览器算是我们平常上网接触最多的东西了,没有了它,还真不行,本人作为一个使用了多年的chrome深度用户,今天就来谈谈个人使用chrome浏览器的一些技巧和扩展介绍吧,如果有什么见笑的,希望大神...
  • wang_zhenwei
  • wang_zhenwei
  • 2017-03-31 11:05:15
  • 2097

玩转OpenWrt

玩转OpenWrt最近各种各样的盒子兴起,小米盒子,荣耀盒子,迅雷盒子…blabla。笔者也在年会也拿了一个。当然这些盒子的出生并非偶然,Linux based Android居功至伟,让人想起嵌入式...
  • greatdwb
  • greatdwb
  • 2015-02-12 21:35:01
  • 461

AndroidStudio多渠道打包,生成不同app

1. 多渠道的概念 APP发布到不同的应用平台,监测用户是从哪个平台安装的。 2. 为什么要多渠道打包 统计用户安装APP来源 批量修改生成的apk文件名 可更改包名 生成不同应用名称或图标 有...
  • stimgo
  • stimgo
  • 2017-08-22 14:50:34
  • 2148

视频专辑:oeasy教你玩转office系列之Excel

1  1. Excel教程 初步了解 2013-10-30 23:48 | 播放(10) | 评论(0) | 时长:10:57 2  2. Excel教程 新建 2013-10-30 2...
  • likun557
  • likun557
  • 2013-11-20 10:38:31
  • 791

Excel高效操作汇总

上学的时候,相信很多小伙伴都是临时抱佛脚,计算机考试前几天突击一下,过了就算了,毕竟Excel对于还是学生的我们比较遥远。但是进入职场才发现,处处都要用到Excel,使用不熟练的话一个表格就要做半天,...
  • u010159842
  • u010159842
  • 2016-11-10 14:57:06
  • 346

AndroidStudio 多渠道打包改包名,名称,图标

今天运营同事给我发了15个应用平台对应的apk名。我第一反应就是给你个apk自己改名不就完了…于是心中一万个草泥马奔腾而过。 转念一想,这事儿可能不是那么简单,只怪我图样图森破。于是想到了之前看到过多...
  • Summer_Fighter
  • Summer_Fighter
  • 2017-06-19 18:59:23
  • 2211
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 26万+
    积分: 2691
    排名: 1万+
    博客专栏
    文章分类
    最新评论