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
- Android 使用 Gradle 多渠道打包
- Android 使用 Gradle 多渠道打包
- Android Studio使用Gradle多渠道自动打包
- android studio中使用gradle多渠道打包
- Android Studio使用Gradle进行多渠道打包
- Android Studio 使用Gradle多渠道打包
- Android Studio 使用Gradle多渠道打包
- Android快速使用Gradle实现多渠道打包
- Android使用Gradle实现多渠道打包
- android Gradle多渠道打包
- Gradle Android 多渠道打包
- android gradle 多渠道打包
- Android Gradle多渠道打包
- ANDROID --GRADLE多渠道打包
- Android---Gradle 多渠道打包
- 使用gradle多渠道打包
- Android Studio Gradle 多渠道打包
- Android Studio--Gradle多渠道打包
- LeetCode[238]Product of Array Except Self
- Shell脚本学习之sed详解
- [转] 汉语骂人最高境界!(爆笑)
- bzoj 1095
- Android 学习笔记(4)—— ToggleButton 、Switch
- Android 使用 Gradle 多渠道打包
- UESTC 1299 Date 预处理、打表、找周期、前缀和
- 记一个C++中的疑难杂症
- HDU 5631 Rikka with Graph(无向图去边搜索)
- 给easyui tree树加图标
- java中IO类的各种操作
- 腾讯2016软开实习生笔试题-编程1:蛇形矩阵
- 项目1-分数的雏形
- 基于JSP在线答题程序设计