Android 中多渠道打包的一些坑坑洼洼

        在Android开发完成时通常需要进行打包,由于有许多应用市场,比如360应用市场,小米应用市场,华为市场等等。那么一份代码打多个包,发布到不同应用市场是非常必要的。因此今天就来说说在Android 中关于多渠道打包的问题。

        首先,要做到一份代码打多个包,我们就要保证每个包的包名不一样,那包名指的是什么呢?你可能会把packageName与applicationId弄混了,简而言之packageName作为R资源,四大组件的路径; applicationId作为应用唯一标识。因此若要做到一份代码打不同的包就要在build.gradle中的多渠道中配置不同的applicationId。

        在build.gradle中的productFlavors中配置,如图所示:

配置不同的applicationId

由于在不同的应用市场还需要不同的渠道参数,因此可以利用manifestPlaceholders 来配置,如图所示,由于LZ开发的是定制版APP,因此配置的是渠道参数不是关于应用市场的。


Android 中多渠道打包的一些坑坑洼洼_第1张图片
配置渠道参数

传统打包通常会在Build Variants中选择不同的版本进行打包如图,然后点Build APK,这样打包的时间会比较久,效率较低。如果是打一个包还好,往往实际情况是一次性打多个包。而且有的公司对包名有着严格的要求,那么要如何完成这两个需求呢。


Android 中多渠道打包的一些坑坑洼洼_第2张图片
Build Variants

首先在gradle中写获取时间的字段:


获取时间的字段

然后写打包的字段:

applicationVariants.all { variant -> //批量修改Apk名字

        variant.outputs.all { output ->

            if (!variant.buildType.isDebuggable()) {

                //获取签名的名字 variant.signingConfig.name

                //要被替换的源字符串

                def sourceFile = "-${variant.flavorName}-${variant.buildType.name}"

                //替换的字符串

                def replaceFile = "V${variant.versionName}_${variant.flavorName}_${variant.buildType.name}_${releaseTime()}"

                outputFileName = output.outputFile.name.replace(sourceFile, replaceFile)

            }

        }

    }

}

以上完成打包名称的替换,通过刚才的步骤以后打出来的包名称为:版本号+包名+日期

最后是如何一次性将多个渠道的包一次性打出来,在这里,LZ写了一个脚本,下载Git,然后运行脚本,就可以一次性打出渠道下所有的包,需要脚本的评论拿。

至此,填完渠道打包的坑~~

Android彭于晏睡觉去啦~~~~

你可能感兴趣的:(Android 中多渠道打包的一些坑坑洼洼)