一鍵快速切換開發環境以及多渠道打包

ChangeEnvironment

一鍵快速多渠道打包經常使用配置java

github.com/sky8650/Cha…android

關於打包

在開發客戶端項目的時候常常會遇到開發,測試,正式等環境的來回切換,從而須要切換接口的地址以及不一樣環境的配置!好比咱們須要判斷當前的環境是正式仍是開發環境以此來加載不一樣的推送ID!固然咱們能夠寫一個配置文件,每次打包時註釋掉不須要的代碼。 但這樣作經常會有如下幾個問題
  • 不安全,由於是手動註釋,不可避免的發生人爲的失誤git

  • 重複的工做,每次都要打開配置文件浪費時間github

  • 增長代碼量,並且不優雅api

配置環境幾乎是新建項目必作的工做,主要分爲如下幾個步驟
  • 配置manifest中的佔位符安全

  • 配置gradle的各類環境信息。例如是否須要混淆,讀取不一樣的簽名等bash

  • 配置多渠道打包app

  • 配置並讀取簽名文件信息學習

  • 經過代碼讀取環境信息並進行判斷測試

  • 輸出當前渠道環境下的apk文件

配置步驟

第一步:配置manifest中的佔位符

<meta-data
            android:name="server_mode"
            android:value="${SERVER_MODE}"/>
複製代碼

第二步:配置manifest中的環境信息

buildTypes {
        release {
            debuggable false//是否調試模式
            signingConfig signingConfigs.release//簽名配置
            zipAlignEnabled false//是否壓縮
            minifyEnabled false//是否混淆
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' manifestPlaceholders = [SERVER_MODE: "RELEASE"]//mainfest的佔位符
            buildapkName()
        }

        _test {
            debuggable true//是否調試模式
            signingConfig signingConfigs.release//簽名配置
            zipAlignEnabled false//是否壓縮
            minifyEnabled false//是否混淆
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' manifestPlaceholders = [SERVER_MODE: "TEST"]//mainfest的佔位符
            buildapkName()
        }
    }
複製代碼

第三步:配置多渠道打包(若是不須要多渠道打包,此步驟可省略)

//多渠道配置
    productFlavors {
        _360shouzhu {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "360"]
        }
        ali {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "ali"]
        }
        oppo {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "oppo"]
        }
        xiaomi {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
        }

    }
  // productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] }
複製代碼

第四步:配置並讀取簽名文件信息

signingConfigs {
        release {
            storeFile
            storePassword
            keyAlias
            keyPassword
        }

    }      
 //讀取簽名配置文件,爲保證安全配置文件可放在本地磁盤中
def getSigningProperties() {

    def propFile = file('signing.properties')
    if (propFile.canRead()) {
        def Properties props = new Properties()
        props.load(new FileInputStream(propFile))
        if (props != null && props.containsKey('STORE_FILE') && props.containsKey('STORE_PASSWORD') &&
                props.containsKey('KEY_ALIAS') && props.containsKey('KEY_PASSWORD')) {
            android.signingConfigs.release.storeFile = file(props['STORE_FILE'])
            android.signingConfigs.release.storePassword = props['STORE_PASSWORD']
            android.signingConfigs.release.keyAlias = props['KEY_ALIAS']
            android.signingConfigs.release.keyPassword = props['KEY_PASSWORD']

        } else {
            println 'signing.properties found but some entries are missing'
            android.buildTypes.release.signingConfig = null
        }
    } else {
        println 'signing.properties not found'
        android.buildTypes.release.signingConfig = null
    }
} 
複製代碼

第五步:讀取環境信息,並進行判斷

/** * 獲取metaData * @param context * @param metaKey * @return */
    public static String getMetaValue(Context context, String metaKey) {
        Bundle metaData = null;
        String apiKey = null;
        if (context == null || metaKey == null) {
            return null;
        }
         ''''''省略
        return apiKey;
    }

   /** * 獲取當前的環境 * @param context */
    public static void init( Context context) {
        USE_SERVER_MODE = Enum.valueOf(Mode.class, DeviceUtil.getMetaValue(context, "server_mode"));
    }
複製代碼

第六步: 輸出apk文件

//生成文件的名稱
def buildapkName(){
  android.applicationVariants.all { variant ->
       variant.outputs.all { output ->
           if (outputFile != null && outputFile.name.endsWith('.apk')) {
               def fileName = "evn_${variant.productFlavors[0].name}_${variant.buildType.name}.apk"
               outputFileName = new File(fileName)
           }
       }
     }
  }
複製代碼

附命令行打包

//oppo渠道下的正式環境
gradlew assembleoppoRelease
//oppo渠道下的測試環境
gradlew assembleoppo_test
//全渠道正式包
gradlew assembleRelease
//全渠道測試包
gradlew assemble_test
複製代碼

至此,若是再須要打不一樣的環境安裝包只須要一行命令便可完成

全文純手工編寫,若是您感受對您有幫助請動動小手點個贊哦!若是有任何疑問或者意見可在下方留言


+qq羣457848807:。獲取以上高清技術思惟圖,以及相關技術的免費視頻學習資料

相關文章
相關標籤/搜索