安卓学习笔记---Android 开发技巧-以友盟为例在Android Studio利用gradle进行多渠道打包和apk签名发布

我最近想弄弄多渠道打包,百度了一上午,虽然也看了很多说的多渠道打包的步骤,但是对于某些地方依然有些不太明白,知道我看到了这篇博客,才知道,奥原来只要这样做就可以啊,很感谢这位博主的博客,让我走出了困惑区大哭


转载博客地址:

chenyk的博客


http://blog.csdn.net/chenyk_kevin_1/article/details/52162193 万分感谢

自谷歌放弃对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打包提速实践



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值