Gradle多渠道打包应用apk

1.背景:
apk可能要求有多种配置要求,比如访问的ip不同,配置文件资源不同等,这就要求可以一次性打包多个apk,避免手动多次打包;
2.原理:
a.在app的build.gradle文件种配置:

android {

    ....

    sourceSets {
        //设置各个渠道的目录文件
        main {
            jniLibs.srcDirs = ['libs']
        }
        supion {
            java.srcDirs = ['src/supion', 'src/supion/java', 'src/supion/java/']
        }
        hopeland {
            java.srcDirs = ['src/hopeland', 'src/hopeland/java', 'src/hopeland/java/']
        }
    }
    productFlavors {//两个渠道
        hopeland {
        }
        supion {
        }
    }
    //遍历productFlavors打包输出文件名
    applicationVariants.all { variant ->
        variant.outputs.each { output ->

            def appName = 'Ioter'
            def oldFile = output.outputFile
            def buildName

            variant.productFlavors.each { product ->
                buildName = product.name
            }

            output.outputFile = new File(
                    output.outputFile.parent + "/${variant.buildType.name}",
                    appName + "-" + getDate() + "-" + "${variant.buildType.name}-${variant.versionName}-" + buildName + ".apk".toLowerCase())
        }
    }
}
def getDate() {
    def date = new Date()
    def formattedDate = date.format('yyyyMMddHHmm')
    return formattedDate
}

b.在代码目录下,创建各自渠道的文件目录(和main同级),
这里写图片描述
c.在各自渠道配置相同的文件DeviceUtil.java,在该文件种配置各自的资源。
注:在main目录种不能有DeviceUtil文件,原理是一个渠道中,main目录和渠道目录合并,如果相同就存在冲突了。

猜你喜欢

转载自blog.csdn.net/yaonga/article/details/78522878