zoukankan      html  css  js  c++  java
  • 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

     
  • 相关阅读:
    C#利用反射动态调用类及方法
    系统程序监控软件
    SQL server 2008 安装和远程访问的问题
    sql server 创建临时表
    IIS 时间问题
    windows 2008 安装 sql server 2008
    sql server xml nodes 的使用
    Window 7sp1 安装vs2010 sp1 打开xaml文件崩溃
    CSS资源网址
    Could not load type 'System.ServiceModel.Activation.HttpModule' from assembly 'System.ServiceModel, Version=3.0.0.0
  • 原文地址:https://www.cnblogs.com/xgjblog/p/4599317.html
Copyright © 2011-2022 走看看