多版本、多环境、多渠道打包

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jhl122/article/details/80078766

关于多版本多环境的内容之前写了一篇博客可以参考:https://blog.csdn.net/jhl122/article/details/74540740

1,多版本需要注意的就是签名信息的配置:

signingConfigs {
        release {
            storeFile file('xxx.jks')//keystore的路径
            storePassword "xxxx"
            keyAlias "xx"
            keyPassword "xxxx"
        }
        debug {
        }
    }

2,多环境就是用到productFlavors,主要是实现不同环境下的应用可以同时在一个手机上运行,这时候就需要有不同的应用名称或者图标。

productFlavors {
        //meetyun开发环境
        meetyun {
            buildConfigField "int", "ENV_TYPE", "1"
            applicationId project.ext.applicationIdDebug
            manifestPlaceholders = [
                    app_name: project.ext.appNameDebug
            ]
        }
        //demo环境
        demo {
            buildConfigField "int", "ENV_TYPE", "2"
            applicationId project.ext.applicationIdCheck
            manifestPlaceholders = [
                    app_name: project.ext.appNameCheck
            ]
        }
        //生产环境
//        product {
//            buildConfigField "int", "ENV_TYPE", "3"
//            applicationId project.ext.applicationId
//            manifestPlaceholders = [
//                    app_name: project.ext.appNameProduct
//            ]
//        }
    }

并且需要在manifest文件中使用占位符{app_name}

 <application
        tools:replace="label"
        android:name="xxx"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="${app_name}"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

需要注意的是在编译的时候如果提示label的名称重复就需要加上tools:replace="label"参数。

不同的环境gradle都会根据productFlavors信息动态的生成BuildConfig文件:

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String APPLICATION_ID = "xxx";
  public static final String BUILD_TYPE = "debug";
  public static final String FLAVOR = "demo";
  public static final int VERSION_CODE = 3;
  public static final String VERSION_NAME = "00.00.03";
  // Fields from product flavor: demo
  public static final int ENV_TYPE = 2;
}

根据需求设置不同环境的类型:

public class EnvType {
    public static final int MEETYUN = 1;//meetyun开发环境
    public static final int DEMO = 2;//demo测试环境
    public static final int PRODUCT =3;//正式环境
}

其中ENV_TYPE就是我们在gradle.build中设置好的数值,我们可以根据这个数值来判断不同的环境,然后设置相对应的环境地址

 public static final String HTTP_MAIN = setChannel();
public static String setChannel() { 
        int envType = BuildConfig.ENV_TYPE;
        switch (envType) {
            case EnvType.MEETYUN:
                return "http://xx";
            case EnvType.DEMO:
                return "http://xxxx";
            default:
                return "http://xxxx";
        }
    }

此时基本上所有的配置都差不多完成了,这时候需要执行gradle命令,两种方法:第一种直接在Terminal中写命令“gradlew assemble”敲击回车,第二种是在as右侧Gradle projects中点击assemble任务执行。命令执行完毕之后会发现在outputs文件夹中已经打好包了


3,多渠道打包就是为了统计不同的应用市场即渠道的下载信息,所以一般来说就包括两方面,一个是不同渠道信息放入到apk文件中,第二方面就是将这个渠道信息返回给服务器用于统计,所以一般来说多渠道的打包就是针对第一种情况。我使用的多渠道打包工具是美团的walle,特点就是快。

具体的操作就不细说了github上面说的很详细,就是注意一点这个多渠道文件channel是自己创建添加的,不是它自动生成的。

 channelFile = new File("${project.getProjectDir()}/channel")


猜你喜欢

转载自blog.csdn.net/jhl122/article/details/80078766
今日推荐