Android多渠道打包总结(推荐)

所属分类: 软件编程 / Android 阅读数: 87
收藏 0 赞 0 分享

多渠道打包一般应用于向不同应用市场提交app后用来统计不同渠道下载量等一些信息。一般集成友盟sdk(同类型的sdk还有 诸葛io,量江湖等sdk),不同sdk集成方式大同小异,可去各自官网查看详细文档。本文以友盟sdk为例。
渠道:各种应用市场比如 华为应用市场,小米应用市场, 积分墙(花钱的推广渠道)等。

一,android自带gradle打包

首先集成友盟sdk,集成方式参照友盟sdk集成,在项目的build.gradle文件中加入以下代码

  productFlavors {
    yingyongbao {}
    oppo {}
  }
  productFlavors.all {
    flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
  }

修改生成的apk名字

  applicationVariants.all{ variant->
    variant.outputs.each { output->
      def oldFile = output.outputFile
      if(variant.buildType.name.equals('release')){
        def releaseApkName = ''+variant.productFlavors[0].name +"-"+defaultConfig.versionName+ '.apk'
        output.outputFile = new File(oldFile.parent, releaseApkName)
      }

    }

  }

在AndroidManifest.xml中加入友盟的集成代码以及权限

  <meta-data
      android:name="UMENG_APPKEY"
      android:value="Your key" />
    <!-- <meta-data android:value="faqiao" android:name="UMENG_CHANNEL"/> -->
    <meta-data
      android:name="UMENG_CHANNEL"
      android:value="${UMENG_CHANNEL_VALUE}" /> //这里改成对应build.gradle中的 productFlavors.all 对应的字符串

然后选择你要打包的渠道就 可以了

->

 

缺点:如果渠道过多这种打包方式很费时间20个渠道包差不多要40分钟的时间。

二 美团walle(瓦力)打包

一些大厂的渠道会多到惊人,美团会有900+的渠道要是按上面的打包方式2*900肯定是不行的。美团技术大牛们也在一直研究快速多渠道打包方法。

在这介绍美团最新的walle打包,之前美团还有一个打包方式是通过python脚本修改apk(apk也是一个压缩包)中的一个配置文件的名称,配置文件名称也就是渠道名称从而打不不同的包,这种速度很快,但是从android7.0以后android加入了APK Signature Scheme v2打包方式,因为这种打包方式改变的包里面的内容所以apk在7.0以后的系统中安装会提示安装失败。

在此推荐美团walle打包,此种方式是不通过外部修改配置文件的方式打包具体打包细节可参考美团walle打包

集成方式

首先build.gradle中

apply plugin: 'walle'

  walle {
    // 指定渠道包的输出路径
//    apkOutputFolder = new File("${project.buildDir}/outputs/channels");
    apkOutputFolder = new File("D:/Android/outputs/user/channels");
    // 定制渠道包的APK的文件名称
//    apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk';
    apkFileNameFormat = 'app-${channel}-v${versionName}.apk';
    // 渠道配置文件
    channelFile = new File("${project.getProjectDir()}/channel")
  }

dependencies {
 compile 'com.meituan.android.walle:library:1.1.6'//美团多渠道打包
}

这里的 channelFile是一个channel(渠道的一个配置文件)放在该工程的对应的目录下

apkOutputFolder 是apk包生成的位置,可更改

该文件用editplus文件编辑器打开格式如下:

 

然后在 工程的 build.gradle中加入

 dependencies {
    classpath 'com.meituan.android.walle:plugin:1.1.6'
  }

这种打包方式不是更改AndroidManifest的方式,所以先把AndroidManifest中的配置友盟渠道的代码注释掉:

 <!--<meta-data-->
      <!--android:name="UMENG_APPKEY"-->
      <!--android:value="your key" />-->
    <!--&lt;!&ndash; <meta-data android:value="faqiao" android:name="UMENG_CHANNEL"/> &ndash;&gt;-->
    <!--<meta-data-->
      <!--android:name="UMENG_CHANNEL"-->
      <!--android:value="channel" />-->

通过调用walle的方法获取到的channel的名称,所以需要在app初始化的 BaseApplication中初始化友盟的channel配置信息。

 private void initUmeng(){
    String appkey = "your appkey";
    String channelId = WalleChannelReader.getChannel(this.getApplicationContext());
    //初始化友盟配置信息 通过代码方式配置友盟的渠道信息
     MobclickAgent.UMAnalyticsConfig config =
        new MobclickAgent.UMAnalyticsConfig(this, appkey, channelId); 
  }

配置好了那么就开始打包了,在as自带的命令输入框输入打包命令,等两分钟左右所有的渠道包就打完了!

出现BUILD SUCCESSFUL 就说明打包成功了


常用的walle打包命令

//生成所有渠道包 
gradlew clean assembleReleaseChannels 
// 生成单个渠道包: 
gradlew clean assembleReleaseChannels -PchannelList=meituan

//生成多个渠道包: 
gradlew clean assembleReleaseChannels -PchannelList=meituan,dianping

总结

如果没有渠道的限制一般用as自带的gradle打包就可以,如果渠道过多推荐使用walle打包。文中介绍的美团的python打包方式现在还有一些开发者在用,因为那种方法在构建基础apk包的时候 不选用v2打包方式是没有问题的,但是我认为v2的签名打包方式更符合现在的趋势吧,所以推荐是用美团的walle打包方式。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Android网络编程之获取网络上的Json数据实例

这篇文章主要介绍了Android网络编程之获取网络上的Json数据实例,本文用完整的代码实例讲解了在Android中读取网络中Json数据的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中的windowSoftInputMode属性详解

这篇文章主要介绍了Android中的windowSoftInputMode属性详解,本文对windowSoftInputMode的9个属性做了详细总结,需要的朋友可以参考下
收藏 0 赞 0 分享

Android网络编程之UDP通信模型实例

这篇文章主要介绍了Android网络编程之UDP通信模型实例,本文给出了服务端代码和客户端代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中使用ListView实现漂亮的表格效果

这篇文章主要介绍了Android中使用ListView实现漂亮的表格效果,本文用详细的代码实例创建了一个股票行情表格,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中刷新界面的二种方法

这篇文章主要介绍了Android中刷新界面的二种方法,本文使用Handler、postInvalidate两种方法实现界面刷新,需要的朋友可以参考下
收藏 0 赞 0 分享

Android SDK三种更新失败及其解决方法

这篇文章主要介绍了Android SDK三种更新失败及其解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(一)

Android3.0(API level 11)开始,Android设备不再需要专门的菜单键。随着这种变化,Android app应该取消对传统6项菜单的依赖。取而代之的是提供anction bar来提供基本的用户功能
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(二)

这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu)
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(三)

今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习,需要的朋友可以参考下
收藏 0 赞 0 分享

Android显示网络图片实例

这篇文章主要介绍了Android显示网络图片的方法,以实例形式展示了Android程序显示网络图片的方法,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多