博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Gradle 多渠道打包
阅读量:6993 次
发布时间:2019-06-27

本文共 3877 字,大约阅读时间需要 12 分钟。

Studio中基于 umeng 统计的多渠道打包。

1.配置友盟环境

在AndroidMainfest.xml的<application>标签中添加相关信息:APP_KEY和渠道号。这里渠道号只是一个占位符,在打包的阶段可以动态的替换占位符里的信息。

...

2.配置签名信息

appmodule中的build.gradle添加下列信息:别名、别名密码、签名文件地址和签名密码

signingConfigs {    release {        keyAlias 'xxx'        keyPassword 'xxx'        storeFile file('C:/Users/Administrator/Desktop/xxx.jks')        storePassword 'xxx'    }}

3.设置buildTypes的签名配置

因为要打release包,所以需要设置buildTypesrelease的签名配置,如下

buildTypes {    // 设置debug版本默认渠道设置    debug {        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng_channel"]    }    // 正式版本签名设置    release {        zipAlignEnabled true        minifyEnabled true        shrinkResources true        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        signingConfig signingConfigs.release // 加上这句话即可    }}

4.配置渠道信息

渠道号是自己定的,比如wandoujia(豌豆荚)等。不要使用数字开头的命名方式,也不要使用 unknow 这样的名字 。build.gradle(Module:app) 设置productFlavors。xml 中的渠道号占位符${UMENG_CHANNEL_VALUE},这里就是要动态的替换占位符的内容,配置信息如下:

android {    productFlavors {        kuan {            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "kuan"]        }        xiaomi {            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]        }        qh360 {            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qh360"]        }        baidu {            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]        }        wandoujia {            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]        }    }}

5.执行打包命令

gradlew cleangradlew assembleRelease

3.sycn project一下再打包即可,Build-->Generate signed APK,Flavors中多选,选择需要的渠道

5.完成,注意生成目录

6.隐藏签名信息

签名信息这种东西属于私密的信息,应该保护起来,最好不要明文写到 build.gradle 里,更不要上传到代码仓库中去。应该放在单独的文件中,在 build.gradle 里去引用这个文件读取签名信息。

清空 signingConfigs

// TODO

7.跟踪打包过程

建议在命令后面加上 --stacktrace 参数,这样万一命令执行失败,可以看到详细的出错信息

gradlew clean --stacktracegradlew assembleRelease --stacktrace

8.定制 apk 的文件名:app_版本名称_版本号_日期_渠道号.apk

def packageTime() {    return new Date().format("yyyyMMdd-HHmmss", TimeZone.getTimeZone("UTC"))}android {    applicationVariants.all { variant ->        variant.outputs.each { output ->            // 重命名产出的apk文件            def outputFile = output.outputFile            if (outputFile != null && outputFile.name.endsWith('.apk')) {                File outputDirectory = new File(outputFile.parent);                def fileName                if (variant.buildType.name == "release") {                    fileName = "app_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${packageTime()}_${variant.productFlavors[0].name}.apk"                } else {                    fileName = "app_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${packageTime()}_debug.apk"                }                output.outputFile = new File(outputDirectory, fileName)            }        }    }}

输出的目录:app/build/outputs/apk

9.删除冗余的unaligned apk文件

在 app/build/outputs/apk 文件夹中,可以看到一些文件名末尾带有 unaligned 文字的冗余文件,这些文件没有用,可以删掉,只需要在 build.gradle 中添加下列命令就好了

applicationVariants.all { variant ->    variant.outputs.each { output ->        // 重命名产出的apk文件        def outputFile = output.outputFile        if (outputFile != null && outputFile.name.endsWith('.apk')) {            File outputDirectory = new File(outputFile.parent);            def fileName            if (variant.buildType.name == "release") {                fileName = "app_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${packageTime()}_${variant.productFlavors[0].name}.apk"            } else {                fileName = "app_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${packageTime()}_debug.apk"            }            output.outputFile = new File(outputDirectory, fileName)        }        // 删除unaligned apk        if (output.zipAlign != null) {            output.zipAlign.doLast {                output.zipAlign.inputFile.delete()            }        }    }}

转载地址:http://gcdvl.baihongyu.com/

你可能感兴趣的文章
CentOS最小安装之后做的一些小事
查看>>
【jQuery】----jQuery 多个库之间的冲突 (二)
查看>>
SSL证书卸载与SSI高级应用
查看>>
【Go语言】2.3流程和函数
查看>>
Develop app whit HK2
查看>>
[Material Design] MaterialButton 效果进阶 动画自动移动进行对齐效果
查看>>
Redis5.0.4复制
查看>>
SurfaceView必知
查看>>
EventDOM:事件DOM
查看>>
Sonar 配置代码扫描规则 与 质量配置,设置各个语言默认的扫描规则
查看>>
mybatis生成UUID主键,且获取当前新增的UUID主键
查看>>
让OSChina的Windows Phone客户端支持后退键
查看>>
HTML -对象 object 元素
查看>>
hibernate常见问题总结
查看>>
JVM调优工具
查看>>
怎么判断 Python 对象是否包含某个属性?
查看>>
锁的种类
查看>>
高可用架构设计
查看>>
分布式系统与集群的区别
查看>>
iOS开发 常用插件、工具
查看>>