android gradle 多渠道打包分发

来源:互联网 发布:seo是什么意思 编辑:程序博客网 时间:2024/06/05 07:43

本文转载自:http://blog.csdn.net/catoop/article/details/50435431

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

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

<code class="hljs xml has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial; "><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; background-color: rgb(238, 238, 238); 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; "><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; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial; ">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; background-color: rgb(238, 238, 238); 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; "><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; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial; ">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; background-color: rgb(238, 238, 238); 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; "><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; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial; ">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; background-color: rgb(238, 238, 238); 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; "><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; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial; "><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; background-color: rgb(238, 238, 238); 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; "><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; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial; ">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
原创粉丝点击