安卓多渠道打包配置

众所周知安卓上架商店是很多的,有时候我们需要统计各个渠道的信息(不同渠道的下载量、用户活跃度等),如果每次打包都要修改一下不同的渠道标记然后分别打包的话是很浪费时间的,而且这样容易出问题,因此可以在gradle里稍加配置,做到一个打包可以输出携带不同渠道号的apk

一、配置清单文件AndroidManifest.xml

//在application节点里 跟activity同级
//name和value可以自己定义后面会用到
<meta-data
    android:name="CHANNEL_N"
    android:value="${CHANNEL_VALUE}" />

二、配置gradle

//注意是在application类型的gradle里配置
apply plugin: 'com.android.application'
android {
    
    
    compileSdkVersion 30
    buildToolsVersion "30.0.2"

    defaultConfig {
    
    
        applicationId "****"
        minSdkVersion 18
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        //这一个要加上 不然添加了productFlavors后可能会报错
        flavorDimensions "default"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
    
    
        release {
    
    
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    //写法一:CHANNEL_VALUE跟productFlavors里的名字不一致情况下
	//这就是对应的渠道配置 CHANNEL_VALUE对应着meta-data里的value
    productFlavors {
    
    
        xiaomi {
    
    
            manifestPlaceholders = [CHANNEL_VALUE: "xiaomi"]
        }
        baidu {
    
    
            manifestPlaceholders = [CHANNEL_VALUE: "baidu"]
        }
        huawei {
    
    
            manifestPlaceholders = [CHANNEL_VALUE: "huawei"]
        }
    }
   //写法二:productFlavors里的渠道名字和CHANNEL_VALUE一致
   productFlavors {
    
    
        xiaomi {
    
    }
        baidu {
    
    }
        huawei{
    
    }
        productFlavors.all {
    
     flavor ->
            flavor.manifestPlaceholders = [CHANNEL_VALUE: name]
        }
    }

	android.applicationVariants.all {
    
     variant ->
        // 修改APK名称 按自己需要决定要不要加
        variant.outputs.all {
    
    
            def name = variant.buildType.name
            if (name.contains("release")) {
    
    
                outputFileName = "${variant.productFlavors[0].name}-v${variant.versionName}-Release.apk"
            } else {
    
    
                outputFileName = "${variant.productFlavors[0].name}-v${variant.versionName}-Debug.apk"
            }
        }
    }
}

dependencies {
    
    
	//忽略
}

三、渠道号的获取

public String getChannelId() {
    
    
        try {
    
    
            ApplicationInfo info = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
            //CHANNEL_N对应着meta-data里的name 如果对应不上会抛空指针异常
            return info.metaData.getString("CHANNEL_N");
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
        return "";
    }

四、打包
在打包的时候选择多个渠道包就可以同时生成对应渠道的多个apk
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_36356379/article/details/115328387