Gradle多渠道打包[umeng]

作者: GitOPEN | 来源:发表于2015-09-19 20:28 被阅读6327次

    转发请注明出处:
    安卓猴的博客(http://sunjiajia.com)


    前言

    国内Android应用市场品种太多,血统不纯,每次上线App都打包打到手软,上传上到吐血!好在我们有了Android studio和gradle,一条命令打包各种渠道版本App!

    正文

    Umeng多渠道

    我们在项目中会使用统计SDK,用的最流行的当属umeng了吧。这里我们就用友盟来说明。
    用了友盟的App的清单文件AndroidManifest.xml中都会写上meta-data,来区分不同的渠道:

    <meta-data
        android:name="UMENG_CHANNEL"
        android:value="Channel_ID" />
    

    1.将Channel_ID更改为${UMENG_CHANNEL_VALUE},如下:

    <meta-data
        android:name="UMENG_CHANNEL"
        android:value="${UMENG_CHANNEL_VALUE}" />
    

    2.在appbuild.gradle设置produceFlavors

      productFlavors {
        xiaomi {
          manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
        }
        qihoo {
          manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qihoo"]
        }
        baidu {
          manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
        }
        wandoujia {
          manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
        }
        qq {
          manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qq"]
        }
      }
    

    3.来看看我在项目中使用的build.gradle文件内容:

    apply plugin: 'com.android.application'
    
    def releaseTime() {
      return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
    }
    
    android {
      compileSdkVersion 23
      buildToolsVersion "23.0.0"
    
      defaultConfig {
        // 这里的applicationId根据自己的替换
        applicationId "com.sunjiajia.xxxxx"
        minSdkVersion 14
        targetSdkVersion 22
        versionCode 1
        versionName "0.0.1"
        multiDexEnabled true //dex突破65535限制
        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng"]
      }
      lintOptions {
        disable 'MissingTranslation', 'ExtraTranslation'
        abortOnError false
      }
    
      signingConfigs {
        // /home/monkey/Projects/AndroidStudioProjects/debug.jks是签名文件所在全路径
    
        // debug时打包用的签名
        debug {
          keyAlias 'debug'
          keyPassword '123456'
          storeFile file('/home/monkey/Projects/AndroidStudioProjects/debug.jks')
          storePassword '123456'
        }
    
         // release时打包用的签名
        release {
          keyAlias 'monkey'
          keyPassword '123123'
          storeFile file('/home/monkey/Projects/AndroidStudioProjects/monkey.jks')
          storePassword '123123'
        }
      }
    
      buildTypes {
        debug {
          // 显示Log
          buildConfigField "boolean", "LOG_DEBUG", "true"
    
          versionNameSuffix "-debug"
          minifyEnabled false
          zipAlignEnabled false
          shrinkResources false
          signingConfig signingConfigs.debug
        }
        release {
          // 不显示Log
          buildConfigField "boolean", "LOG_DEBUG", "false"
    
          minifyEnabled true
          zipAlignEnabled true
          // 移除无用的resource文件
          shrinkResources true
    
          proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
          signingConfig signingConfigs.release
    
          applicationVariants.all { variant ->
            variant.outputs.each { output ->
              def outputFile = output.outputFile
              if (outputFile != null && outputFile.name.endsWith('.apk')) {
                // 输出apk名称为appname_v1.0_2015-09-15_09-57-58_wandoujia.apk
                // 下面的appname改为你自己的app name
                def fileName = "appname_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
                output.outputFile = new File(outputFile.parent, fileName)
              }
            }
          }
        }
      }
    
      packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LGPL2.1'
      }
    
      // 友盟多渠道打包
      productFlavors {
        xiaomi {
          manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
        }
        qihoo {
          manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qihoo"]
        }
        baidu {
          manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
        }
        wandoujia {
          manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
        }
        qq {
          manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qq"]
        }
      }
    }
    
    dependencies {
      testCompile 'junit:junit:4.12'
      compile 'com.android.support:appcompat-v7:23.0.1'
      compile 'com.android.support:design:23.0.1'
    }
    
    

    命令创建task

    1.进入项目的根目录:

    // 打包全部Debug版本
    ./gradlew assembleDebug
    
    // 打包全部Release版本
    ./gradlew assembleRelease
    

    2.assembleProduct Flavor 结合创建指定渠道的任务版本。例如:

    // 打包wandoujia渠道的Release版本和Debug版本
    ./gradlew assembleWandoujia
    
    // 打包wandoujia渠道的Release版本
    ./gradlew assembleWandoujiaRelease
    

    结语

    大家有什么问题,在下面留言就可以了,也可以关注我的微博@安卓猴,交流更及时。

    相关文章

      网友评论

      • 30aa8f21984f:请问 “./gradlew assembleMiRelease”打正式包报错 “Execution failed for task ':app:processMiReleaseResources'.> com.android.ide.common.process.ProcessException: Failed to execute aapt” 该如何解决?
      • 黑白咖:跳过
      • 99535fe857e5: applicationVariants.all这一块代码可以更改debug的包名吗?
      • cb550b8c966b:打包完了 APP 在哪里啊

      本文标题:Gradle多渠道打包[umeng]

      本文链接:https://www.haomeiwen.com/subject/kiobcttx.html