Android快速批量多渠道包的“蛋生”-创新互联

对于安卓程序猿朋友来说,每当发布新版本的APP,均会分发到各大应用市场,比如腾讯应用宝,豌豆荚和360手机助手等。为了让程序猿同志们更好的区分不同的应用市场,掌握各市场APP发展状况,为了更多体现世界对程序猿的关爱,我们的多渠道包诞生啦。
                                                                         Android快速批量多渠道包的“蛋生”

泸州网站建设公司创新互联公司,泸州网站设计制作,有大型网站制作公司丰富经验。已为泸州1000+提供企业网站建设服务。企业网站搭建\外贸营销网站建设要多少钱,请找那个售后服务好的泸州做网站的公司定做!

一、Android多渠道打包机制

       Android多渠道打包机制的原理为:向分发到不同市场的APP中打入对应的市场标识,APP运行时获取到该标识信息,并将信息发送到指定的统计服务器,用于跟踪记录各个市场中APP的发展情况。
     通过制作多渠道包,程序猿朋友们可以掌握第一手应用市场动态,随时向老板汇报,制定相应的需求策略,出任总经理,担任CEO,赢取白富美,从此走上人生巅峰。
                                                       Android快速批量多渠道包的“蛋生”

二.多渠道包的DIY方式
   

     Android中添加渠道信息,比较常用的有三种,分别为:

  • AndroidManifest.xml中添加渠道信息

  • META-INF目录下添加渠道信息

  • APK文件的注释字段中添加渠道信息

       例如,对于渠道Goapk_Market,三种渠道信息的添加方式如下:
1.  AndroidManifest.xml中添加渠道信息。
        渠道信息将被添加到application结点下的子结点meta-data中,如下:

           android:icon="@7F03000A"
          android:label="@7F060014"
          android:theme="@7F090083">
                  android:name="Goapk_Market"
            android:value="Goapk">
      

      该种方式是目前应用最广的一种,比如友盟统计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目录下,如下:
        Android快速批量多渠道包的“蛋生”
      该种方式也是较常用的方式之一,利用了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插件。其中数据格式定义如下:
        Android快速批量多渠道包的“蛋生”
        而添加的渠道信息如下所示:
      Android快速批量多渠道包的“蛋生”
       该种方式较前两种方式实现相对麻烦些,特别是渠道信息的获取需要读取整个APK,解析注解,获取渠道信息,另外就是兼容性不是很好。

三、快速批量多渠道打包工具的实现

 

     目前,前两种渠道包制作方式应用较广。我们的程序猿大兄弟考虑群众需求,为大家介绍基于前两种打包方式的快速批量多渠道打包工具实现
1、利用Gradle Flavor实现快速批量打包
       该方案充分利用了gradle的特性,具体为根据需求在build.gradle文件中配置productFlavor,并添加必要的代码和资源文件,实现快速多渠道打包,比较灵活,但是有一定的局限性,完全依赖于gradle,不太适合自动化的构建过程。
       该方案的具体过程为:
    a、在AndroidManifest.xml里设置动态渠道变量。

            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下载极速签名工具进行批量快速签名。

网易云加密默认集成了该工具,用户可以将工具拷贝出来,单独使用。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网页题目:Android快速批量多渠道包的“蛋生”-创新互联
路径分享:http://hbruida.cn/article/dsicih.html