返回> 网站首页 

android多渠道版本编译

yoours2024-04-11 10:42:07 android 阅读 700

简介一边听听音乐,一边写写文章。

一、介绍

    多渠道打包,也即多版本打包APK文件。


二、build.gradle配置文件

    生成standard 、miui两个版本apk。


buildFeatures {

        buildConfig = true

    }

    signingConfigs {

        soskp {

            keyAlias 'xxxxxxxxx'

            keyPassword 'xxxxxx'

            storeFile file('D:\\xxxxxxxx.jks')

            storePassword 'xxxxxx'

        }

    }


    // 必须有这一定义,值随意

    flavorDimensions "product"

    // 多版本配置

    productFlavors {

        standard {

            // 增加BuildConfig常量

            buildConfigField "Integer", "SelectFileType", "1"

            // 修改资源属性 - 把 AndroidManifest.xml 中名为MobileType的字符串值,改为standard

            resValue "string", "MobileType", "standard"

        }


        miui {

            buildConfigField "Integer", "SelectFileType", "2"

            resValue "string", "MobileType", "miui"

        }

    }


    buildTypes {

        release {

            signingConfig signingConfigs.soskp

            minifyEnabled false

            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

        }

    }


    android.applicationVariants.all {

        variant ->

            variant.outputs.all { output ->

                variant.productFlavors.each { flavor ->

                    def buildType = variant.buildType.name

                    def versionName = variant.versionName

                    def versionCode = variant.versionCode

                    if (variant.buildType.name == "debug")

                    {

                        outputFileName = "DcTool_${flavor.name}_V${defaultConfig.versionName}_debug.apk"

                    } else {

                        outputFileName = "DcTool_${flavor.name}_V${defaultConfig.versionName}_release.apk"

                    }

                }

            }


            // 将编译后的apk拷贝到指定目录

            def obj

            if (variant.hasProperty('assembleProvider')) {

                obj = variant.assembleProvider.get()

            } else {

                obj = variant.assemble

            }

            obj.doLast { assemble ->

                println("assemble:${assemble}")

                if (assemble.name.toLowerCase().contains("release")) {

                    copy {

                        from variant.outputs*.outputFile

                        into "./build/apks/${variant.versionName}"

                    }

                }

                //if you don't want to delete the file after copying it comment the line below

                // 可以选择删除或保留当前文件夹下的apk

                //delete variant.outputs*.outputFile

            }

    }


三、多版本的参数内容区分

    1. 增加BuildConfig常量

            a) 定义SelectFileType常量

                buildConfigField "Integer", "SelectFileType", "1"

            b) java中调用 BuildConfig.SelectFileType 方法读取变量值。

    2. 修改资源属性

            a) 修改资源文件中名为MobileType的字符串值,改为standard

                resValue "string", "MobileType", "standard"

            b) 修改 AndroidManifest.xml 文件,增加资源属性

                <meta-data android:name="Mobile" android:value="$[MobileType]" />

            c) java调用 getResources().getString(R.string.MobileType) 方法读取资源变量值


四、编译

    打开菜单

方法1:

    a) Build->Select Build Variant->选择要构建的类型。

    b) 点击Build菜单中的Build Bundle(s) / APK(s)来生成签名过的APK

方法2:

    a) Generate Signed Bundle/APK(s)

    b) 配置签名文件

    c) 多选要创建的APK


微信小程序扫码登陆

文章评论

700人参与,0条评论