zoukankan      html  css  js  c++  java
  • gradle多渠道打包及友盟统计-eclipse版本

    在进行渠道打包的之前,先看看准备篇,知道打包为了什么。

    参见1.0android批量打包认知。
    eclipse中使用gradle多渠道打包全部流程

    一.生成gradle文件,配置本地的gradle环境
    1.选中需要打包的项目右键选择expert->生成gradle文件,如下图所示
    技术分享
    2.完成第一步后,刷新项目可以得到如下图所示的文件
    技术分享

    显然项目中多出了gradle.build文件,gradle文件夹。如果没有出现,点击项目右键-refresh
    刷新过后看到已经生成的gradle文件夹,如下图:
    技术分享
    3.打开上述gradle-wrapper.properties文件
    技术分享
    红色表示部分:使用gradle打包的时候,所需要使用的文件。

    4.复制上述的url,或者直接到官网下载相应的gradle-1.12-all.zip.
    为什么要下载对应的,可能是由于版本之间的差异,导致打包失败。应该也可以尝试升级adt或者eclipse中的gradle插件的版本。
    技术分享
    以上是官网下载的截图,在红色标志部分,可以选择想要下载的对应版本。在初期我下载最高版本,最终打包没有成功。下载了匹配版本打包成功。
    可是测试高版本,如果不行,就使用匹配的对应版本。这里面选择了匹配的对应版本。
    5.配置gradle的本地环境。
    gradle-1.12-all的解压路径
     
      GRADLE_HOME      
      D:Gradlegradle-1.12-allgradle-1.12
    技术分享
    配置一下path(GRADLE_HOME只是作为一个根路径而已)
    技术分享

    新建一个 gradle-repo文件夹配置环境变量

      GRADLE_USER_HOME

      D:Gradlegradle-repo

    技术分享

    测试gradle环境是否配置成功。

    在命令提示符中输入:gradle -version

    技术分享

    出现如上图结果,表示gradle配置成功。

    二.使用gradle进行打包

    1.查看需要打包的项目中的gradle.build文件(默认生成的文件)并添加相关脚本代码

    buildscript {
     //buildscript中的声明是gradle脚本自身需要使用的资源。
     //可以声明的资源包括依赖项、第三方插件、maven仓库地址等
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:0.12.+'
        }
    }
    apply plugin: 'android'
    //在build.gradle文件中直接声明的依赖项、仓库地址等信息是项目自身需要的资源
    dependencies {
        compile fileTree(dir: 'libs', include: '*.jar')
    }
    android {
        compileSdkVersion 19
        buildToolsVersion "19.1.0"
        sourceSets {
            main {
                manifest.srcFile 'AndroidManifest.xml'
                java.srcDirs = ['src']
                resources.srcDirs = ['src']
                aidl.srcDirs = ['src']
                renderscript.srcDirs = ['src']
                res.srcDirs = ['res']
                assets.srcDirs = ['assets']
            }
            // Move the tests to tests/java, tests/res, etc...
            instrumentTest.setRoot('tests')
            // Move the build types to build-types/<type>
            // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
            // This moves them out of them default location under src/<type>/... which would
            // conflict with src/ being used by the main source set.
            // Adding new build types or product flavors should be accompanied
            // by a similar customization.
            debug.setRoot('build-types/debug')
            release.setRoot('build-types/release')
        }
       
        lintOptions {
         abortOnError false
       }
     
     ////////////////////以上代码打出了最简单的包,一般情况下生成了两个包////////////////////
     //*-debug-unaligned.apk:未进行zipAlign优化的apk包
     //*-release-unsigned.apk:未签名的apk包
     //以上两种包都不是正式所需要的包,添加下面代码打出签名包
     
        signingConfigs {
       myConfig {
            //绝对路径和相对路径都可以
             storeFile file("E:\sjjywork\key\key4VipOneToOne\JyVipKey.keystore")
            storePassword "sjjy,vip"
            keyAlias "jiayuan_vip_key"
            keyPassword "sjjy,vip"
       }
      }
     buildTypes{
          release {
          //1.添加签名
          signingConfig  signingConfigs.myConfig
          //2.runProguard 执行混淆代码
          runProguard true
          //混淆规则文件
           proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
          }
     }
       
       //添加了上述代码之后,打出了已经签名的apk:其中xxx-release-unaligned.apk是签名为进行zipAligned优化的包
       //xxx-release.apk是签名和zipAlign优化过的包
       //添加混淆代码的执行代码如上第二步,就可以实现打出混淆包
       
       //下面的代码开始打批量包
       
       productFlavors {
         GooglePlay{
          //替换manifest文件中的占位符(placeHolder)
            manifestPlaceholders = [UMENG_CHANNEL_VALUE:"GooglePlay"]
         }
         Store360{
            manifestPlaceholders = [UMENG_CHANNEL_VALUE:"Store360" ]  
         }
         //在下面继续添加不同渠道的渠道代码
     }
     //通过以下方式是批量的设置
    // productFlavors.all { flavor ->
      //  flavor.manifestPlaceholders = [ UMENG_CHANNEL_VALUE:name ]
      //}
    }
    tasks.withType(Compile) { options.encoding = "UTF-8" }

    在这个文件中手动添加的代码都已经做了详细的注释。
     
    2.manifest中添加友盟统计的key和渠道代码(关于友盟统计的key的获取和添加,直接参考友盟统计的文档,不多做解释)
    打渠道包的目的是什么?为什么要打渠道包?这个可以见<<1.0apk批量打包认知>>
    得到的结论,是要做统计。上面的文件中,使用了友盟统计。
    此时需要在manifest.xml添加如下代码:
    <!-- 渠道id,key直接使用umeng的,方便接入umeng sdk -->
            <meta-data android:name="UMENG_APPKEY" android:value="YOUR_APP_KEY" ></meta-data>
            <!--配置placeHolder(占位符),用于多渠道打包的时候替换-->
            <meta-data
                android:name="UMENG_CHANNEL"
                android:value="${UMENG_CHANNEL_VALUE}" />

    打批量包的时候,主要使用到的placeHolder:${UMENG_CHANNEL_VALUE} 清单文件中的一个占位符。
    在批量打包的过程批量替换这个UMENG_CHANNEL_VALUE这个字段生成不同的apk包。
     
    3.正式执行批量打包
    在控制台中,进入项目所在的目录,执行gradle clean,gradle  build。如果没有报错,将打包成功
    如下图:gradle clean
    技术分享
    报错的原因:注释和代码之间添加空行。因为对这个脚本语言不太熟悉,所以不明具体原因。
    执行gradle build
    技术分享
    到此整个批量打包的过程就完美结束。
    刷新项目文件夹看看打出的包:
    其中-项目名称-渠道-release.apk就是最终我们所需的渠道apk。
    技术分享
    整个批量打包的过程大概十几分钟就搞定了。但是如果对这里面的打包过程是不是还存在很多疑惑。
    推荐看如下几篇文章.
     
    ①自动生成的gradle.build文件 直接进行打包会生成那些包?各种不同的包,有什么区别?
    参见2.1 gradle打包blog
    ②zipAlign优化是什么意思?
    参见2.4
    ③lint工具是做什么用的?
    参见2.5
    ④配置和打包的全过程大概十多分钟。但是如果出现报错,可就要耗费时间了。
    常见的报错参考以下文章:
    参见2.3gradle打包遇到的错误

    至此算是打包的所有流程真正的结束了。加入统计功能的代码,直接根据友盟统计的文档添加相应位置的代码就可以了。

    以上参见部分,未完待续....

  • 相关阅读:
    小w的喜糖(candy)
    亚瑟王(arthur)
    Bajtman i Okrągły Robin
    Bajtman i Okrągły Robin
    网络流模板
    网络流模板
    觉醒力量 (hidpower)
    觉醒力量 (hidpower)
    E-card
    E-card
  • 原文地址:https://www.cnblogs.com/xgjblog/p/4599381.html
Copyright © 2011-2022 走看看