Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android幾種常見的多渠道(批量)打包方式介紹

Android幾種常見的多渠道(批量)打包方式介紹

編輯:關於android開發

Android幾種常見的多渠道(批量)打包方式介紹


多渠道打包,主要是為了統計不同的渠道上包的下載數量,渠道越多,我們需要打的包數量越多,這個時候,我們沒法去使用單純的手動打包去一個一個的生成不同的渠道包,我們需要更高效的打包方式。

聲明渠道方式一:

通常我們區分渠道都是在我們manifest 文件的 application 用這樣來定義渠道信息:

 


然後在我們的Java 代碼中,我們通過以下方法來獲取渠道號:

 

 

/**
	 * 獲取Umeng渠道號
	 * 
	 * @param context
	 * @return 渠道號
	 */
	public static String getChannel(Context context) {
		String channel = "bbliveBYD";
		try {
			ApplicationInfo info = context.getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
			if (info != null && info.metaData != null) {
				String metaData = info.metaData.getString("UMENG_CHANNEL");
				if (!StringUtil.isBlank(metaData)) {
					channel = metaData;
				}
			}
		} catch (NameNotFoundException e) {
			e.printStackTrace();
		}
		return channel;
	}

可以使用這種聲明渠道號方式的打包方法有以下幾種:

 

1.友盟的打包工具:

 使用方式比較簡單,首先按照普通的方式單獨打一個簽名包,然後打開我們下載的打包工具,建議使用最新的v3.2 (修復了一些前面低版本的Bug)

\

點擊扳手的地方,進行我們應用簽名的配置

\

最下面給我的配置文件取個名字。然後保存。

接下來,將我們前面打的簽名包拖進 友盟打包工具的 加號這裡,等分析結束,點擊 一鍵打包即可。 這種方式 有的問題,可以看git上面的說明。

 

2 藍貝殼兒Eclipse插件打包。

還有一種打包方式,是 插件的形式 放在Eclipse 裡面的,叫 藍貝殼兒,是一個jar包,使用也相當方便,早期公司,多渠道的時候,我也是使用這種方式,優點是:安裝該插件後,只需要簡單配置,既可批量打包。

需要下載一個200kb的Eclipse插件。

 

Android開發輔助工具— “蘭貝殼兒” Eclipse插件使用指南

1.下載蘭貝殼兒Eclipse插件

2.安裝蘭貝殼兒插件,建立Android工程

3.使用配置文件、默認配置文件

4.使用”在資源管理器中打開”功能

5.使用”依賴更新”功能

6.使用”打包發布”功能

1.下載蘭貝殼兒Eclipse插件

http://www.orchidshell.com/

 

\

下載後解壓縮OrchidShell.rar

\

 

確認文件夾路徑為OrchidShell---eclipse---plugins

\

 

2.安裝蘭貝殼兒插件,建立Android工程

安裝Eclipse插件,將OrchidShell文件夾拷貝到Eclipse的dropins文件夾下後,啟動(重啟)Eclipse

\

 

建立Android工程

\

 

在工程上點擊右鍵可看到菜單“蘭貝殼兒”,說明安裝成功

\

 

3.使用”在資源管理器中打開”功能

點擊蘭貝殼兒菜單中的在資源管理器中打開菜單,可以將當前選中的資源所在的文件夾打開。

\

如果選中的資源是一個文件夾,那麼插件會直接打開這個文件夾

\

如果選中的資源是一個文件,那麼插件會打開文件的父文件夾,並且選中該文件

\

 

4.使用配置文件、默認配置文件

蘭貝殼兒使用xml作為插件配置文件,當工程中不存在配置文件,而插件的某些功能需要用到配置文件的時候,插件會新建一個默認的配置文件。

\

該配置文件引用了一個通用的安卓開發工具包。配置了一個簽名用的密鑰庫。你需要根據自己的實際情況修改這個配置文件。在下面兩個功能中,有詳細介紹。

5.使用”依賴更新”功能

 

點擊插件右鍵中的“依賴更新”菜單,可以對工程的第三方依賴jar包進行更新管理。

 

\

這裡使用的第三方jar包,使用maven管理jar包的組織形式

 

\

需要指出的是,這裡的jar包必須有一個統一的下載網站。該網站可以是任何一家maven庫或者maven庫鏡像。如果您自己有Team的服務器,當然也可以自己建一個Maven庫來管理常用的通用組件。

\

 

點擊菜單之後,會在Eclipse的控制台打出更新的過程。

\

注意,如果配置文件配置不正確,可能會報出一些錯誤提示,根據錯誤提示進行修改配置文件即可。

 

6.使用”打包發布”功能

點擊蘭貝殼兒菜單中的“打包發布”菜單,可以對工程按渠道分別打包,打包的過程中可以對apk文件進行自動簽名。

 

\

注意打包發布前,需要修改配置文件中對應的項目:

\

其中channels的keyname=””是指在你的AndroidManifest.xml文件中配置的Application級的的名稱。例如:

 

這裡使用的是友盟的統計SDK和機鋒網的統計SDK,所以名稱為“UMENG_CHANNEL,gfan_cpid”,你可以修改為你自己應用的統計SDK的渠道項目標識符,如果有多個,使用半角逗號隔開即可。

 

是對應於你要打包的每個渠道名稱,也就是統計SDK中渠道的標識符。對於寫在這裡的每個渠道,插件會自動為其修改meta-data中的value值,並且打包為一個apk文件。然後為這個apk文件進行簽名。

 

 

這裡的keystore就是你對apk文件進行簽名時使用的個人密鑰。需要你將path修改為你的密鑰庫路徑,passwd為密鑰庫的密碼。

下面的alias是指每個密鑰對應的別名,以及對應的密碼。如果你有多個alias,可以在這裡指定,插件會選取第一個可用的alias以及密碼對應的密鑰Key對你的apk文件進行簽名。

 

這個路徑就是你的apk文件自動打包生成出來以後的存放路徑。注意插件會在這個路徑下創建以你的工程名為名稱的文件夾。

 

\\


說明文檔&插件下載

3.Gradle 多渠道打包 ,比較新,使用比較簡單

 

暫未使用Android studio 打過簽名包,故先貼上 生成簽名方法:

 

點擊Android Studio的 Build ,選擇 generate Signed APK。

\

選擇 create new key store:

\

j填完 點擊OK

\

然後next 選擇輸出apk 位置。

 

接下來講一下gradle 多渠道打包

1. 在AndroidManifest.xml中定義占位符


android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}"/>




2. 在module的gradle腳本中替換占位符

productFlavors {
wangdoujia {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wangdoujia"]
}
xiaomi {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
}
anzhi {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "anzhi"]
}
}

 

更多渠道 的話 就按上面的 格式添加, 添加完畢後點擊build----->generate signed apk 即可。

 

聲明渠道方式二:

Android批量打包提速 - 1分鐘900個市場不是夢

最後一種打包方式,在網上也有很多資料,就是根據美團的打包原理,制作的打包工具。

可以參看這邊文章

Android批量打包提速 - 1分鐘900個市場不是夢

 

普通打包方式 時間比較長,是以為需要修改manifest 文件中

android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}"/>

 

的value, 然後繼續簽名 ,因此耗時。

 

以下為美團提供的打包思路 :(原文美團Android自動化之旅—生成渠道包)

 

如果能直接修改apk的渠道號,而不需要再重新簽名能節省不少打包的時間。幸運的是我們找到了這種方法。直接解壓apk,解壓後的根目錄會有一個META-INF目錄,如下圖所示:

 

\

如果在META-INF目錄內添加空文件,可以不用重新簽名應用。因此,通過為不同渠道的應用添加不同的空文件,可以唯一標識一個渠道。

 

 

添加完空渠道文件後的目錄,META-INFO目錄多了一個名為mtchannel_meituan的空文件:

\

接下來就可以在Java代碼中讀取空渠道文件名了:

public static String getChannel(Context context) {
        ApplicationInfo appinfo = context.getApplicationInfo();
        String sourceDir = appinfo.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("mtchannel")) {
                    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) {
            return ret.substring(split[0].length() + 1);

        } else {
            return "";
        }
    }

這樣,每打一個渠道包只需復制一個apk,在META-INF中添加一個使用渠道號命名的空文件即可。這種打包方式速度非常快,900多個渠道不到一分鐘就能打完。


根據美團提供的思路, 在META-INFO中添加一個空的文件 作為 channel,可以滿足一般我們的渠道要求,那麼不需要簽名,則大大減少了打包時間

因此有了Android批量打包提速 - 1分鐘900個市場不是夢 這邊文章。

 

下面是具體步驟:

准備


下載python: https://www.python.org
下載別人寫好的腳本: https://github.com/GavinCT/AndroidMultiChannelBuildTool

####步驟

1. 拷貝`ChannelUtil.java`到項目中。
2. 代碼中通過 ChannelUtil.getChannel(this)方法獲取渠道號。
3. 安裝Python。
4. `..PythonTool\info\channel.txt`,裡面去添加自己想要的渠道。
5. 放置apk到`MultiChannelBuildTool.py`所在目錄,雙擊`MultiChannelBuildTool.py`執行腳本,完成多渠道打包。

下面演示一下 打包

\

 

 

我這裡配置了65個包,一瞬間就打完了。

並且渠道配置也很方便,在專門的 channel.txt 中配置即可。

 

 

總結

各種打包方式的比較:

速度上來說,最後一種方式 是無敵的快,並且使用很方便,只需要我們手動打一個簽名包,隨後只需要腳本去執行即可。

 

Umeng 打包工具,普通包也可以,但是渠道多了的話,配置麻煩,並且含有so 動態鏈接庫的 apk 打包可能會出問題

 

藍貝殼兒 Eclipse打包插件, 我以前一直用的打包方式,速度比起 美團的打包思路慢,但是一般不會出錯。

 

 

資料都是收集與互聯網上的,大家如果有好的思路也多多分享。

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved