按照惯例先放上Demo链接https://github.com/AndroidLMY/UMTest
准备
注册友盟->创建应用->获取APPKEY
集成
1.在工程 build.gradle 中的buildscript 和 allprojects 段中添加 sdk maven 仓库地址 "maven { url 'https://dl.bintray.com/umsdk/release' }"
buildscript {
repositories {
google()
jcenter()
maven { url 'https://dl.bintray.com/umsdk/release' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
maven { url 'https://dl.bintray.com/umsdk/release' }
}
}
2.集成组件化各业务SDK 更多依赖详情见官网
// 友盟基础组件库(所有友盟业务SDK都依赖基础组件库)
implementation "com.umeng.umsdk:common:9.3.6" //(必选)
implementation "com.umeng.umsdk:asms:1.2.0" // asms包依赖(必选)
// 下面各SDK根据宿主App是否使用相关业务按需引入。
implementation "com.umeng.umsdk:abtest:1.0.0" // ABTest功能依赖(可选)
implementation "com.umeng.umsdk:apm:1.1.1" // 应用性能监控SDK依赖(可选)
配置
清单文件配置
UMENG_APPKEY你申请的APPKEY
UMENG_CHANNEL为渠道号 这里动态配置方便更改渠道号
<meta-data
android:name="UMENG_APPKEY"
android:value="604052d4b8c8d45c138a95af" />
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
在Application中初始化友盟SDK
package com.lmy.umtest
import android.app.Application
import android.content.pm.PackageManager
import com.umeng.analytics.MobclickAgent
import com.umeng.commonsdk.UMConfigure
class App : Application() {
companion object {
lateinit var mInstance: App
}
override fun onCreate() {
super.onCreate()
mInstance = this
initUM()
}
/**
* 初始化友盟统计
*/
private fun initUM() {
//友盟SDK Log开关
UMConfigure.setLogEnabled(true)
//设置自动采集信息
MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO)
/**
* 注意: 即使您已经在AndroidManifest.xml中配置过appkey和channel值,也需要在App代码中调
* 用初始化接口(如需要使用AndroidManifest.xml中配置好的appkey和channel值,
* UMConfigure.init调用中appkey和channel参数请置为null)。
*/
UMConfigure.init(this, "604052d4b8c8d45c138a95af", null, UMConfigure.DEVICE_TYPE_PHONE, "")
}
/**
* 获取友盟渠道名
* @return 如果没有获取成功,那么返回值为空
*/
fun getChannelName(): String {
var channelName = "官方"
try {
val packageManager = packageManager
if (packageManager != null) {
//注意此处为ApplicationInfo 而不是 ActivityInfo,因为友盟设置的meta-data是在application标签中,而不是某activity标签中,所以用ApplicationInfo
val applicationInfo =
packageManager.getApplicationInfo(packageName, PackageManager.GET_META_DATA)
if (applicationInfo != null) {
if (applicationInfo.metaData != null) {
//此处这样写的目的是为了在debug模式下也能获取到渠道号,如果用getString的话只能在Release下获取到。
channelName = applicationInfo.metaData["UMENG_CHANNEL"].toString() + ""
}
}
}
} catch (e: PackageManager.NameNotFoundException) {
e.printStackTrace()
}
return channelName
}
}
测试
build.gradle中android节点下配置
/**
* 配置多渠道打包
*/
productFlavors {
dev {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "测试"]
}
pro {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "官方"]
}
}
如果添加以后报错请在android->defaultConfig下添加flavorDimensions "versionCode"
点击选择不用版本 即可动态修改清单文件中UMENG_CHANNEL_VALUE的值(渠道号)
在Activity中调用 即可获取到不同的渠道号的值
package com.lmy.umtest
import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val tv_channel = findViewById<TextView>(R.id.tv_channel)
tv_channel.text = App.mInstance.getChannelName()
}
}
选中devDebug运行
结果:
选中proDebug运行
结果:
多渠道打包
手动分别打测试渠道包和正式渠道包
360多渠道打包
打开360加固软件 配置好你的应用签名
然后点击配置多渠道
配置好后点击添加即可
配置两个渠道包
最后点击添加应用即可 加固以后不即可得到相关的渠道包