Gradle 多渠道打包

简介: Studio中基于 umeng 统计的多渠道打包。1.配置友盟环境在AndroidMainfest.xml的标签中添加相关信息:APP_KEY和渠道号。

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

1.配置友盟环境

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

<application
    ... >
    <meta-data
        android:name="UMENG_APPKEY"
        android:value="@string/UMENG_APPKEY"/>
    <meta-data
        android:name="UMENG_CHANNEL" 
        android:value="${UMENG_CHANNEL_VALUE}" 
        />
    ...
</application>

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 clean
gradlew assembleRelease

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

5.完成,注意生成目录

6.隐藏签名信息

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

清空 signingConfigs
// TODO

7.跟踪打包过程

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

gradlew clean --stacktrace
gradlew 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()
            }
        }
    }
}
目录
相关文章
|
Web App开发 Java 开发工具
友盟在AS中利用Gradle进行多渠道打包和APK签名发布( 五 )
这篇是直接给大家上代码,希望让大家了解到友盟
220 0
|
Web App开发 Java 开发工具
|
Java
友盟在AS中利用Gradle进行多渠道打包和APK签名发布( 三 )
接上两篇的知识,这篇也是分享一下配置信息
270 0
|
Web App开发 Android开发 数据安全/隐私保护
友盟在AS中利用Gradle进行多渠道打包和APK签名发布( 二 )
自从Google放弃对Eclipse的维护,并力推Android studio时,其版本的更新迭代速度也是非常快的,而且开发的工程中经常需要用到gradle的相关操作
71 0
|
XML Java 开发工具
友盟在AS中利用Gradle进行多渠道打包和APK签名发布( 一 )
自从Google放弃对Eclipse的维护,并力推Android studio时,其版本的更新迭代速度也是非常快的,而且开发的工程中经常需要用到gradle的相关操作
78 0
|
Java Android开发
Android Gradle 多渠道打包
Android Gradle 多渠道打包
574 2
Android Gradle 多渠道打包
|
Android开发
Gradle实现的两种简单的多渠道打包方法
Gradle实现的两种简单的多渠道打包方法
|
Java Android开发
Android 使用 Gradle 多渠道打包
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/catoop/article/details/50435431 安卓开发完成,对于一个开放应用而言,我们需要发布到不同的应用市场,同时我们也需要统计不同市场的用户下载量。
1059 0
|
Java 开发工具 Android开发
Gradle 多渠道打包的使用和错误分析(转)
刚接触到android的开发,对什么都陌生的,本文是自己在项目中使用的技术要点总结,大咖遇到可直接飘过。。。。。 1.Gradle 打包(不废话了直接来脚本),将下列脚本放到build.gradle文件android{}内; 1 defaultConfig{ 2 ...
1139 0