您好,登錄后才能下訂單哦!
對于安卓程序猿朋友來說,每當發布新版本的APP,均會分發到各大應用市場,比如騰訊應用寶,豌豆莢和360手機助手等。為了讓程序猿同志們更好的區分不同的應用市場,掌握各市場APP發展狀況,為了更多體現世界對程序猿的關愛,我們的多渠道包誕生啦。
Android多渠道打包機制的原理為:向分發到不同市場的APP中打入對應的市場標識,APP運行時獲取到該標識信息,并將信息發送到指定的統計服務器,用于跟蹤記錄各個市場中APP的發展情況。
通過制作多渠道包,程序猿朋友們可以掌握第一手應用市場動態,隨時向老板匯報,制定相應的需求策略,出任總經理,擔任CEO,贏取白富美,從此走上人生巔峰。
Android中添加渠道信息,比較常用的有三種,分別為:
AndroidManifest.xml中添加渠道信息
META-INF目錄下添加渠道信息
APK文件的注釋字段中添加渠道信息
例如,對于渠道Goapk_Market,三種渠道信息的添加方式如下:
1. AndroidManifest.xml中添加渠道信息。
渠道信息將被添加到application結點下的子結點meta-data中,如下:
<application
android:icon="@7F03000A"
android:label="@7F060014"
android:theme="@7F090083">
<meta-data
android:name="Goapk_Market"
android:value="Goapk">
</meta-data>
該種方式是目前應用最廣的一種,比如友盟統計sdk,騰訊統計sdk等。其中name和value可以自由定義,比較靈活。APP可以利用系統API,方便的獲取渠道信息,示例代碼如下:
ApplicationInfo appInfo = this.getPackageManager().getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA);
String channel = appInfo.metaData.getString("Goapk_Market");
2. META-INF目錄下添加渠道信息。
渠道信息將被添加到APP的META-INF目錄下,如下:
該種方式也是較常用的方式之一,利用了META-INF目錄的優勢,可以在APP簽名后,再添加渠道信息。相對第一種方式,如何獲取渠道信息相對麻煩些,示例代碼如下:
public static String getChannel(Context context) {
ApplicationInfo appinfo = context.getApplicationInfo();
String sourceDir = appinfo.sourceDir;
System.out.println("channel="+ sourceDir);
String ret = "";
ZipFile zipfile = null;
try {
zipfile = new ZipFile(sourceDir);
Enumeration<?> entries = zipfile.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = ((ZipEntry) entries.nextElement());
String entryName = entry.getName();
if (entryName.startsWith("META-INF") && entryName.contains("渠道名稱_")) {
ret = entryName;
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (zipfile != null) {
try {
zipfile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
String[] split = ret.split("_");
if (split != null && split.length >= 2) {
returnsplit[split.length-1];
} else {
return "";
}
}
3. APP文件的注釋字段中添加渠道信息。
該種方式利用了APK本身是一種zip包的特點,在zip的注釋字段中添加渠道信息,并提供了gradle插件。其中數據格式定義如下:
而添加的渠道信息如下所示:
該種方式較前兩種方式實現相對麻煩些,特別是渠道信息的獲取需要讀取整個APK,解析注解,獲取渠道信息,另外就是兼容性不是很好。
目前,前兩種渠道包制作方式應用較廣。我們的程序猿大兄弟考慮群眾需求,為大家介紹基于前兩種打包方式的快速批量多渠道打包工具實現
1、利用Gradle Flavor實現快速批量打包
該方案充分利用了gradle的特性,具體為根據需求在build.gradle文件中配置productFlavor,并添加必要的代碼和資源文件,實現快速多渠道打包,比較靈活,但是有一定的局限性,完全依賴于gradle,不太適合自動化的構建過程。
該方案的具體過程為:
a、在AndroidManifest.xml里設置動態渠道變量。
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}">
b、在build.gradle設置productFlavors。
android {
productFlavors {
qh460 {}
baidu {}
wandoujia {}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
通過上面的配置,可以達到一次編譯就能產生多個具有自己特性配置的版本。
2、利用python腳本實現快速批量打包
該方案主要應用在第二種渠道包制作方式中,通過向簽名后APP的META-INF目錄下寫入渠道文件,實現打渠道包。該方案利用了腳本的靈活性,適合批量打包,非常方便,但是經過測試,偶爾會出現生成的渠道包損壞的情況。典型代表就是美團客戶端的高效多渠道打包,萬能的互聯網向我們展示了此種方法的詳細過程,當然也歡迎感興趣的大妹子在后臺與我深夜互動。
3、快速批量多渠道打包工具
為了便于自動化的集成,網易云捕精英大隊開發了多渠道打包工具,該工具主要基于前兩種渠道包制作方式,實現快速批量多渠道包的生成。
命令行下,運行:java -jar makechannels.jar 查看版本號與使用方法:
NetEase makechannel 1.0
Usage:
java -jar makechannels.jar -apk input.apk -config channel.txt [-flag manifest|meta] [-out outdir]
[-encoding utf-8|utf-8bom|gbk|unicode|ansi|utf-16be]
參數說明
-apk必填,后跟需要多渠道打包的APK全路徑。-config必填,后跟渠道配置文件,請參考渠道配置文件channel.txt說明。-flag可選,后跟渠道方式,共有兩種方式,分別為:
1、manifest,表示在AndroidManifest.xml中添加渠道信息。
2、meta,表示在app的META-INF目錄下,添加渠道信息。
不填,則默認使用方式一。-out可選,輸出目錄。不填,則默認為輸入APK同級目錄下的channels。-encoding可選,配置文件編碼格式,該模式僅支持參數中列出的編碼格式。不填,則根據配置文件自動判斷編碼格式。
注:多渠道打包后,需要重新簽名。可以從http://apk.aq.163.com/#download下載極速簽名工具進行批量快速簽名。
網易云加密默認集成了該工具,用戶可以將工具拷貝出來,單獨使用。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。