1、packerNg 式打包
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、網(wǎng)站空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、安吉網(wǎng)站維護(hù)、網(wǎng)站推廣。
Android應(yīng)用使用的APK文件就是一個(gè)帶簽名信息的ZIP文件,根據(jù) ZIP文件格式規(guī)范,每個(gè)ZIP文件的最后都必須有一個(gè)叫 Central Directory Record 的部分,這個(gè)CDR的最后部分叫”end of central directory record”,這一部分包含一些元數(shù)據(jù),它的末尾是ZIP文件的注釋。注釋包含Comment Length和File Comment兩個(gè)字段,前者表示注釋內(nèi)容的長(zhǎng)度,后者是注釋的內(nèi)容,正確修改這一部分不會(huì)對(duì)ZIP文件造成破壞,利用這個(gè)字段,我們可以添加一些自定義的數(shù)據(jù),PackerNg項(xiàng)目就是在這里添加和讀取渠道信息。
2、META-INF 式打包
可以只修改已有apk的渠道標(biāo)志,快,批量,原理簡(jiǎn)單
3、Gradle 打渠道包
基本原理是利用Gradle的 manifest merger 功能
這個(gè)功能的主要用途是能夠在運(yùn)行時(shí)替換AndroidManifest.xml里面的內(nèi)容
第一步 在AndroidManifest.xml里配置meta-data
android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" /> 第二步 在模塊的build.gradle文件的defaultConfig里加上PlaceHolder定義 android { ... defaultConfig { ... manifestPlaceholders = [ UMENG_CHANNEL_VALUE:"default_channel" ] } } 這里的作用有兩個(gè),一是聲明UMENG_CHANNEL_VALUE是可替換值的PlaceHolder,二是為其設(shè)置默認(rèn)值。 第三步 在模塊的build.gradle文件里添加ProductFlavors配置 android { productFlavors { default_channel{} wandoujia{} _360{} yingyongbao{} xiaomi{} baidu{} huawei{} jifeng{} } productFlavors.all { flavor -> flavor.manifestPlaceholders = [ UMENG_CHANNEL_VALUE:name ] } } 第四步 一次生成所有渠道包 到工程目錄下運(yùn)行g(shù)radlew assembleRelease。 可以看到這次編譯一共產(chǎn)生了對(duì)應(yīng)productFlavors段的不同渠道包。 可以反編譯每個(gè)apk,打開AndroidManifest.xml看看,發(fā)現(xiàn)友盟這一段的配置已經(jīng)相應(yīng)的被修改了。 android:name="UMENG_CHANNEL" android:value="default_channel" /> 還可以利用Gradle生成單獨(dú)的渠道包 如 gradlew assembleWandoujiaRelease
文章標(biāo)題:android多渠道打包
標(biāo)題來(lái)源:http://weahome.cn/article/gojcjs.html