1. 官方教程

  https://developer.android.com/studio/build/build-variants.html

2. 设置Build Types参数

打开 Project Sturcture --> Build Variatns --> Build Types

设置参数如:zipalign = true

3. 创建 dimension

进入第2个选项卡: Flavors 创建 dimension

4. 添加渠道,设置渠道参数

点 + 按钮 ---> 点 Add Product Flavor -- > 输入渠道名字 --> 设置渠道参数,如ProGuard Files.

5. 添加其它渠道

如上.添加完后,如下:

6. 设置生成apk的名字

module 的 build.gradle 文件

 apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
apply plugin: 'com.jakewharton.butterknife' def buildTime(){
return new Date().format("yyMMdd", TimeZone.getTimeZone("UTC"))
} android {
compileSdkVersion 28
buildToolsVersion '28.0.3'
defaultConfig {
applicationId "cn.com.example.app"
minSdkVersion 15
targetSdkVersion 26
versionCode 5
versionName "v3.1.2.180103"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
zipAlignEnabled = true
applicationVariants.all { variant ->
variant.outputs.all { output ->
outputFileName = new File(
"${applicationId}_${variant.productFlavors[0].name}_${versionName}_${buildTime()}.apk".toLowerCase())
}
}
}
}
sourceSets { main { res.srcDirs = ['src/main/res', 'src/main/res/values-zh'] } }
compileOptions {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
flavorDimensions 'channels'
productFlavors {
myapp {
dimension = 'channels'
minSdkVersion 22
proguardFiles 'proguard-rules.pro'
}
huawei {
dimension = 'channels'
minSdkVersion 22
proguardFiles 'proguard-rules.pro'
}
xiaomi {
dimension = 'channels'
minSdkVersion 22
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0', {
exclude group: 'com.android.support', module: 'support-annotations'
})
// add library
//... implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
}
  • buildTime()是个自定义函数,返回时间.
  • "${applicationId}_${variant.productFlavors[0].name}_${versionName}_${buildTime()}.apk".toLowerCase() 包名_渠道名_版本名_时间.apk

用android studio多渠道打包的更多相关文章

  1. [Android Studio] Android studio 多渠道打包(超简洁版)

    [Android Studio] Android studio 多渠道打包(超简洁版) 转载:http://xuyazhou.com/archives/461 http://relex.me/usin ...

  2. Android studio 使用心得(四)—android studio 多渠道打包(二)

    Android studio 使用心得(四)—android studio 多渠道打包 这篇文章讲了一种打包方式.是直接在android studio 里面可视化操作,结合配置文件.我个人觉得严格上来 ...

  3. Android studio 多渠道打包

    一般用渠道的统计无非是用友盟或者其它之类的,今天就以友盟的为例吧. 渠道信息一般在 AndroidManifest.xml中修改以下值: <meta-data android:name=&quo ...

  4. Android Studio多渠道打包(二)

    虽然多渠道打包的方式有很多种,那么今天我要说的通过工具的形式进行多渠道打包 首先,打开Android studio,找到顶部Build,点开 选择红色部分,里面的编辑框可以帮助我们更快的熟悉Gradl ...

  5. Android Studio多渠道打包

    本文所讲述的多渠道打包是基于友盟统计实施的. 多渠道打包的步骤: 1.在AndroidManifest.xml里设置动态渠道变量 <meta-data android:name="UM ...

  6. Android Studio多渠道打包(一)

    1. 多渠道的概念 APP发布到不同的应用平台,监测用户是从哪个平台安装的. 2. 为什么要多渠道打包 统计用户安装APP来源 批量修改生成的apk文件名 可更改包名 生成不同应用名称或图标 3.多渠 ...

  7. Android Studio多渠道打包的使用

    项目地址 https://github.com/mcxiaoke/gradle-packer-plugin 项目介绍 gradle-packer-plugin 是Android多渠道打包工具Gradl ...

  8. Android studio 自定义打包apk名

    Android Studio打包应用默认生成的apk名称是:app-release.apk .如果我们要让生成的apk名跟我们版本包名有联系的话,那我们就要自定义生成的apk名了 需要在build.g ...

  9. android studio多渠道多包名多apk打包

    转自  利用 Android Studio 和 Gradle 打包多版本APK 搬砖的道路上,经常会有各种不同的需求,比如今天就碰到过一个打包版本的apk的要求, 比如一个apk给多个客户使用,如张三 ...

随机推荐

  1. JSP中contentType、pageEncoding和meta charset的区别

    1.创建JSP 使用Eclipse创建JSP文件: <%@ page language="java" contentType="text/html; charset ...

  2. IdentityServer4 (4) 静默刷新(Implicit)

    写在前面 1.源码(.Net Core 2.2) git地址:https://github.com/yizhaoxian/CoreIdentityServer4Demo.git 2.相关章节 2.1. ...

  3. Vue组件通信之子传父

    子组件向父组件通信主要通过自定义事件实现. 这里我记录一个小例子来帮助自己记忆. 通过点击子组件的按钮去执行父组件的函数并使用子组件传来的数据. 子组件定义如下: <template id=&q ...

  4. tableauRFM分析

    1.数据源 2.创建相关字段 2.1 购买点会员生命期 2.2 会员最后购买时间 2.3 最后购买点生命期 3.近一个月老客户的生命期情况 排除了当天创建当天购买的情况,可以看到超市的大部分用户是两年 ...

  5. C++ 对象的初始化

    目录 默认初始化 默认构造函数(default constructor) 构造函数初始值列表(cosntructor initializer list) 直接初始化和拷贝初始化 拷贝构造函数(copy ...

  6. 2020-07-11:session和cookie的区别是什么?

    福哥答案2020-07-11: 1.保存位置:session服务端.cookie客户端.2.安全性:session相对安全,cookie相对不安全.3.存储类型:session能够存储任意的对象,co ...

  7. 2020-04-08:谈一下IOC底层原理

    Ioc的底层原理 (1)xml配置文件 (2)dom4j解析xml (3)工厂设计模式 (4)反射

  8. asp.netcore mvc 防CSRF攻击,原理介绍+代码演示+详细讲解

    一.CSRF介绍 1.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session ridin ...

  9. 记一次生产环境tomcat线程数打满情况分析

    前言 旨在分享工作中遇到的各种问题及解决思路与方案,与大家一起学习. -- 学无止境, 加油 ! Just do it ! 问题描述 运行环境描述 tomcat-8.5 单节点(该应用集群20个节点) ...

  10. N46期第一周作业

    1.解释drwx rwx rwx中每个字符表⽰什么? d : 表示目录文件 ①rwx表示UID的读写执行权限  ②rwx表示GID的读写执行权限   ③rwx表示other的读写执行权限   2.li ...