Android 使用 Gradle 多渠道打包

来源:互联网 发布:服务器php环境配置 编辑:程序博客网 时间:2024/05/28 23:11

安卓开发完成,对于一个开放应用而言,我们需要发布到不同的应用市场,同时我们也需要统计不同市场的用户下载量。(通过启动应用后获取不同市场apk中的不同值来区分)

下面用一个具体的实例来说明: 
1、在AndroidManifest.xml的application内添加meta-data标签

<code class="hljs xml has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">application</span>    <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:allowBackup</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"true"</span>    <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:icon</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"@drawable/ic_launcher"</span>    <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:label</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"@string/app_name"</span>></span>    <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">meta-data</span>        <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"APP_CHANNEL"</span>        <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:value</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"${APP_CHANNEL_VALUE}"</span> /></span>    <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">activity</span>        <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">".MainActivity"</span>        <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:label</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"@string/app_name"</span> ></span>        <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">intent-filter</span>></span>            <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">action</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"android.intent.action.MAIN"</span> /></span>            <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">category</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">android:name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"android.intent.category.LAUNCHER"</span> /></span>        <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">intent-filter</span>></span>    <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">activity</span>></span><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">application</span>></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li></ul>

2、修改build.gradle文件,在android {} 中添加

<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">android {    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 打包渠道List</span>    productFlavors {        wandoujia {            manifestPlaceholders = [APP_CHANNEL_VALUE: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"豌豆荚"</span>]        }        cn360 {            manifestPlaceholders = [APP_CHANNEL_VALUE: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"360"</span>]        }        baidu {            manifestPlaceholders = [APP_CHANNEL_VALUE: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"百度"</span>]        }        tencent {            manifestPlaceholders = [APP_CHANNEL_VALUE: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"应用宝"</span>]        }        sougou {            manifestPlaceholders = [APP_CHANNEL_VALUE: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"搜狗市场"</span>]        }    }}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li></ul>

或者使用下面方法,直接使用flavor的name做为${APP_CHANNEL_VALUE}

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">android {    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 打包渠道List</span>    productFlavors {        wandoujia {}        cn360 {}        baidu {}        tencent {}        sougou {}    }    <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 批量处理,直接使用flavor的name作为APP_CHANNEL_VALUE的值</span>    productFlavors<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">all</span> { flavor <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">->        </span>flavor<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>manifestPlaceholders <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">[</span>APP_CHANNEL_VALUE: name<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">]</span><span class="hljs-markup" style="box-sizing: border-box;">    }}</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li></ul>

这样就完成了,执行 gradle assembleRelease 喝口茶坐等便可。 
完成后,到build/outputs/apk中就可以看到各种渠道包。

有关assemble可用的命令还有:

<code class="hljs mathematica has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">gradle assembleDebug    //所有<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Debug</span>版本gradle assembleRelease  //所有<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Release</span>版本gradle assembleBaidu    //指定渠道的<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Debug</span>和<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Release</span>版本gradle assembleBaiduDebug   //指定渠道的<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Debug</span>版本gradle assembleBaiduRelease //指定渠道的<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Release</span>版本gradle build    //所有渠道的<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Debug</span>和<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Release</span>版本</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>

最后附上我的 MainActivity 和 build.gradle

<code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">package</span> com.example.myandroid;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.app.Activity;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.content.pm.ApplicationInfo;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.content.pm.PackageManager;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.content.pm.PackageManager.NameNotFoundException;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.os.Bundle;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> android.widget.Toast;<span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/** * 应用入口 * *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @author</span> SHANHY(365384722@QQ.COM) *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @date</span>   2015年12月30日 */</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">MainActivity</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Activity</span> {</span>    <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span>    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">protected</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">onCreate</span>(Bundle savedInstanceState) {        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">super</span>.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        String channel = getAppMetaData(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"APP_CHANNEL"</span>);        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(channel != <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>)            Toast.makeText(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>, channel, Toast.LENGTH_SHORT).show();    }    <span class="hljs-javadoc" style="color: rgb(136, 0, 0); box-sizing: border-box;">/**     * 获取Application下面的metaData     *      *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @param</span> name     *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @return</span>     *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @author</span> SHANHY     *<span class="hljs-javadoctag" style="color: rgb(102, 0, 102); box-sizing: border-box;"> @date</span>   2015年12月30日     */</span>    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> String <span class="hljs-title" style="box-sizing: border-box;">getAppMetaData</span>(String meta_name){        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> {            ApplicationInfo appInfo = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.getPackageManager()                    .getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA);            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> appInfo.metaData.getString(meta_name);        } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">catch</span> (NameNotFoundException e) {            e.printStackTrace();        }        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>;    }}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li></ul>

完整的 build.gradle 脚本

<code class="hljs livecodeserver has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">buildscript {    repositories {        jcenter()    }    dependencies {        classpath <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'com.android.tools.build:gradle:2.0.0-alpha3'</span>    }}apply plugin: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'com.android.application'</span>dependencies {    compile fileTree(dir: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'libs'</span>, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">include</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'*.jar'</span>)}android {    compileSdkVersion <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">14</span>    buildToolsVersion <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"23.0.2"</span>    defaultConfig {       <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // 可以手动修改如下一些配置,无需改动任何代码便可以生成对应配置的apk</span>        applicationId <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"com.example.myandroid.aaa"</span>        minSdkVersion <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8</span>        targetSdkVersion <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">21</span>        versionCode <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">200</span>        versionName <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"2.0.0"</span>       <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // dex突破65535限制</span>        multiDexEnabled <span class="hljs-constant" style="box-sizing: border-box;">true</span>       <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // 默认打包渠道(官方)</span>        manifestPlaceholders = [APP_CHANNEL_VALUE: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"官方"</span>]    }   <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // 打包渠道List</span>    productFlavors {        myself {            manifestPlaceholders = [APP_CHANNEL_VALUE: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"官方"</span>]        }        wandoujia {            manifestPlaceholders = [APP_CHANNEL_VALUE: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"豌豆荚"</span>]        }        cn360 {            manifestPlaceholders = [APP_CHANNEL_VALUE: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"360"</span>]        }        baidu {            manifestPlaceholders = [APP_CHANNEL_VALUE: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"百度"</span>]        }        tencent {            manifestPlaceholders = [APP_CHANNEL_VALUE: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"应用宝"</span>]        }        sougou {            manifestPlaceholders = [APP_CHANNEL_VALUE: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"搜狗市场"</span>]        }    }   <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // 打包渠道List</span>   <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //productFlavors {</span>   <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //  myself {}</span>   <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //  wandoujia {}</span>   <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //  cn360 {}</span>   <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //  baidu {}</span>   <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //  tencent {}</span>   <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //  sougou {}</span>   <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //}</span>   <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // 批量处理,直接使用flavor的name作为APP_CHANNEL_VALUE的值(也可以不使用该方法,在productFlavors中逐一配置)</span>   <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //productFlavors.all { flavor -></span>   <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //  flavor.manifestPlaceholders = [APP_CHANNEL_VALUE: name]</span>   <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //}</span>    lintOptions {        abortOnError <span class="hljs-constant" style="box-sizing: border-box;">false</span>    }    sourceSets {        main {            manifest.srcFile <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'AndroidManifest.xml'</span>            java.srcDirs = [<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'src'</span>]            resources.srcDirs = [<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'src'</span>]            aidl.srcDirs = [<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'src'</span>]            renderscript.srcDirs = [<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'src'</span>]            res.srcDirs = [<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'res'</span>]            assets.srcDirs = [<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'assets'</span>]        }       <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // Move the tests to tests/java, tests/res, etc...</span>        instrumentTest.setRoot(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'tests'</span>)       <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // Move the build types to build-types/<type></span>       <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...</span>       <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // This moves them out of them default location under src/<type>/... which would</span>       <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // conflict with src/ being used by the main source set.</span>       <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // Adding new build types or product flavors should be accompanied</span>       <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // by a similar customization.</span>        debug.setRoot(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'build-types/debug'</span>)        release.setRoot(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'build-types/release'</span>)    }   <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //签名信息</span>    signingConfigs {        debug{           <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // No Debug Config</span>        }        release {            storeFile <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">file</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"xxxxx.key"</span>)            storePassword <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"xxxxx"</span>            keyAlias <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"xxxxx"</span>            keyPassword <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"xxxxx"</span>        }    }    buildTypes {       <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //Debug模式</span>        debug {           <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // 显示LOG,在java代码中的调用方式为:BuildConfig.LOG_DEBUG,AS工具可以在BuildConfig.java中新增这个字段,如果还要兼容使用eclipse,不建议使用新增字段,因为eclipse在clean后会重新生成BuildConfig.java(默认使用BuildConfig.DEBUG能满足需要就不要特殊处理了)</span>           <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //buildConfigField "boolean", "LOG_DEBUG", "true"</span>            versionNameSuffix <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"-debug"</span>           <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // 不开启混淆</span>            minifyEnabled <span class="hljs-constant" style="box-sizing: border-box;">false</span>           <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // 不需要ZIP优化</span>            zipAlignEnabled <span class="hljs-constant" style="box-sizing: border-box;">false</span>           <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // 不需要资源压缩</span>            shrinkResources <span class="hljs-constant" style="box-sizing: border-box;">false</span>           <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // signingConfig </span>            signingConfig signingConfigs.debug        }       <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //Release模式</span>        release {           <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // 不显示LOG</span>           <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //buildConfigField "boolean", "LOG_DEBUG", "true"</span>            minifyEnabled <span class="hljs-constant" style="box-sizing: border-box;">true</span>            zipAlignEnabled <span class="hljs-constant" style="box-sizing: border-box;">true</span>           <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // 资源压缩,移除无用的资源文件</span>            shrinkResources <span class="hljs-constant" style="box-sizing: border-box;">true</span>           <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // 混淆文件配置</span>            proguardFiles getDefaultProguardFile(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'proguard-android.txt'</span>), <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'proguard-rules.pro'</span>           <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // 签名信息配置(如果上面配置了defaultConfig则可以不用指定signingConfig)</span>            signingConfig signingConfigs.release            applicationVariants.all { variant ->                variant.outputs.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">each</span> { output ->                    def outputFile = output.outputFile                    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (outputFile != <span class="hljs-constant" style="box-sizing: border-box;">null</span> && outputFile.name.endsWith(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'.apk'</span>)) {                       <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // 输出apk名称为myandroid_v1.0.0_2015-12-30_baidu.apk</span>                        def fileName = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"myandroid_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"</span>                        output.outputFile = <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">new</span> File(outputFile.parent, fileName)                    }                }            }        }    }}<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 声明一个方法,获取打包时间</span>def releaseTime() {    <span class="hljs-constant" style="box-sizing: border-box;">return</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">new</span> Date().<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">format</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"yyyy-MM-dd"</span>, TimeZone.getTimeZone(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"UTC"</span>))}</code>
0 0
原创粉丝点击