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


    Android多渠道打包Gradle多渠道打包友盟多渠道打包productFlavors

    本来计划今天发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文件,文件只需要如下:

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
    2.     package="your.package.name">  
    3.     <application>  
    4.   
    5.           <meta-data android:name="UMENG_CHANNEL" android:value="UMENG"/>  
    6.   
    7.     </application>  
    8. </manifest>  
    注意,上面的value的值要和你的渠道名所对应。比如wandoujia里面要对应为你豌豆荚上的渠道名(如WANDOUJAI)。

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

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. android {  
    2.     // 这里是你的其他配置  
    3.   
    4.     productFlavors{  
    5.         umeng{  }  
    6.         wandoujai {  }  
    7.         yingyongbao{  }  
    8.     }  
    9.     // 你的其他配置  
    10. }  
    注意这里的flavors的名字要和你的文件夹的名字对应。这样配置之后,构建的就是多渠道的APK了。

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

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

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. <meta-data  
    2.     android:name="UMENG_CHANNEL"  
    3.     android:value="${CHANNEL_NAME}" />  

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

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. android {  
    2.     // 你的其他配置代码  
    3.   
    4.     productFlavors {  
    5.         yingyongbao {  
    6.             manifestPlaceholders = [ CHANNEL_NAME:"YINGYONGBAO"]  
    7.         }  
    8.         umeng {  
    9.             manifestPlaceholders = [ CHANNEL_NAME:"UMENG" ]  
    10.         }  
    11.         wandoujia {  
    12.             manifestPlaceholders = [ CHANNEL_NAME:"WANDOUJIA" ]  
    13.         }  
    14.   
    15.     }  
    16.     // 你的其他配置代码  
    17. }  

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

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. manifestPlaceholders = [ CHANNEL_NAME:"Unspecified"]  
    这里的Unspecified换成你实际上的默认的渠道名。

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

     

    本文原创,转载请注明CSDN博客上的出处:

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

    或作者:Geek_Soledad

     
  • 相关阅读:
    Socket send函数和recv函数详解
    isdigit()函数用法
    C语言的那些小秘密之字节对齐
    The Five Best Linux BitTorrent Clients
    怎么计算网站高峰期并发量和所需的带宽?
    软件需求包括3个不同的层次 业务需求、用户需求和功能需求
    右键删除选中的行总提示rowIndex
    SQL Server[转]SQL Server中临时表与表变量的区别
    面向对象的软件工程应用浅研
    OO开发思想:面向对象的开发方法(Object oriented,OO)
  • 原文地址:https://www.cnblogs.com/xgjblog/p/4599317.html
Copyright © 2020-2023  润新知