Gradle实现的两种简单的多渠道打包方法

简介: Gradle实现的两种简单的多渠道打包方法

本来计划今天发Android的官方技术文档的翻译——《Gradle插件用户指南》的第五章的,不过由于昨天晚上没译完,还差几段落,所以只好推后了。

今天就说一下使用Gradle进行类似友盟这样的多渠道打包的方法吧。

本文原创,转载请注意在CSDN上的出处:

http://blog.csdn.net/maosidiaoxian/article/details/42000913

目前我掌握的方法有两种,都非常简单,用的都是Gradle Android插件里的productFlavors。

以友盟的多渠道打包为例,假设我们需要打包出如下渠道:UMENG, WANDOUJIA, YINGYONGBAO。

第一种方法,是需要创建文件的。

我们在写完我们的代码之后,在app/src下面,分别创建和main同级目录的文件夹umeng, wandoujia, yingyongbao,这三个文件夹里面都各只有一个AndroidManifest.xml文件,文件只需要如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
    package="your.package.name">  
    <application>  
          <meta-data android:name="UMENG_CHANNEL" android:value="UMENG"/>  
    </application>  
</manifest>  

注意,上面的value的值要和你的渠道名所对应。比如wandoujia里面要对应为你豌豆荚上的渠道名(如WANDOUJAI)。

然后在你的build.gradle的android{}节点里面,添加productFlavors节点,代码如下:

android {  
    // 这里是你的其他配置  
    productFlavors{  
        umeng{  }  
        wandoujai {  }  
        yingyongbao{  }  
    }  
    // 你的其他配置  
}  

注意这里的flavors的名字要和你的文件夹的名字对应。这样配置之后,构建的就是多渠道的APK了。


第二种方法,不用创建那些文件,它使用的是Gradle Android插件里的另一个功能,manifestPlaceholders。

在这种方法中,你只需要在AndroidManifest.xml中,对友盟的渠道进行这样配置:

<meta-data  
    android:name="UMENG_CHANNEL"  
    android:value="${CHANNEL_NAME}" />  

然后同样使用productFlavors,不过这时它的配置是这样的:

android {  
    // 你的其他配置代码  
    productFlavors {  
        yingyongbao {  
            manifestPlaceholders = [ CHANNEL_NAME:"YINGYONGBAO"]  
        }  
        umeng {  
            manifestPlaceholders = [ CHANNEL_NAME:"UMENG" ]  
        }  
        wandoujia {  
            manifestPlaceholders = [ CHANNEL_NAME:"WANDOUJIA" ]  
        }  
    }  
    // 你的其他配置代码  
}  

在上面当中,我们也可以指定一个默认的渠道名,如果需要的话。指定默认的值是在defaultConfig节点当中添加如下内容:

manifestPlaceholders = [ CHANNEL_NAME:"Unspecified"]  

这里的Unspecified换成你实际上的默认的渠道名。

使用manifestPlaceholders的这种配置,同样适用于manifest的其他配置。比如你需要在不同渠道发布的apk里面,指定不同的启动Activity。比如在豌豆荚里面发布的,启动的Activity显示的是豌豆荚首发的界面,应用宝里面启动的是应用宝首发的界面(哈哈,有点坏),你就可以对你的activity的值使用${activity_name}的方式,然后在productFlavors里面配置这个${activity_name}的值。

相关文章
|
9天前
|
Android开发
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
20 0
|
2月前
|
Android开发
gradle 变体打包 productFlavors
gradle 变体打包 productFlavors
33 5
|
8月前
|
jenkins Java Shell
Jenkins 打包shell出现gradle命令不存在,jvm内存溢出
Jenkins 打包shell出现gradle命令不存在,jvm内存溢出
68 4
|
开发工具
Gradle使用命令行打包apk
Gradle使用命令行打包apk
436 0
Gradle使用命令行打包apk
|
Web App开发 Java 开发工具
友盟在AS中利用Gradle进行多渠道打包和APK签名发布( 五 )
这篇是直接给大家上代码,希望让大家了解到友盟
387 0
|
Web App开发 Java 开发工具
|
Java
友盟在AS中利用Gradle进行多渠道打包和APK签名发布( 三 )
接上两篇的知识,这篇也是分享一下配置信息
275 0
|
Web App开发 Android开发 数据安全/隐私保护
友盟在AS中利用Gradle进行多渠道打包和APK签名发布( 二 )
自从Google放弃对Eclipse的维护,并力推Android studio时,其版本的更新迭代速度也是非常快的,而且开发的工程中经常需要用到gradle的相关操作
95 0
|
10月前
|
存储 Java Android开发
Android 开发 - 充分利用Gradle
Android 开发 - 充分利用Gradle
133 2
|
9天前
|
C# Android开发 开发者
Android gradle编译时字节码处理
Android gradle编译时字节码处理
13 1