浅谈android多渠道打包和隐藏签名文件

我们知道,如果apk需要发布到多个平台,并且每个需要发布到每个平台上面的apk名称及其applicationid不一样的话,那么就需要运用到多渠道打包了!
多渠道打包 实际上也是打的正式渠道的包!所以这时必须产生正式签名的包!
今天说一种在build.gradle文件中隐藏签名参数的做法:
直接上图吧:

   /*正式apk签名*/
    signingConfigs{
        config{
            storeFile file(KEY_PATH)
            storePassword KEY_PASS
            keyAlias ALIAS_NAME
            keyPassword ALIAS_PASS
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.config
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
} 

则其所对应的文件路径及其密码都在gradle.properties文件下,如图所示:

KEY_PATH=../weather.jks
KEY_PASS=123456
ALIAS_NAME=suixingweather
ALIAS_PASS=123456

这样就能隐藏密码了,签名的gradle.properties文件就可以忽略掉!

其第一种多渠道打包就是:
第一步:在build.gradle下添加如下信息:

其中:qihu和baidu代表渠道名(自己定义),applicationid
代表分发出去的apk唯一标示码

/*多渠道打包*/
    productFlavors{
        qihu{
            applicationId "com.android.qihu"
        }
        baidu{
            applicationId "com.android.baidu"
        }
    }

第二步:在目录中新建与渠道号相对应的目录 并在该目录下新建java目录和res目录 ,如果你希望打出来的apk某个类和图标及应用名称不一样等等,都可以修改的
如下:
这里写图片描述

第三步:点击as工具旁边的gradler生产不同渠道的包和安装,也可以一键生成所有的apk
如下:

这里写图片描述

这里写图片描述

其中assembleRelease为一键生成所有的apk。

第二种:多渠道打包的方式
第一步,也是配置多渠道信息:如下(和第一种方式配置信息一致)

其中buildConfigField也可以写在release和debug下 根据需要来写,通过buildConfigField 来配置不同环境和不同渠道的配置信息都是ok的

productFlavors {
        baidu{
            // 每个环境包名不同
            applicationId "com.android.changeData.baidu"
            // 动态添加 string.xml 字段;
            // 注意,这里是添加,在 string.xml文件下不能有app_name这个字段,会重名!!!其对应的渠道号下面就不能有string文件了,,但是其获取的应用名的key要保持一致
            resValue "string", "app_name", "百度"
            // 动态修改 常量 字段
            buildConfigField "String", "FIRST_CHANGE_TEXT", '"我是百度首页"'
        }
        qq{
            applicationId "com.android.changeData..qq"
            resValue "string", "app_name", "腾讯"
            buildConfigField "String", "FIRST_CHANGE_TEXT", '"我是腾讯首页"'
        }
        }

第二步:和第一种方式的第二步是一样的,就不多说了,直接看图
这里写图片描述

第三步:是根据第二步图来的(图中apk 的命名比较特殊 有渠道号 版本名称 日期)
其在build.gradle配置如下:可以放在release或者debug下

      // 批量打包
            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    def outputFile = output.outputFile
                    if (outputFile != null && outputFile.name.endsWith('.apk')) {
                        //输出apk名称为:渠道名_版本名_时间.apk
                        def fileName = "${variant.productFlavors[0].name}_v${defaultConfig.versionName}_${releaseTime()}.apk"
                        output.outputFile = new File(outputFile.parent, fileName)
                    }
                }
            }

以及 releaseTime()方法的读取:

def releaseTime() {
    return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}

第四步,动态读取配置的FIRST_CHANGE_TEXT的值(类文件中)
String ENVIRONMENT = BuildConfig.FIRST_CHANGE_TEXT;

以上:

猜你喜欢

转载自blog.csdn.net/willba/article/details/79688910