Android几种常见的多渠道(批量)打包方式介绍

多渠道打包,主要是为了统计不同的渠道上包的下载数量,渠道越多,我们需要打的包数量越多,这个时候,我们没法去使用单纯的手动打包去一个一个的生成不同的渠道包,我们需要更高效的打包方式。

声明渠道方式一:

通常我们区分渠道都是在我们manifest 文件的 application 用这样来定义渠道信息:

<meta-data
            android:name="UMENG_CHANNEL"
            android:value="360"/>

然后在我们的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.友盟的打包工具:

下载地址:https://github.com/umeng/umeng-muti-channel-build-tool 。

使用方式比较简单,首先按照普通的方式单独打一个签名包,然后打开我们下载的打包工具,建议使用最新的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级的<Meta-data>的名称。例如:

<meta-data android:value="andao007.com" android:name="UMENG_CHANNEL"/>

<meta-data android:value="andao007.com" android:name="gfan_cpid"/>

这里使用的是友盟的统计SDK和机锋网的统计SDK,所以名称为“UMENG_CHANNEL,gfan_cpid”,你可以修改为你自己应用的统计SDK的渠道项目标识符,如果有多个,使用半角逗号隔开即可。

<channel value=”andao007.com”/>

是对应于你要打包的每个渠道名称,也就是统计SDK中渠道的标识符。对于写在这里的每个渠道,插件会自动为其修改meta-data中的value值,并且打包为一个apk文件。然后为这个apk文件进行签名。

<keystore path="F:\Repos\android\keystore\common\common.key" passwd="123456">

<alias name="marsor_common" passwd="123456" />

</keystore>

这里的keystore就是你对apk文件进行签名时使用的个人密钥。需要你将path修改为你的密钥库路径,passwd为密钥库的密码。

下面的alias是指每个密钥对应的别名,以及对应的密码。如果你有多个alias,可以在这里指定,插件会选取第一个可用的alias以及密码对应的密钥Key对你的apk文件进行签名。

<outpath value="F:\Repos\android\keystore\output\" />

这个路径就是你的apk文件自动打包生成出来以后的存放路径。注意插件会在这个路径下创建以你的工程名为名称的文件夹。

 

说明文档&插件下载

3. Gradle 多渠道打包 ,比较新,使用比较简单

暂未使用Android studio 打过签名包,故先贴上 生成签名方法:

点击Android Studio的 Build ,选择 generate Signed APK。

选择 create new key store:

j填完 点击OK

然后next 选择输出apk 位置。

接下来讲一下gradle 多渠道打包

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

<meta-data
            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 文件中

<meta-data
            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打包插件,  我以前一直用的打包方式,速度比起 美团的打包思路慢,但是一般不会出错。

资料都是收集与互联网上的,大家如果有好的思路也多多分享。

附上最后一种打包方式的工具:http://download.csdn.net/detail/u011733020/9496464

时间: 2024-10-10 08:23:39

Android几种常见的多渠道(批量)打包方式介绍的相关文章

Android多渠道批量打包

如若感觉排版不舒服,请移步Android多渠道批量打包 1.为什么要进行多渠道打包? 安卓应用商店(一个商店也叫做一个渠道,如豌豆荚,360手机助手,应用宝)众多,大大小小几百个,每当我们发新版本时,需要将Android客户端分发到各个应用市场,为了统计这些市场的效果(下载量.活跃数等),需要有一种方法来唯一标识它们,所以才有了多渠道打包. 2.如何统计各个渠道的下载量.活跃数? 现在有比较成熟的第三方应用帮我们实现统计功能(比如友盟),统计的本质就是收集用户信息传输到后台,后台生成报表,帮助我

Android三种基本的加载网络图片方式(转)

Android三种基本的加载网络图片方式,包括普通加载网络方式.用ImageLoader加载图片.用Volley加载图片. 1. [代码]普通加载网络方式 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

application/json 四种常见的 POST 提交数据方式

application/json 四种常见的 POST 提交数据方式 四种常见的 POST 提交数据方式 HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS.GET.HEAD.POST.PUT.DELETE.TRACE.CONNECT 这几种.其中 POST 一般用来向服务端提交数据,本文主要讨论 POST 提交数据的几种方式. 我们知道,HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范.规范把 HTTP 请求分为三个部分:状态行.请求头.消息主

Android Studio多渠道批量打包及代码混淆

一.批量打包 1.集成了友盟统计,并在AndroidManifest.xml中添加了如下代码 <meta-data android:name="UMENG_CHANNEL" android:value="${CHANNEL_VALUE}"/> 2.在app的build.gradle的android标签下添加如下代码: productFlavors { myapp {} _360 {} appchina {} hiapk {} } productFlavo

整理的Unity导出安卓工程利用ANT进行多渠道批量打包APK

Unity导出的安卓工程利用ant进行多渠道循环批量打包 一:设置JAVA环境变量 做android开发的配置这个是基础. win7 下配置java环境变量,下面是链接 http://www.cnblogs.com/zhj5chengfeng/archive/2013/01/01/2841253.html 二:配置Android的SDK环境变量 除了需要Java的环境变量,我们还需要配置Android的sdk的位置,名字是ANDROID_HOME,值就是你的android的sdk的位置,比如我的

Android 四种常见的线程池

引入线程池的好处 1)提升性能.创建和消耗对象费时费CPU资源 2)防止内存过度消耗.控制活动线程的数量,防止并发线程过多. 我们来看一下线程池的简单的构造 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue workQueue, ThreadFactory threadFactory, RejectedExecution

四种常见的 POST 提交数据方式

HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS.GET.HEAD.POST.PUT.DELETE.TRACE.CONNECT 这几种.其中 POST 一般用来向服务端提交数据,本文主要讨论 POST 提交数据的几种方式. 我们知道,HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范.规范把 HTTP 请求分为三个部分:状态行.请求头.消息主体.类似于下面这样: BASH<method> <request-URL> <vers

最新的Android Sdk 使用Ant多渠道批量打包

实例工程.所需的文件都在最后的附件中.    今天花费了几个小时,参考网上的资料,期间遇到了好几个问题, 终于实现了使用Ant批量多渠道打包,现在,梳理一下思路,总结使用Ant批量多渠道打包的方法:1.  下载安装Ant,不是使用Androis sdk 或者 Eclipse中的Ant,而是去官网下载完整的Ant.官网:http://ant.apache.org/ 1) 解压Ant,比如解压到D:\Android\Ant2) 我的电脑->属性->高级->环境变量 3) 系统变量新建ANT_

Android四种常见设计模式说明

前言: Android开发的设计模式,基本设计思想源于java的设计模式,java的设计模式有N多种,据不完全统计,迄今为止,网络出现最频繁的大概有23种.Java只是一门开发语言,学会并掌握这门语言进行代码编写,这是每个程序员必修的课程,但如何写出高质量.易维护和复用性强的代码,那就体现出程序员的层次和水平了.设计模式的出现就是为了解决这些问题. 开始学习设计模式的时候,我们通常都有种将简单问题复杂化的感觉,明明一个类N行代码就能完成的事情,干嘛非要创建几个类?又抽象又难理解的.后来随着开发经