1. 程式人生 > >多版本、多環境、多渠道打包

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

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")