里面的Channel_ID就是渠道标示。我们的目标就是在编译的时候这个值能够自动变化。第一步 在AndroidMani_./gradlew assembl">
当前位置:   article > 正文

Gradle多渠道打包_./gradlew assemblerelease

./gradlew assemblerelease

转自:https://www.cnblogs.com/wangziqiang/p/4720391.html

友盟多渠道打包

废话不多说,以友盟统计为例,在AndroidManifest.xml里面会有这么一段:

  1. <meta-data
  2. android:name="UMENG_CHANNEL"
  3. android:value="Channel_ID" />

里面的Channel_ID就是渠道标示。我们的目标就是在编译的时候这个值能够自动变化。

  • 第一步 在AndroidManifest.xml里配置PlaceHolder
  1. <meta-data
  2. android:name="UMENG_CHANNEL"
  3. android:value="${UMENG_CHANNEL_VALUE}" />
  • 第二步 在build.gradle设置productFlavors
  1. android {
  2. productFlavors {
  3. xiaomi {
  4. manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
  5. }
  6. _360 {
  7. manifestPlaceholders = [UMENG_CHANNEL_VALUE: "_360"]
  8. }
  9. baidu {
  10. manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
  11. }
  12. wandoujia {
  13. manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
  14. }
  15. }
  16. }

或者批量修改

  1. android {
  2. productFlavors {
  3. xiaomi {}
  4. _360 {}
  5. baidu {}
  6. wandoujia {}
  7. }
  8. productFlavors.all {
  9. flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
  10. }
  11. }

很简单清晰有没有?直接执行 ./gradlew assembleRelease , 然后就可以静静的喝杯咖啡等待打包完成吧。

assemble结合Build Variants来创建task

上一篇博客介绍了 assemble 这个命令,会结合 Build Type 创建自己的task,如:

  • ./gradlew assembleDebug

  • ./gradlew assembleRelease

除此之外 assemble 还能和 Product Flavor 结合创建新的任务,其实 assemble 是和 Build Variants 一起结合使用的,而 Build Variants = Build Type + Product Flavor , 举个例子大家就明白了:

如果我们想打包wandoujia渠道的release版本,执行如下命令就好了:

  • ./gradlew assembleWandoujiaRelease

如果我们只打wandoujia渠道版本,则:

  • ./gradlew assembleWandoujia

此命令会生成wandoujia渠道的Release和Debug版本

同理我想打全部Release版本:

  • ./gradlew assembleRelease

这条命令会把Product Flavor下的所有渠道的Release版本都打出来。

总之,assemble 命令创建task有如下用法:

  • **assemble**: 允许直接构建一个Variant版本,例如assembleFlavor1Debug。

  • **assemble**: 允许构建指定Build Type的所有APK,例如assembleDebug将会构建Flavor1Debug和Flavor2Debug两个Variant版本。

  • **assemble**: 允许构建指定flavor的所有APK,例如assembleFlavor1将会构建Flavor1Debug和Flavor1Release两个Variant版本。

完整的gradle脚本

最后福利大放送,来一份我在项目中使用的完整的gradle文件配置:

  1. apply plugin: 'com.android.application'
  2. def releaseTime() {
  3. return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
  4. }
  5. android {
  6. compileSdkVersion 21
  7. buildToolsVersion '21.1.2'
  8. defaultConfig {
  9. applicationId "com.boohee.*"
  10. minSdkVersion 14
  11. targetSdkVersion 21
  12. versionCode 1
  13. versionName "1.0"
  14. // dex突破65535的限制
  15. multiDexEnabled true
  16. // 默认是umeng的渠道
  17. manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng"]
  18. }
  19. lintOptions {
  20. abortOnError false
  21. }
  22. signingConfigs {
  23. debug {
  24. // No debug config
  25. }
  26. release {
  27. storeFile file("../yourapp.keystore")
  28. storePassword "your password"
  29. keyAlias "your alias"
  30. keyPassword "your password"
  31. }
  32. }
  33. buildTypes {
  34. debug {
  35. // 显示Log
  36. buildConfigField "boolean", "LOG_DEBUG", "true"
  37. versionNameSuffix "-debug"
  38. minifyEnabled false
  39. zipAlignEnabled false
  40. shrinkResources false
  41. signingConfig signingConfigs.debug
  42. }
  43. release {
  44. // 不显示Log
  45. buildConfigField "boolean", "LOG_DEBUG", "false"
  46. minifyEnabled true
  47. zipAlignEnabled true
  48. // 移除无用的resource文件
  49. shrinkResources true
  50. proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  51. signingConfig signingConfigs.release
  52. applicationVariants.all { variant ->
  53. variant.outputs.each { output ->
  54. def outputFile = output.outputFile
  55. if (outputFile != null && outputFile.name.endsWith('.apk')) {
  56. // 输出apk名称为boohee_v1.0_2015-01-15_wandoujia.apk
  57. def fileName = "boohee_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
  58. output.outputFile = new File(outputFile.parent, fileName)
  59. }
  60. }
  61. }
  62. }
  63. }
  64. // 友盟多渠道打包
  65. productFlavors {
  66. wandoujia {}
  67. _360 {}
  68. baidu {}
  69. xiaomi {}
  70. tencent {}
  71. taobao {}
  72. ...
  73. }
  74. productFlavors.all { flavor ->
  75. flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
  76. }
  77. }
  78. dependencies {
  79. compile fileTree(dir: 'libs', include: ['*.jar'])
  80. compile 'com.android.support:support-v4:21.0.3'
  81. compile 'com.jakewharton:butterknife:6.0.0'
  82. ...
  83. }

 

 

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

apply plugin: 'com.android.application'

 

def releaseTime() {

    return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))

}

 

android {

    compileSdkVersion 21

    buildToolsVersion '21.1.2'

 

    defaultConfig {

        applicationId "com.boohee.*"

        minSdkVersion 14

        targetSdkVersion 21

        versionCode 1

        versionName "1.0"

         

        // dex突破65535的限制

        multiDexEnabled true

        // 默认是umeng的渠道

        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng"]

    }

 

    lintOptions {

        abortOnError false

    }

 

    signingConfigs {

        debug {

            // No debug config

        }

 

        release {

            storeFile file("../yourapp.keystore")

            storePassword "your password"

            keyAlias "your alias"

            keyPassword "your password"

        }

    }

 

    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名称为boohee_v1.0_2015-01-15_wandoujia.apk

                        def fileName = "boohee_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"

                        output.outputFile = new File(outputFile.parent, fileName)

                    }

                }

            }

        }

    }

 

    // 友盟多渠道打包

    productFlavors {

        wandoujia {}

        _360 {}

        baidu {}

        xiaomi {}

        tencent {}

        taobao {}

        ...

    }

 

    productFlavors.all { flavor ->

        flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]

    }

}

 

dependencies {

    compile fileTree(dir: 'libs', include: ['*.jar'])

    compile 'com.android.support:support-v4:21.0.3'

    compile 'com.jakewharton:butterknife:6.0.0'

    ...

}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/285482?site
推荐阅读
相关标签
  

闽ICP备14008679号