我最近想弄弄多渠道打包,百度了一上午,虽然也看了很多说的多渠道打包的步骤,但是对于某些地方依然有些不太明白,知道我看到了这篇博客,才知道,奥原来只要这样做就可以啊,很感谢这位博主的博客,让我走出了困惑区
转载博客地址:
chenyk的博客
自谷歌放弃对eclipse的维护,力推android studio时,其版本的更新迭代速度也是非常快的,而且开发的工程中经常需要用到gradle的相关操作。同时,gradle这款依赖管理工具也随之被大家广泛使用。可gradle它究竟是什么呢?到底有什么作用呢?
另外,每当项目开发完成准备发布到各大安卓应用市场时,相信此时作为项目开发人员来说简直头大,如果发布的应用市场数量小的话,可能多操作几次就完事了的,倘若是几十个应用市场的话,事实上apk的打包速度本身就慢,这样即浪费人力物力,同时也是非常没有效率的。
自从有了友盟统计SDK的发布,给大家带来不少便捷,除了平时对用户统计、错误分析等功能之外,友盟SDK同时还提供了多渠道快速打包的功能。废话说得有些多,下面将为大家介绍其常用用法、友盟多渠道打包以及apk的签名发布操作。
定义
Gradle是Android Studio默认的build工具,是基于一种JVM语言— Groovy,再加上DSL组成的。说白了一种依赖管理工具,它抛弃了基于XML的各种繁琐配置,使用起来也简单,语法也相对简洁很多。
功能
项目创建完成之后,默认生成两个build.gradle文件,一个位于工程根目录下,另一个位于app目录下。工程根目录下的build.gradle文件是针对全局的配置,里面包括仓库地址和gradle的版本,这里不做过多讨论。这里主要说下app目录下的build.gradle文件。常用的功能共包括了以下几点:
1)声明构建的项目类型
<code class="hljs bash 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;">apply plugin: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'android'</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></ul>
2)设置编译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;">//编译SDK的版本</span> compileSdkVersion <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">23</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//编译的tools版本</span> buildToolsVersion <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"23.0.3"</span> defaultConfig { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//当前应用包名</span> applicationId <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"com.chenyk.androidkits"</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//支持的最低版本</span> minSdkVersion <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">9</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//支持的目标版本</span> targetSdkVersion <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">22</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//版本号</span> versionCode <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//版本名</span> versionName <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"1.0"</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// dex突破65535的限制</span> multiDexEnabled <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</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></ul>
3)签名配置
<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;"> signingConfigs { debug { keyAlias <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'kits'</span> keyPassword <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'888888'</span> 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;">"kitskeystore.jks"</span>) storePassword <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'888888'</span> } release { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //key别名</span> keyAlias <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'kits'</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //key密码</span> keyPassword <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'888888'</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //密钥文件路径</span> 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;">"kitskeystore.jks"</span>) <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //密钥文件密码</span> storePassword <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'888888'</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></ul>
4)混淆设置
<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;">buildTypes { release { minifyEnabled <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,指定混淆规则文件</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> signingConfig signingConfigs.release } }</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></ul>
5)多渠道打包
<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;"> productFlavors { googleplay {} huawei {} xiaomi {} wandoujia {} baidu {} yingyongbao {} android360 {} uc {} umeng {} meizu{} <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//批量配置</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>UMENG_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>
6).so文件的导入
<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;">task copyNativeLibs(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">type</span>: Copy) { from fileTree(dir: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'libs'</span>, include: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'armeabi/*.so'</span>) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">into</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'build/lib'</span> } tasks<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>withType(Compile) { options<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>encoding <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"UTF-8"</span> } tasks<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>withType(Compile) { compileTask <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-> </span>compileTask<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>dependsOn copyNativeLibs } clean<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>dependsOn <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'cleanCopyNativeLibs'</span> tasks<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>withType(com<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>android<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>build<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>gradle<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>tasks<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>PackageApplication) { pkgTask <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-></span>pkgTask<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>jniFolders <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><span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">new</span> File(buildDir, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'lib'</span>)<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></ul>
7)依赖库
<code class="hljs rust 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;">dependencies { compile fileTree(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">dir</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'libs'</span>, include: [<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'*.jar'</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></ul>
8)依赖包的定义
<code class="hljs matlab 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;">dependencies <span class="hljs-cell" style="box-sizing: border-box;">{ classpath <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'com.android.tools.build:gradle:0.4'</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></ul>
多渠道打包
1、友盟账号注册登录
友盟账号注册,按照步骤完成注册流程,方法简单,请自行完成。
2、SDK的下载
1)jar包下载:http://dev.umeng.com/analytics/android-doc/sdk-download ,下载完成后解压缩,并将jar包添加到libs目录下
2)gradle依赖配置:在build.gradle文件中添加以下配置
<code class="hljs matlab 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;">dependencies <span class="hljs-cell" style="box-sizing: border-box;">{ compile <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'com.umeng.analytics:analytics:latest.integration'</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></ul>
3、获取友盟appkey
1)进入友盟首页,选择应用统计,点击立即使用,进入到我的产品页面
2)添加新应用,按照提示信息填写相关资料后,提交并获取appkey
4、在AndroidManifest.xml中配置AppKey
添加以下相关权限,以及友盟相关参数
<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);">uses-permission</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.permission.ACCESS_NETWORK_STATE"</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);">uses-permission</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.permission.ACCESS_WIFI_STATE"</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);">uses-permission</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.permission.INTERNET"</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);">uses-permission</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.permission.READ_PHONE_STATE"</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> …… <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);">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);">"UMENG_APPKEY"</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);">"YOUR_APP_KEY"</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);">"UMENG_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);">"Channel ID"</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></ul>
这里简单说明下,YOUR_APP_KEY填入步骤3获取的appkey,并且我们是要进行多渠道的打包,这里的Channel ID需改为${UMENG_CHANNEL_VALUE}才能在打包的时候通过build.gradle文件中的productFlavors进行对应。
关于友盟SDK的集成步骤到此就ok了的,如若还有不明白的地方可参考友盟官方提供的集成文档。下面将开始讲述多渠道打包的配置步骤。
5、添加渠道包名,配置不同风格的app
<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;"> productFlavors { googleplay {} huawei {} xiaomi {} wandoujia {} baidu {} yingyongbao {} android360 {} uc {} umeng {} meizu{} <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//批量配置</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>UMENG_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>
最后在Terminal命令提示符中,输入命令 gradlew assembleRelease,等待打包工作的完成。打包完成之后,可以在 当前项目名称\app\build\outputs\apk\ 目录下查看已打包完成的apk列表。会不会觉得比以前打包的方式简单多了,效率也提升了不少。
当然这里还有一些其他的命令提供使用,比如:
gradlew assembleRelease //创建新任务打包所有渠道包的release版本apk
gradlew assembleDebug //创建新任务打包所有渠道包的debug版本apk
gradlew assemblebaiduRelease //创建新任务打包指定渠道包(百度)的release版本apk
打包的工作虽然已经完成,但大家都知道,此时打包的apk并没有进行签名,没有签名当然也就无法发布到应用市场。下面就说下apk是如何签名的,步骤相对来说比较简单。
apk签名发布
1)在Android Studio的菜单栏上依次选择Build->Generate Signed APK…
2)创建密钥库及密钥,点击“Create new…”按钮创建密钥库
这里注意一下信息项需填写哪些信息:
Key store path:密钥库文件的地址
Password/Confirm:密钥库的密码
Alias:密钥名称
Password/Confirm:密钥密码
Validity(years):密钥有效时间,一般默认25年
First and Last Name:密钥颁发者姓名
Organizational Unit:密钥颁发组织
City or Locality:城市
Country Code(XX):国家代码
4)点击Finish完成之后,到下一界面
5)点击Next按钮,并选择所有渠道或指定渠道,点击Finsh按钮,进行签名打包工作任务
等待所有渠道包签名打包完成后就可以发布到各大应用市场了的。
签名的方式还有另外一种哦,具体的操作是
在build.gradle文件中添加签名配置信息以及buildTypes配置信息如下:
<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;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //签名配置</span> signingConfigs { debug { keyAlias <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'kits'</span> keyPassword <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'888888'</span> 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;">"kitskeystore.jks"</span>) storePassword <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'888888'</span> } release { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //key别名</span> keyAlias <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'kits'</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //key密码</span> keyPassword <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'888888'</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //密钥文件路径</span> 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;">"kitskeystore.jks"</span>) <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //密钥文件密码</span> storePassword <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'888888'</span> } } buildTypes { debug { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // 显示Log</span> buildConfigField <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"boolean"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"LOG_DEBUG"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"true"</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // apk包名称后缀,用来区分release和debug</span> versionNameSuffix <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"-debug"</span> signingConfig signingConfigs.debug } release { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // 不显示Log</span> buildConfigField <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"boolean"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"LOG_DEBUG"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"false"</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;">true</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // 移除无用的resource文件</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;"> //前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,指定混淆规则文件</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> signingConfig signingConfigs.release } }</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></ul>
注意,这里笔者把debug版本和release都设置同样的配置信息,在平常的开发过程中debug配置,可以使用android studio默认的配置信息即可。配置完成后,在Terminal命令提示符中,输入命令gradlew assembleRelease就可以了的。
在打包apk文件时,还可以对文件的名称进行修改,比如加入时间信息或者svn版本到apk文件名称中,方便查找apk等。下面将把打包的时间添加到apk名称中,具体代码如下:
<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;"> applicationVariants<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> { variant <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-> </span>variant<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>outputs<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>each { output <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-> </span>def outputFile <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> output<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>outputFile <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (outputFile <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">!=</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">null</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">&&</span> outputFile<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>name<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>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名称为dt_android360_v1.0_0705114322.apk</span> def fileName <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"dt_${variant.productFlavors[0].name}_v${defaultConfig.versionName}_${new Date().format("</span>MMddhhmmss<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">")}.apk"</span> output<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>outputFile <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">new</span> File(outputFile<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">parent</span>, fileName) } } }</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></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;">apply plugin: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'com.android.application'</span> android { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //编译SDK的版本</span> compileSdkVersion <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">23</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //编译的tools版本</span> buildToolsVersion <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"23.0.3"</span> defaultConfig { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //当前应用包名</span> applicationId <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"com.chenyk.androidkits"</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //支持的最低版本</span> minSdkVersion <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">9</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //支持的目标版本</span> targetSdkVersion <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">22</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //版本号</span> versionCode <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //版本名</span> versionName <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"1.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;"> //执行lint检查,有任何的错误或者警告提示,都会终止构建,现将其关掉。</span> lintOptions { abortOnError <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> signingConfigs { debug { keyAlias <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'kits'</span> keyPassword <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'888888'</span> 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;">"kitskeystore.jks"</span>) storePassword <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'888888'</span> } release { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //key别名</span> keyAlias <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'kits'</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //key密码</span> keyPassword <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'888888'</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //密钥文件路径</span> 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;">"kitskeystore.jks"</span>) <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //密钥文件密码</span> storePassword <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'888888'</span> } } buildTypes { debug { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // 显示Log</span> buildConfigField <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"boolean"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"LOG_DEBUG"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"true"</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // apk包名称后缀,用来区分release和debug</span> versionNameSuffix <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"-debug"</span> minifyEnabled <span class="hljs-constant" style="box-sizing: border-box;">false</span> zipAlignEnabled <span class="hljs-constant" style="box-sizing: border-box;">false</span> shrinkResources <span class="hljs-constant" style="box-sizing: border-box;">false</span> signingConfig signingConfigs.debug } release { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> // 不显示Log</span> buildConfigField <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"boolean"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"LOG_DEBUG"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"false"</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;">true</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //Zipalign优化</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;"> // 移除无用的resource文件</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;"> //前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,指定混淆规则文件</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> signingConfig signingConfigs.release <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //修改输出文件的名称</span> 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名称为dt_android360_v1.0_0705114322.apk</span> def fileName = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"dt_${variant.productFlavors[0].name}_v${defaultConfig.versionName}_${new Date().format("</span>MMddhhmmss<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">")}.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;"> //渠道Flavors,配置不同风格的app</span> productFlavors { googleplay {} huawei {} xiaomi {} wandoujia {} baidu {} yingyongbao {} android360 {} uc {} umeng {} meizu{} <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"> //批量配置</span> productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] } } } 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>]) testCompile <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'junit:junit:4.12'</span> compile <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'com.android.support:appcompat-v7:23.4.0'</span> compile <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'com.android.support:design:23.2.0'</span> compile project(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">':jpushkit'</span>) compile project(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">':commkit'</span>) compile project(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">':asynchttpkit'</span>) compile project(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">':jskit'</span>) compile project(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">':appkit'</span>) compile project(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">':photokit'</span>) compile project(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">':retrofitkit'</span>) compile project(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">':zxingkit'</span>) }</code>
最后还有几篇写的很好的关于多渠道打包的文章,大家都可以看看
菜单Android 多渠道打包原理和使用
Gradle打包APK的一些小技巧和productFlavor配置
美团多渠道打包方案详解,速度快到白驹过隙
手把手教你AndroidStudio多渠道打包
android产品研发(五)-->多渠道打包
Android打包提速实践