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:\Gradle\gradle-1.12-all\gradle-1.12

配置一下path(GRADLE_HOME只是作为一个根路径而已)

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

  GRADLE_USER_HOME

  D:\Gradle\gradle-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 ""
        keyAlias ""
        keyPassword ""
   }
  }
 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
Gradle分步构建android应用
②zipAlign优化是什么意思?
参见2.4
zipAlign优化
③lint工具是做什么用的?
④配置和打包的全过程大概十多分钟。但是如果出现报错,可就要耗费时间了。
常见的报错参考以下文章:
参见2.3gradle打包遇到的错误

gradle打包错误汇总

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









  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在 Android 开发中,Gradle 是一个非常重要的构建工具,可以用来构建和打包 Android 应用程序。Gradle 插件是一种工具,可以扩展 Gradle 的功能,使其能够支持更多的功能。而多渠道打包是 Android 应用程序开发中非常重要的一个方面,它可以让我们将应用程序打包成不同的版本,并发布到不同的应用商店或市场上。 在 Android Studio 中,我们可以通过自定义 Gradle 插件来实现多渠道打包,具体步骤如下: 1. 创建 Gradle 插件项目 在 Android Studio 中创建一个新项目,选择 Gradle 插件项目模板。这将创建一个 Gradle 插件项目,并生成一些默认的代码和文件。 2. 实现多渠道打包 在插件项目中,我们需要实现多渠道打包的功能。这可以通过 Gradle 的 productFlavors 和 buildTypes 配置来实现。我们可以定义多个 productFlavors,并为每个 productFlavor 配置不同的参数,例如应用程序的包名、应用程序名称等。在 buildTypes 中,我们可以为每个 buildType 配置不同的参数,例如应用程序的版本号、是否开启混淆等。 3. 打包应用程序 在插件项目中,我们可以编写一个 Gradle 任务来实现应用程序的打包。这个任务可以使用 Gradle 提供的 assemble 任务来实现。我们可以为每个 productFlavor 和 buildType 配置不同的打包参数,并使用 Gradle 的 assemble 任务来生成应用程序的 APK 文件。 4. 发布应用程序 在插件项目中,我们可以编写一个 Gradle 任务来实现应用程序的发布。这个任务可以使用 Gradle 提供的 uploadArchives 任务来实现。我们可以为每个 productFlavor 和 buildType 配置不同的发布参数,并使用 Gradle 的 uploadArchives 任务将应用程序发布到不同的应用商店或市场上。 总的来说,自定义 Gradle 插件多渠道打包是 Android 应用程序开发中非常重要的一个方面。通过自定义 Gradle 插件,我们可以实现更加灵活和高效的应用程序打包和发布。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hymKing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值