美文网首页Android多渠道打包Android开发
Android多渠道打包——使用gradle进行多渠道自动打包

Android多渠道打包——使用gradle进行多渠道自动打包

作者: CoorChice | 来源:发表于2016-10-27 14:38 被阅读557次

    个人博客CoorChice,https://chenbingx.github.io/ ,最新文章将会首发CoorChice的博客,欢迎探索哦 !
    同时,搜索微信公众号CoorChice,或扫描文章末尾二维码,可以关注我的微信公众号。同期文章也将会优先推送到微信公众号中,以提醒您有新鲜文章出炉。

    前言

    在我的另一篇文章中介绍了如何使用Python进行多渠道打包,下面再把传统的gradle多渠道打包方式介绍一下,同样是以友盟SDK为例。

    打包前配置

    配置gradle

    //主要是配置android{}封包下的内容
    android {
                。
                。
                。
    signingConfigs { //配置签名文件,可以有多个
            icekey { 
                keyAlias 'icekey'
                keyPassword '填入key的密码'
                storeFile file('/Users/**********/icekey.jks')  //key所在文件夹
                storePassword '填入store的密码'
            }
        }
        
        buildTypes { //配置构建版本,可以有多个
            //测试版本
            debug {
                debuggable true
                zipAlignEnabled false
                shrinkResources false
                signingConfig signingConfigs.icekey
                minifyEnabled false
            }
    
            //发布版本
            release {
                debuggable false //是否开启测试
                zipAlignEnabled true //是否启用zipAlign压缩优化
                shrinkResources true //是否删除未被使用的资源文件
                minifyEnabled false  //是否开启混淆
                signingConfig signingConfigs.icekey //签名文件
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                //指定混淆文件
            }
    
            //空版本
            source {
                debuggable true //是否开启测试
                zipAlignEnabled true //是否启用zipAlign压缩优化
                shrinkResources true //是否删除未被使用的资源文件
                minifyEnabled false  //是否开启混淆
                signingConfig signingConfigs.icekey //签名文件
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                //指定混淆文件
            }
        }
        
        //创建渠道名称,main{}是一个不合法名称
        productFlavors {
            baidu {}
            huawei {}
            xiaomi {}
        }
        
        //    这里体现在AndroidManifest中的
    //    <meta-data
    //    android:name="UMENG_CHANNEL"
    //    android:value="${UMENG_CHANNEL_VALUE}"/>
        //运行自动赋值给AndroidManifest.xml中的${UMENG_CHANNEL_VALUE}
        productFlavors.all {
            flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
        }
    
        lintOptions { //配置打包线程的操作
            ignoreWarnings true //忽略警告
            checkReleaseBuilds false //是否检查release版本
            abortOnError false //出现错误是否终止
        }
        
            applicationVariants.all { variant ->
            variant.outputs.each { output ->
                def outputFile = output.outputFile
                if (outputFile != null && outputFile.name.endsWith(".apk")) {  //判断是否是apk
                    //这个函数生成了apk的名称
                    def apkName = "ice-${variant.productFlavors[0].name}-${defaultConfig.versionName}.apk"
                    output.outputFile = new File(outputFile.parent, apkName) //输出文件
                }
            }
        }
        
                。
                。
                。
    }
    

    配置AndroidManifest.xml

    在Application标签下添加:

     <!--友盟的key-->
        <meta-data
          android:name="UMENG_APPKEY"
          android:value="57bf375ee0f5*******018a3"/>
        <!--友盟渠道号-->
        <meta-data
          android:name="UMENG_CHANNEL"
          android:value="${UMENG_CHANNEL_VALUE}"/> //这样写就能够读取gradle中的[UMENG_CHANNEL_VALUE: name]的name的值了。
    

    开始自动打包

    在Android Studio的的终端机中输入

    ./gradlew assembleRelease  //打包所有渠道的Release版包
    ./gradlew assembleSource //打包所有渠道的Source版包
    
    CoorChice的公众号

    相关文章

      网友评论

        本文标题:Android多渠道打包——使用gradle进行多渠道自动打包

        本文链接:https://www.haomeiwen.com/subject/byxsuttx.html