Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >AndroidStudio多渠道打包

AndroidStudio多渠道打包

作者头像
Javen
发布于 2018-08-21 03:13:15
发布于 2018-08-21 03:13:15
97200
代码可运行
举报
文章被收录于专栏:酷玩时刻酷玩时刻
运行总次数:0
代码可运行

参考资料 博客: http://blog.csdn.net/mynameishuangshuai/article/details/51783303 http://stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/ 视频: http://www.imooc.com/learn/752

假如AndroidManifest.xmlmeta-data>CHANNEL 是渠道的标准

1、在AndroidManifest.xml里设置动态渠道变量
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<meta-data
            android:name="CHANNEL"
            android:value="${CHANNEL_VALUE}" />

上面的value值CHANNEL_VALUE就是渠道标识。我们的期望的就是在编译时候这个值能够自动变化以满足区分多渠道的需求。

2、在build.gradle设置productFlavors

这里假定我们需要打包的渠道为小米、百度

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
android {  
    productFlavors {
        xiaomi {
            manifestPlaceholders = [CHANNEL_VALUE: "xiaomi"]
        }
        baidu {
            manifestPlaceholders = [CHANNEL_VALUE: "baidu"]
        }
    }  
}

如果打包的渠道比较多我们还可以批量修改

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //多渠道打包
    productFlavors {
        xiaomi {}
        baidu {}
    }

    productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [CHANNEL_VALUE: name]
    }

所谓ProductFlavors其实就是可定义的产品特性,配合 manifest 使用的时候就可以达成在一次编译过程中产生多个具有自己特性配置的版本。上面这个配置的作用就是,为每个渠道包产生不同的 CHANNEL_VALUE 的值。如果两者设置的值不一样就会出现以下的异常

动态渠道变量设置不一致导致的异常

3、在build.gradle文件中配置签名信息
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 signingConfigs {
        release {
            storeFile file("wxkey")
            storePassword '123456'
            keyAlias '1'
            keyPassword '123456'
        }
        debugConfig {
            storeFile file("wxkey")      
            storePassword "123456"
            keyAlias "1"
            keyPassword "123456"
        }
    }
4、执行打包命令 ./gradlew assembleRelease

在AndroidStudio窗口左下角打开Terminal面板,widnow输入gradlew assembleRelease Mac或者Linux输入./gradlew assembleRelease命令可以一次性打包出所有的签名渠道包

执行打包命令

打包成功后会提示BUILD SUCCESSRUL并在app>build>outputs>apk目录生成签名的apk

5、单独分别打bug或者release渠道包

1、如果我们想打xiaomi渠道的release版本,执行如下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./gradlew assemblexiaomiRelease

2、如果我们想打xiaomi渠道的bug版本,执行如下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 ./gradlew assemblexiaomiDebug

3、如果我们想打xiaomi渠道的release版以及bug版,则执行如下命名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 ./gradlew assemblexiaomi

4、打全部Release版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 ./gradlew assembleRelease

5、打全部Debug版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 ./gradlew assembleDebug
6、自定义所打APK包名称

当我们的渠道包版本比较多时,可以自定义所打APK包名称,用以区分

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 自定义输出配置
applicationVariants.all { variant ->
    variant.outputs.each { output ->
        def outputFile = output.outputFile
            if (outputFile != null && outputFile.name.endsWith('.apk')) {
                // 输出apk名称为JPay_0.0.1_xiaomi.apk
                def fileName = "JPay_${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk"
                output.outputFile = new File(outputFile.parent, fileName)
        }
    }
}

执行打包命令./gradlew assemblexiaomiRelease 我们发现输出的apk以及修改为了我们自定义的名称

自定义输入apk的名称

7、完整示例的配置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.3"
    defaultConfig {
        applicationId "mayihuijia.com"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "0.0.1"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    signingConfigs {
        release {
            storeFile file("wxkey")
            storePassword '123456'
            keyAlias '1'
            keyPassword '123456'
        }
        debugConfig {
            storeFile file("wxkey")
            storePassword "123456"
            keyAlias "1"
            keyPassword "123456"
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
            // 自定义输出配置
            applicationVariants.all { variant ->
                variant.outputs.each { output ->
                    def outputFile = output.outputFile
                    if (outputFile != null && outputFile.name.endsWith('.apk')) {
                        // 输出apk名称为JPay_0.0.1_xiaomi.apk
                        def fileName = "JPay_${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk"
                        output.outputFile = new File(outputFile.parent, fileName)
                    }
                }
            }
        }
        debug {
            signingConfig signingConfigs.debugConfig
        }
    }
    lintOptions {
        abortOnError false
    }
    //多渠道打包
    productFlavors {
        xiaomi {}
        baidu {}
    }

    productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [CHANNEL_VALUE: name]
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:24.2.1'
    testCompile 'junit:junit:4.12'
    compile 'com.javen205.jpay:jpaysdk:0.0.1'
}
 

安利时间: JPay是对微信App支付、支付宝App支付的二次封装,对外提供一个相对简单的接口以及支付结果的回调

极速开发微信公众号是对微信公众平台接口的二次封装。包括开发者模式、事件回调监听、微信模板消息、微信客服消息、自定义菜单、微信支付、素材管理等

如遇到问题欢迎留言交流

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.03.11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
AndroidStudio3.0多渠道打包:我用一行命令打出N个包
csdn: http://blog.csdn.net/k_bb_666
蜻蜓队长
2018/08/03
4210
AndroidStudio3.0多渠道打包:我用一行命令打出N个包
Gradle多渠道打包
国内Android应用市场品种太多,血统不纯,每次上线App都打包打到手软,上传上到吐血!好在我们有了Android studio和gradle,一条命令打包各种渠道版本App!
GitOPEN
2019/03/01
1.1K0
Android Studio 使用Gradle多渠道打包
我们都知道国内应用市场非常多,为了统计各个应用市场的app下载量和使用情况,我们需要多渠道的打包。如果一个一个的手动去打包岂不烦死了,要多麻烦就有多麻烦。这就要求我们学会使用Gradle进行多渠道打包。废话不多说了,直接进入正题吧! 第一步:配置AndroidManifest.xml 以友盟渠道为例,渠道信息一般都是写在 AndroidManifest.xml文件中,大约如下: <meta-data android:name="UMENG_CHANNEL" android:value="xiaomi" />
非著名程序员
2018/02/02
9900
Gradle多渠道打包(动态设定App名称,应用图标,替换常量,更改包名,变更渠道)
最近有个需求一次要打包9个类型的App,而且常量和String.xml都有变量。虽然之前也是一直存在变量,但是每次也仅仅只打包一个。这让我每次改变量,打包9个。要是以后每次都打包9次,我得疯了。 根据之前的了解,gradle 应该是可以解决这个问题的。所以就仔细研究了一番。
用户2802329
2018/08/07
1.9K0
Gradle多渠道打包(动态设定App名称,应用图标,替换常量,更改包名,变更渠道)
Android Studio 多渠道打
build.gradle实例: apply plugin: 'com.android.application' android { /** * 设置编译 sdk 和编译工具的版本 */ compileSdkVersion 19 buildToolsVersion "24.0.3" /** * 为所有的 build variants 设置默认的值. 关于 build variant, 我们后面会用一张图片说明 */ defau
霡霂
2018/06/04
5940
使用Gradle管理你的Android Studio工程
关于Android Gradle更多详细内容已经出书《Android Gradle权威指南》,大家可以购买,看更多没有介绍的知识点和内容,购买链接如下
飞雪无情
2018/08/28
1.2K0
studio多渠道打包
由于国内Android市场众多渠道,为了统计每个渠道的下载及其它数据统计,就需要我们针对每个渠道单独打包,如果让你打几十个市场的包岂不烦死了,不过有了Gradle,这事就简单了。 友盟多渠道打包 废话不多说,以友盟统计为例,在AndroidManifest.xml里面会有这么一段: <meta-data android:name="UMENG_CHANNEL" android:value="Channel_ID" /> 里面的 Channel_ID 就是渠道标示。我们的目标就是在编译的时
xiangzhihong
2018/01/30
7820
关于Gradle配置的小结
使用 Android Studio 来开发 Android 工程的过程中,接触 Gradle 是不可避免的,比如配置签名、引入依赖等。那么 Gradle 到底是什么东西呢? Gradle 是一个基于 Apache Ant 和 Apache Maven 概念的项目自动化建构工具。它使用一种基于 Groovy 的特定领域语言 (DSL) 来声明项目设置,抛弃了基于 XML 的各种繁琐配置 (此定义来自于百度百科-_- !) 。啰里啰唆一堆,幸运的是,一般来说 Android 开发者只要会配置 Gradle 就可以了,并不需要深入了解。那么下面我们就来揭开 Gradle 的面纱吧。
俞其荣
2022/07/28
6700
关于Gradle配置的小结
在Android Studio中配置Gradle做到 “根据命令行提示符生成指定versionCode, versionName,指定apk的打包输出路径”
1. 使用 Android studio ,使用 gradle 进行构建   2. 在实际开发中,我们需要使用jenkins进行打包。就需要配置我们的 gradle 脚本以支持参数化的方式。   3. 想获得一个可配置打包脚本的方法,允许 配置人员根据需要修改 服务器地址,versionCode, versionName 等   4. 隔离的源代码的配置,使用者在 jenkins里进行配置。
张云飞Vir
2020/03/16
1.9K0
Android Studio实现打渠道包,切换环境,混淆配置等
最近遇到项目从Eclispe迁移到Android studio,以前的Ant自动打包脚本已经兼容不好了,所以用了Gradle实现打渠道包,切换环境等。
开发者技术前线
2020/11/23
1.4K0
Android Studio实现打渠道包,切换环境,混淆配置等
Android Studio3.0前后使用signingConfigs打包APK小记
其中defaultConfig.versionCode、defaultConfig.versionName已经被variant.versionCode、variant.versionName取代,如果强行使用会报错
木溪bo
2018/12/27
2.1K0
二.jenkins配合Gradle实现自签名,自定义APK名称
上一篇文章: 一.jenkins+github+gradle 实现android自动化打包全攻略(MAC版) http://www.jianshu.com/p/9caab25d2cf1 上次已经实现自动打包,那么如何进行APK自定义包名呢?如何进行自签名呢? 主要通过设置项目的build.gradle
专注APP开发
2019/11/07
6640
二.jenkins配合Gradle实现自签名,自定义APK名称
android如何多渠道打包?
关于如何多渠道打包,以下文字详细解答了Android如何实现多渠道打包以及快速打包。
分你一些日落
2021/11/25
1.6K0
相关推荐
AndroidStudio3.0多渠道打包:我用一行命令打出N个包
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验