Gradle常见用法

修改生成的apk文件名和输出路径

android {
        ...
        //gradle3.0以上 配置自定义打包名称,自定义apk输出路径
        applicationVariants.all { variant ->
            variant.outputs.all {
                def releaseTime = new Date().format('yyyy-MM-dd')
    //            修改outputFileName字段为自定义的apk名字    格式为:变体名称+版本号+发布时间+变体类型(release/debug).apk
                outputFileName = "${variant.baseName}_V${defaultConfig.versionName}_${releaseTime}_${variant.buildType.name}.apk"
    //            修改variant.getPackageApplication().outputDirectory字段为自定义输出路径
                variant.getPackageApplication().outputDirectory = new File("../apks")
    
            }
        }
        ...
    }
复制代码

打包结果

多渠道打包

变体

variant=productFlavors*buildTypes

6=3*2

一共6个变体

android {
...
    flavorDimensions "channel"//3.0以上必须设置一个Dimensions
    productFlavors {//3个Flavor
        android_baidu { dimension "channel" } // 百度手机助手
        android360 { dimension "channel" }// 360手机助手
        android_tengxunyingyongbao { dimension "channel" }  // 腾讯应用宝

    }
     buildTypes {//2个类型
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    ...
}
复制代码

menifest占位符使用

多渠道打包,就是这个原理

  1. 清单文件定义占位符
 <manifest>
    ...
    <application
        ...
        <meta-data
            android:name="CHANNEL_ID"
            android:value="${CHANNEL_ID_VALUE}" />
        <meta-data
            android:name="UMENG_CHANNEL"
            android:value="${UMENG_CHANNEL_VALUE}" />
            ...
    </application>
    ...
</manifest>

复制代码

2.gradle里:遍历所有变体,给menifest里的占位符赋值

productFlavors.all { flavor ->
    manifestPlaceholders 
    = [CHANNEL_ID_VALUE: name, UMENG_CHANNEL_VALUE: name]
}
复制代码

Android 从AndroidManifest获取meta-data

<meta-data>标签可以作为子标签,
可以被包含在<activity>、<application> 、<service>和<receiver>中:
在不同位置有不同方法来获取对应的值
复制代码

更多查看:www.cnblogs.com/spring87/p/…

ApplicationInfo appInfo = this.getPackageManager()
                                 .getApplicationInfo(getPackageName(),
                         PackageManager.GET_META_DATA);
   String msg=appInfo.metaData.getString("Data_Name");
复制代码

至此,定义变体、定义menifest占位符,在gradle里在不同的变体里给占位符赋值,就完成了多渠道打包,而友盟是通过(从AndroidManifest获取meta-data原理)来获取对应的渠道名,分类别进行统计

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值