美文网首页
gradle多渠道打包攻略

gradle多渠道打包攻略

作者: 混世小虾米 | 来源:发表于2018-04-28 11:49 被阅读18次

    随着android开发的日益成熟,以及国内应用市场的复杂化。应对每个市场独立发布单独渠道的APP的需求显然是当下每个andorid开发人员必备的一项技能。

       defaultConfig {
        applicationId "com.xue.gradledemo"
        minSdkVersion 23
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
    }
    

    这是一个默认的build.gradle中每个android app的默认属性。
    现在我们希望在debug和release中修改相应的默认属性则需要修改成这样

    buildTypes {
        release {
            versionCode 2
            versionName "2.0"
        }
        debug{
            versionCode 3
            versionName "3.0"
        }
    }
    

    这样我们再打包就会发现release的APP版本是2.0 而debug的版本是3.0。这只是一个最简单的情况,但实际中我们可能要打很多个上线的release版本这时我们就需要增加一个productFlavors

        productFlavors {
        haha {
            flavorDimensions "default"
            applicationId "com.xue.haha"
            versionCode 2
            versionName "2.0"
            resValue 'string', 'channel_value', 'HAHA'
            buildConfigField('String','channel_name','"haha"')
            manifestPlaceholders.put("META_CHANNEL","haha")
        }
    
        keke {
            flavorDimensions "default"
            applicationId "com.xue.keke"
            versionCode 3
            versionName "3.0"
            resValue 'string', 'channel_value', 'KEKE'
            buildConfigField('String','channel_name','"keke"')
            manifestPlaceholders.put("META_CHANNEL","keke")
        }
    }
    

    我分别解释一下每一行带表的意思,首先productFlavors里有 keke 和 haha两个对象,那就代表我们现在对应要打两个渠道的包。他们有各自的appid versioncode versonname 其中 resValue 方法代表的意思是自定义xml熟悉它会在/build/generate/对应渠道/values/ 下建立一个generate.xml文件


    gradle1.jpeg
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
    <!-- Automatically generated file. DO NOT MODIFY -->
    
    <!-- Values from product flavor: haha -->
    <string name="s" translatable="false">HAHA</string>
    
    </resources>
    

    buildConfigField则是对应在BuildConfig.java中增加对应的静态变量

    public final class BuildConfig {
      public static final boolean DEBUG =  Boolean.parseBoolean("true");
      public static final String APPLICATION_ID = "com.xue.haha";
      public static final String BUILD_TYPE = "debug";
      public static final String FLAVOR = "haha";
      public static final int VERSION_CODE = 2;
      public static final String VERSION_NAME = "2.0";
      // Fields from build type: debug
      public static final boolean Build_Type_Release = false;
      // Fields from product flavor: haha
     public static final String channel_name = "haha";
    }
    

    manifestPlaceholders.put是在AndroidManifest.xml中修改对应的<meta-data>

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

    ${}表示一个占位符
    其中manifestPlaceholders.put,buildConfigField,resValue也可以在buildTypes里对应debug release里进行配置,相同属性的优先级
    buildTypes> productFlavors>defaultConfig
    好了上面介绍的方法已经能基本满足我们的多渠道需求。但是我们想要更高级的定制比如我想每个渠道的appname也不一样要怎么做?
    那么我们就需要在main的同级目录下创建对应的渠道并创建与main相同的目录层级


    gradle2.jpeg

    然后再修改strings里对应的app_name就行了。

    gradle3.jpeg

    同样想修改Java文件也是一样的做法,这里我就不再给出例子。
    怎么样是不是很简单,希望这篇攻略能给你带来收获!

    相关文章

      网友评论

          本文标题:gradle多渠道打包攻略

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