Gradle常見用法

修改生成的apk文件名和輸出路徑

android {
        ...
        //gradle3.0以上 配置自定義打包名稱,自定義apk輸出路徑
        applicationVariants.all { variant ->
            variant.outputs.all {
                def releaseTime = new Date().format('yyyy-MM-dd')
    //            修改outputFileName字段爲自定義的apk名字    格式爲:變體名稱+版本號+發佈時間+變體類型(release/debug).apk
                outputFileName = "${variant.baseName}_V${defaultConfig.versionName}_${releaseTime}_${variant.buildType.name}.apk"
    //            修改variant.getPackageApplication().outputDirectory字段爲自定義輸出路徑
                variant.getPackageApplication().outputDirectory = new File("../apks")
    
            }
        }
        ...
    }
複製代碼

打包結果 html

多渠道打包

變體

variant=productFlavors*buildTypesandroid

6=3*2spring

一共6個變體bash

android {
...
    flavorDimensions "channel"//3.0以上必須設置一個Dimensions
    productFlavors {//3個Flavor
        android_baidu { dimension "channel" } // 百度手機助手
        android360 { dimension "channel" }// 360手機助手
        android_tengxunyingyongbao { dimension "channel" }  // 騰訊應用寶

    }
     buildTypes {//2個類型
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    ...
}
複製代碼

menifest佔位符使用

多渠道打包,就是這個原理app

  1. 清單文件定義佔位符
<manifest>
    ...
    <application
        ...
        <meta-data
            android:name="CHANNEL_ID"
            android:value="${CHANNEL_ID_VALUE}" />
        <meta-data
            android:name="UMENG_CHANNEL"
            android:value="${UMENG_CHANNEL_VALUE}" />
            ...
    </application>
    ...
</manifest>

複製代碼

2.gradle裏:遍歷全部變體,給menifest裏的佔位符賦值gradle

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

Android 從AndroidManifest獲取meta-data

<meta-data>標籤能夠做爲子標籤,
能夠被包含在<activity>、<application> 、<service>和<receiver>中:
在不一樣位置有不一樣方法來獲取對應的值
複製代碼

更多查看:www.cnblogs.com/spring87/p/…ui

ApplicationInfo appInfo = this.getPackageManager()
                                 .getApplicationInfo(getPackageName(),
                         PackageManager.GET_META_DATA);
   String msg=appInfo.metaData.getString("Data_Name");
複製代碼

至此,定義變體、定義menifest佔位符,在gradle裏在不一樣的變體裏給佔位符賦值,就完成了多渠道打包,而友盟是經過(從AndroidManifest獲取meta-data原理)來獲取對應的渠道名,分類別進行統計this

相關文章
相關標籤/搜索