使用Android Studio Gradle实现友盟多渠道打包

 更新时间:2018年05月18日 14:52:11   作者:丁先森  
这篇文章主要介绍了使用Android Studio Gradle实现友盟多渠道打包,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

最新项目中要求在友盟后台看到不同渠道的统计,Android大大小小的应用市场要几百个,要一个一个手工打包那一天也干不完,还好是有大牛的,弄出了好多解决方法,就Gradle做一下记录和分享,首先看一些理论知识:

1.应用的打包签名

什么是打包?

打包就是根据签名和其他标识生成安装包。

签名是什么?

1.在android应用文件(apk)中保存的一个特别字符串

2.用来标识不同的应用开发者:开发者A,开发者B

3.一个应用开发者开发的多款应用使用同一个签名

就好比是一个人写文章,签名就相当于作者的署名。

如果两个应用都是一个开发者开发的,那么签名就是一样的。

这个开发者,可以是个人,也可以是公司、团体。

为什么要用签名?

原因1:最简单直接的回答: 系统要求的。

Android系统要求每一个Android应用程序必须要经过数字签名才能够安装到系统中,也就是说如果一个Android应用程序没有经过数字签名,是没有办法安装到系统中的!

原因2:

不同程序员开发的应用包名可能会相同, 导致一个应用覆盖掉另一个应用。

如果只有包名的概念,那么如果B应用与已经安装的A应用包名一样,那就实现覆盖。不合理!

而事实上是装不上B的,它会提示,存在包名一致,但是签名不一样的。这就不会覆盖。

2.多渠道

1.什么是多渠道包?

渠道包就是要在安装包中添加渠道信息,也就是channel,对应不同的渠道,例如:小米市场、360市场、应用宝市场等

2.为什么要提供多渠道包?

我们要在安装包中添加不同的标识,应用在请求网络的时候携带渠道信息,方便后台做运营统计(这就是添加渠道信息的用处)。

3.实现多渠道打包的原理:

一般来讲,这个渠道的标识会放在AndroidManifest.xml的Application的一个Metadata中。然后就可以在java中通过API获取对应的数据了。

4.如何实现?

现在android渠道多种多样,其实渠道不仅仅局限于应用市场,一种推广方式也可以看做一个渠道,比如:通过人拉人的方式去推广,官网上推广,百度推广等。所以说渠道成千上万,为了推广,有时候一次也会打成千的安装包,那你半天或者一天啥都别干了,所以介绍几个大公司高效的打包方式,借鉴一下。

第一种:友盟就提供了多渠道打包的方式,可用于渠道统计等。

现在Android的构建工具换成了gradle,通过gradle,简单配置后就可以实现自动打所有渠道包。

理论知识看完就看怎么实现的了,其实很简单就几步操作就可以完成了

一、在AndroidManifest.xml中设置

<meta-data
    android:name="UMENG_APPKEY"
    android:value="xxxxxxxxxxxxxxxxxxx" /><!--友盟 Appkey 自己应用注册申请来的-->
    <meta-data
      android:name="UMENG_CHANNEL"
      android:value="${UMENG_CHANNEL_VALUE}" /> <!--渠道号,多渠道这里使用了占位符$-->

二、build.gradle(注意这里不是项目根目录那个哦)

在defaultConfig节点下添加默认渠道号

manifestPlaceholders = [UMENG_CHANNEL_VALUE: "default_channel"]//添加一个默认渠道号

和defaultConfig同节点添加一个productFlavors节点,内容如下:

 productFlavors {
    default_channel {}
    huawei {}
    oppo {}
    xiaomi {}
    yiyongbao {}
    vivo {}
    _360 {}
  }

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

如果不知道放在哪里看一下完整的

apply plugin: 'com.android.application'

android {
  compileSdkVersion 26
  buildToolsVersion "26.0.2"

  defaultConfig {
    applicationId "com.dc.xydemo"
    minSdkVersion 23
    targetSdkVersion 26
    versionCode 1
    versionName "1.0"

    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    manifestPlaceholders = [UMENG_CHANNEL_VALUE: "default_channel"]//添加一个默认渠道号

  }
  productFlavors {
    default_channel {}
    huawei {}
    oppo {}
    xiaomi {}
    yiyongbao {}
    vivo {}
    _360 {}
  }

  productFlavors.all { flavor ->
    flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
  }
  buildTypes {
    release {
      minifyEnabled false
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
  }
}

dependencies {
  compile fileTree(dir: 'libs', include: ['*.jar'])
  androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
  })
  compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
  compile 'com.umeng.analytics:analytics:latest.integration'
  testCompile 'junit:junit:4.12'
  compile 'com.squareup.okhttp3:okhttp:3.2.0'
  compile 'com.squareup.okio:okio:1.7.0'
  compile 'junit:junit:4.12'
  compile files('libs/fastjson-1.1.45.android.jar')
  compile 'com.squareup.picasso:picasso:2.5.2'
}

三、配置完上述之后就可以运行打包命令进行打包了

3-1

最后使用gradlew assembleRelease 打生产包 ;gradlew assembleDebug 打测试包

坐等打包运行完成,然后可以在build-->outputs-->apk下边看看是否打包成功

出现上图内容多渠道打包就完成了,是不是很简单

如果有问题请留言评论或者发送邮件,dingchao7323@qq.com

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

相关文章

  • 清楚详解Android 进程间图传递图形buffer原理

    清楚详解Android 进程间图传递图形buffer原理

    这篇文章主要为大家清楚的详解了Android 进程间图传递图形buffer原理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Android帧式布局实现自动切换颜色

    Android帧式布局实现自动切换颜色

    这篇文章主要为大家详细介绍了Android帧式布局实现自动切换颜色,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Android获取内置sdcard跟外置sdcard路径

    Android获取内置sdcard跟外置sdcard路径

    这篇文章主要介绍了Android获取内置sdcard跟外置sdcard路径的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • Android实现在TextView文字过长时省略部分或滚动显示的方法

    Android实现在TextView文字过长时省略部分或滚动显示的方法

    这篇文章主要介绍了Android实现在TextView文字过长时省略部分或滚动显示的方法,结合实例形式分析了Android中TextView控件文字显示及滚动效果相关操作技巧,需要的朋友可以参考下
    2016-10-10
  • Android滑动组件悬浮固定在顶部效果

    Android滑动组件悬浮固定在顶部效果

    这篇文章主要为大家详细介绍了Android滑动组件悬浮固定在顶部效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • Flutter 包管理器和资源管理使用学习

    Flutter 包管理器和资源管理使用学习

    这篇文章主要为大家介绍了Flutter 包管理器和资源管理使用学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Android实现全局悬浮框

    Android实现全局悬浮框

    这篇文章主要为大家详细介绍了Android实现全局悬浮框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01
  • Android自定义Seekbar滑动条 Pop提示跟随滑动按钮滑动

    Android自定义Seekbar滑动条 Pop提示跟随滑动按钮滑动

    这篇文章主要为大家详细介绍了Android自定义Seekbar滑动条,Pop提示跟随滑动按钮滑动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Android自定义实现转盘菜单

    Android自定义实现转盘菜单

    旋转菜单是一种占用空间较大,实用性稍弱的UI,本文主要为大家详细介绍了Android如何自定义实现转盘菜单,文中的示例代码讲解详细,有需要的小伙伴可以参考下
    2023-12-12
  • Android实现多线程断点下载的方法

    Android实现多线程断点下载的方法

    这篇文章主要介绍了Android实现多线程断点下载的方法,可实现开始、暂停下载及百分比进度条等功能,非常具有实用价值,需要的朋友可以参考下
    2015-05-05

最新评论