android獲取友盟渠道名的3個注意點(diǎn)
實(shí)現(xiàn)做批量打包之后,區(qū)分版本就不用靠在代碼里寫常量的方法來實(shí)現(xiàn)了,可以通過渠道名稱來區(qū)分版本并以此作為參數(shù)上傳給服務(wù)器
批量開發(fā)就不講了,一般搜搜都有
一般獲取渠道名稱的通用方法:
?/**
?????*?獲取application中指定的meta-data
?????*?@return?如果沒有獲取成功(沒有對應(yīng)值,或者異常),則返回值為空
?????*/
????public?static?String?getAppMetaData(Context?ctx,?String?key)?{
????????if?(ctx?==?null?||?TextUtils.isEmpty(key))?{
????????????return?null;
????????}
????????String?resultData?=?null;
????????try?{
????????????PackageManager?packageManager?=?ctx.getPackageManager();
????????????if?(packageManager?!=?null)?{
????????????????ApplicationInfo?applicationInfo?=?packageManager.getApplicationInfo(ctx.getPackageName(),?PackageManager.GET_META_DATA);
????????????????if?(applicationInfo?!=?null)?{
????????????????????if?(applicationInfo.metaData?!=?null)?{
????????????????????????resultData?=?applicationInfo.metaData.getString(key);
????????????????????}
????????????????}
?
????????????}
????????}?catch?(PackageManager.NameNotFoundException?e)?{
????????????e.printStackTrace();
????????}
?
????????return?resultData;
????}這里要補(bǔ)充說明3點(diǎn):
1.從上面的代碼里可以看到,獲取信息是從applicationinfo里面獲取的,所以批量開發(fā)要寫的meta-data是要寫到manifest的application里面的
2.獲取渠道名稱需要的參數(shù)key,是meta-data里的name
3.也是很重要的一點(diǎn),一般批量打包里需要在buildtypes里定義打出來的包的命名規(guī)范,這是網(wǎng)上找的一種方法:
//?自定義輸出配置
applicationVariants.all?{?variant?->variant.outputs.each?{?output?->def?outputFile?=?output.outputFile
????????if?(outputFile?!=?null?&&?outputFile.name.endsWith('.apk'))?{
????????????//?輸出apk名稱為haibao_v1.0_wandoujia.apk
????????????def?fileName?=?"haibao_v${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk"
????????????output.outputFile?=?new?File(outputFile.parent,?fileName)
????????}
????}
}但是我測出來結(jié)果,用這種方法單獨(dú)打的渠道包的安裝包大小正常,可以安裝,但是批量打包出來的APK體積要小一些,并且安裝失敗
由于具體原因暫時找不到,我使用了另外一種方法:
//系統(tǒng)默認(rèn)命名,release是簽名版本,release-unsigned是未簽名版本 signingConfig?signingConfigs.release
這種方法批量打包打的渠道包的APK大小正常,可以安裝
貼一下buildtypes的完整代碼
buildTypes?{
????????release?{
????????????minifyEnabled?false
????????????proguardFiles?getDefaultProguardFile('proguard-android.txt'),?'proguard-rules.txt'
????????????//系統(tǒng)默認(rèn)命名,release是簽名版本,release-unsigned是未簽名版本
????????????signingConfig?signingConfigs.release
//????????????//?自定義輸出配置
//????????????applicationVariants.all?{?variant?->
//????????????????variant.outputs.each?{?output?->
//????????????????????def?outputFile?=?output.outputFile
//????????????????????if?(outputFile?!=?null?&&?outputFile.name.endsWith('.apk'))?{
//????????????????????????//?輸出apk名稱為haibao_v1.0_wandoujia.apk
//????????????????????????def?fileName?=?"haibao_v${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk"
//????????????????????????output.outputFile?=?new?File(outputFile.parent,?fileName)
//????????????????????}
//????????????????}
//????????????}
????????}




