安卓:一个项目的多种打包方式

应用场景:工作中经常会遇到一个项目需要多种打包的情况。只改几个参数,或者替换几个图片,就需要重新打一个安装包。如果只是一处两处,一次两次还好,如果频繁有这样的需求,想想就脑壳子疼……
为了解决这个问题, 采用gradle自带的 productFlavors 工具来实现多渠道,多app打包方式进行。

productFlavors是什么?

直译过来是产品特色,作用也差不多,用同一套代码生成不同的特色的产品。
别的也没有必要去深究,简单来说,记住几点就好:

  1. 这是gradle自带的工具,在build.gradle里进行配置,主要用于多渠道打包;
  2. 能配置非常多的参数,applicationId、versionCode、versionName、签名、资源文件、常量、代码文件等等。
  3. 打包时选择配置。

简单使用

如果只有几个常量需要修改,那么两步就行了:
第一步:模块build.gradle 中android下添加如下代码。

    flavorDimensions "default"
    productFlavors {
        oneApk {
            buildConfigField "String", "myString", '"第一个apk的文本"'  
            buildConfigField "int", "myint", '1'
            buildConfigField "boolean", "myboolean", 'false'
        }
        twoApk {
            buildConfigField "String", "myString", '"第二个apk的文本"'  
            buildConfigField "int", "myint", '2'
            buildConfigField "boolean", "myboolean", 'true'
        }
        threeApk {
            buildConfigField "String", "myString", '"第三个apk的文本"'  
            buildConfigField "int", "myint", '3'
            buildConfigField "boolean", "myboolean", 'false'
        }
    }

第二步:clean之后重新编译,代码中直接就可以使用了

Log.e("mystring",BuildConfig.myString);

打包之前在Android Studio左侧底部找到Build Variants栏,选择对应的Build Variant打包。

高阶使用

修改applicationId、versionCode、versionName、签名……

在上面那段代码的基础上修改就行,每一个productFlavors 中进行相应的设置。
为了以后能直接复制粘贴用,那我现在复制一下吧!

 	flavorDimensions "default"
    productFlavors {
        oneApk {
            applicationId "com.xx.xxone"
            versionCode 1
            versionName "1.1"
            signingConfig signingConfigs.oneRelease
            
            //....
        }

        twoApk {
            applicationId "com.xx.xxtwo"
            versionCode 2
            versionName "1.2"
            signingConfig signingConfigs.twoRelease

            //....
        }

        threeApk {
            applicationId "com.xx.xxthree"
            versionCode 3
            versionName "1.3"
            signingConfig signingConfigs.threeRelease

             //....
        }
    }
    // 因为多了签名,所以还得多一个标签,如下:
    signingConfigs {
        oneRelease {
            storeFile file("xx/xx/one.jks") // 签名文件路径
            storePassword "123456"
            keyAlias "one"
            keyPassword "123456"
        }
        twoRelease {
            storeFile file("xx/xx/two.jks")
            storePassword "123456"
            keyAlias "two"
            keyPassword "123456"
        }
        threeRelease {
            storeFile file("xx/xx/three.jks")
            storePassword "123456"
            keyAlias "three"
            keyPassword "123456"
        }
    }

如果修改签名不成功,还是用了默认的签名,那么把buildTypes下 signingConfig设置为 null 即可。

 buildTypes {
        release {
            signingConfig null
            //... 省略其它
        }
        debug {
            signingConfig null
             //... 省略其它
        }
    }

其它

渠道多了,打包的时候很容易乱,因此打包的时候区分一下apk的文件名。

buiild.gradle最外层标签添加时间方法

static def releaseTime() {
    return new Date().format("yyyy-MM-dd-HH.mm", TimeZone.getTimeZone("GMT+8"))
}

android标签下:

    applicationVariants.all {
        variant ->
            variant.outputs.all {
                outputFileName = "${variant.productFlavors[0].name}-v${variant.productFlavors[0].versionName}-${releaseTime()}.apk"
            }
    }

你可能感兴趣的:(Android填坑记)