為Android應用增加渠道資訊 自動化不同渠道的打包過程
為什麼需要在應用程式中增加渠道資訊?
Android應用的釋出需要面對各種各樣的市場,我們稱之為渠道。有的時候,我們需要知道應用是從哪個渠道下載的。比如,我們可能需要統計哪些市場帶來的使用者量比較大。再比如,我們可能有一些盈利需要和具體的渠道進行分成。這些都是統計渠道的資訊。
一般如何在應用中加入渠道資訊?
為了統計渠道資訊,就不得不在程式的某個地方加入渠道的資訊,然後針對不同的渠道打不同的包。一般可以在Manifest檔案中加入渠道編號,而不直接寫在程式碼中。這樣做的好處是,可以針對不同渠道,自動化去修改Manifest檔案中的渠道編號,然後自動為該渠道打包。
Manifest檔案支援Meta Data標籤,建議使用這種自定義標籤。例如下面的檔案片段。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="X" android:versionName="X.X.X" package="com.XXX"> …… <application android:icon="@drawable/icon" android:label="@string/app_name"> …… <meta-data android:name="CHANNEL" android:value="C_001" /> </application> </manifest> |
在這段程式碼示例中,我們在Application節點下增加了一個meta-data標籤,名稱是CHANNEL,值是C_001,是我們規定的一個渠道的編號。
為不同的渠道打包,就要手工或者自動化修改C_001成為C_002、C_003等等其它我們定義的渠道編號,然後再打不同的包。
程式如何讀取打包的渠道編號?
在程式程式碼中,可以讀取Manifest檔案中定義的meta-data。以下為程式碼例項。
public static String getChannelCode(Context context) { String code = getMetaData(context, "CHANNEL"); if (code != null) { return code; } return "C_000"; }
private static String getMetaData(Context context, String key) { try { ApplicationInfo ai = context.getPackageManager().getApplicationInfo( context.getPackageName(), PackageManager.GET_META_DATA); Object value = ai.metaData.get(key); if (value != null) { return value.toString(); } } catch (Exception e) { // } return null; } |
如何自動化打包過程?
我們想要自動化針對不同渠道打不同包的過程,有兩種情況。一種是有原始碼的情況,一種是沒有原始碼只有APK檔案的情況。
有原始碼的情況。
有原始碼的情況比較簡單。我們可以使用自動化指令碼工具進行打包,比如使用Ant。
使用Ant打包,有兩個關鍵問題:一個是要在Ant中支援For迴圈,以自動做多次打包動作;一個是如何能夠在Ant中修改Manifest檔案,以支援不同的市場。只要解決了這兩個關鍵問題,配合Ant的基本功能,就能實現我們的要求了。
1. 在Ant中支援迴圈
在Ant的核心包裡沒有相關的For迴圈的Task,要下載相應的擴充套件包。可以使用開源的Ant-contrib包。
下載地址:http://ant-contrib.sourceforge.net/
下載完成後,把ant-contrib裡的lib包複製到安裝好的Ant庫apache-ant-XXX\lib下面,就可以使用了。
具體如何使用,可以參考ant-contrib的官方網站。
2. 在Ant中修改Manifest檔案
利用 Ant 擴充套件任務所提供的 <replaceRegExp> 任務,還可以實現基於正規表示式的替換。
例如,要將AndroidManifest.xml檔案中的行首“C_001”字串替換為“C_002”,可以使用如下Ant指令碼:
<replaceregexp
file="AndroidManifest.xml"
byline="true"
match="C_001 "
replace="C_002"
/>
<replaceRegExp> 任務很強大,這只是一個簡單的例子。
只有APK檔案的情況。
如果沒有原始碼,只有APK檔案,事情相對就稍微複雜一些了。我們知道有一個開源的APKTOOL,可以對APK檔案進行反編譯,或者重新打包。具體的請參考APKTOOL的官方檔案。
有了APKTOOL的幫助,就可以有一個基本思路。
1. 先使用APKTOOL對APK檔案進行反編譯,反編譯出來資原始檔和AndroidManifest.xml檔案。
2. 使用指令碼程式碼修改AndroidManifest.xml檔案中的渠道ID文字。
3. 使用APKTOOL重新打包成APK檔案。
4. 使用jarsigner工具為APK檔案簽名。
只要反覆重複2-4步驟,即可對不同的渠道打出不同的APK安裝包。
根據這個思路,具體的實現就相對簡單了。可以寫成一個BAT指令碼檔案,也可以寫成Java應用程式。
---------------------------------------------------------------------------
GL(arui319)
http://blog.csdn.net/arui319
<本文可以轉載,但是請保留以上作者資訊。謝謝。>
相關文章
- Android多渠道打包Android
- Android 多渠道打包配置Android
- 360加固+美團walle多渠道自動化打包
- 自動化瓦力多渠道打包python指令碼Python指令碼
- Walle —— Android多渠道打包神器Android
- Flutter 多環境、多渠道自動打包Flutter
- Android Gradle指令碼解決美團多渠道打包再加固渠道資訊丟失問題AndroidGradle指令碼
- android gradle 多渠道打包小結AndroidGradle
- Android美團多渠道打包Walle整合Android
- Android 多渠道打包開發記錄Android
- Android多渠道打包相關介紹Android
- 多渠道打包
- 營銷自動化與傳統營銷渠道(簡訊和郵件)有何不同?
- Android 詳解Gradle(3.1.4)實現多渠道打包AndroidGradle
- Gradle多渠道打包(動態設定App名稱,應用圖示,替換常量,更改包名,變更渠道)GradleAPP
- jenkins+gitlab + 蒲公英實現 android 應用自動化打包分發JenkinsGitlabAndroid
- 賦能您的CRM,透過Infobip實現全渠道營銷自動化
- Flutter 多渠道打包實踐Flutter
- Android進階之Walle多渠道打包&Tinker熱修復Android
- Jenkins+Git+Walle+AndResGuard打造Android多渠道打包系統JenkinsGitAndroid
- Android持續整合:Jenkins+Gradle+360加固+多渠道打包AndroidJenkinsGradle
- Android 多渠道配置Android
- 使用Jenkins自動構建Android應用打包並上傳JenkinsAndroid
- Android 8 通知渠道(Notification Channels)Android
- 整合營銷下如何實現跨渠道自動化營銷
- 如何基於營銷自動化實現跨渠道整合營銷
- 自動增加 Android App 的版本號AndroidAPP
- 【Android Build】高效批量打渠道包AndroidUI
- Android library 釋出多渠道 AARAndroid
- Android官方多渠道方案詳解Android
- 通過unity Distribution Portal釋出華為渠道的遊戲Unity遊戲
- 紡織服裝行業渠道商管理平臺實現渠道資訊透明,提高銷售轉化效率行業
- Android 8.0 原始碼分析 (三) 應用程式程式建立到應用程式啟動的過程Android原始碼
- 這應該是最全的Jenkins Android自動打包構建教程JenkinsAndroid
- Python的iOS自動化打包PythoniOS
- Android APK打渠道包實施方案AndroidAPK
- 帶你瞭解騰訊開源的多渠道打包技術 VasDolly原始碼解析原始碼
- Gradle多渠道打包的原理、實踐與輔助開發Gradle
- APP自動化測試過程概述APP