android獲取友盟渠道名的3個(gè)注意點(diǎn)
實(shí)現(xiàn)做批量打包之后,區(qū)分版本就不用靠在代碼里寫(xiě)常量的方法來(lái)實(shí)現(xiàn)了,可以通過(guò)渠道名稱來(lái)區(qū)分版本并以此作為參數(shù)上傳給服務(wù)器
批量開(kāi)發(fā)就不講了,一般搜搜都有
一般獲取渠道名稱的通用方法:
?/** ?????*?獲取application中指定的meta-data ?????*?@return?如果沒(méi)有獲取成功(沒(méi)有對(duì)應(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ǔ)充說(shuō)明3點(diǎn):
1.從上面的代碼里可以看到,獲取信息是從applicationinfo里面獲取的,所以批量開(kāi)發(fā)要寫(xiě)的meta-data是要寫(xiě)到manifest的application里面的
2.獲取渠道名稱需要的參數(shù)key,是meta-data里的name
3.也是很重要的一點(diǎn),一般批量打包里需要在buildtypes里定義打出來(lái)的包的命名規(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) ????????} ????} }
但是我測(cè)出來(lái)結(jié)果,用這種方法單獨(dú)打的渠道包的安裝包大小正常,可以安裝,但是批量打包出來(lái)的APK體積要小一些,并且安裝失敗
由于具體原因暫時(shí)找不到,我使用了另外一種方法:
//系統(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) //????????????????????} //????????????????} //????????????} ????????}