版权声明:本文为HaiyuKing原创文章,转载请注明出处!前端
这里只是记录下集成友盟统计SDK以及简单配置多渠道打包的步骤。因此一、该Demo不能运行;二、配置多渠道打包只是一种简单的写法,具体复杂写法请阅读参考资料。java
注意事项:android
一、 导入类文件后须要change包名以及从新import R文件路径json
二、 Values目录下的文件(strings.xml、dimens.xml、colors.xml等),若是项目中存在,则复制里面的内容,不要整个覆盖api
有两种方法:(本Demo中采用第一种方法)服务器
方法一:下载SDK,将解压出来的jar包复制到工程libs/目录下。
下载地址:https://developer.umeng.com/session
方法二:添加SDK在maven中心库的线上依赖
一、在app的builde.gradle中添加依赖app
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.why.project.umengappdemo"
minSdkVersion 16
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
/*友盟统计须要的最新版本组件化基础库和统计SDK*/ implementation 'com.umeng.sdk:common:1.5.3' implementation 'com.umeng.sdk:analytics:7.5.3'
}
若是没法正常集成请在项目的bundle.gradle文件中添加以下配置:maven
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
mavenCentral()//友盟统计sdk
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
(1)首先,新建thirdlib这个module,用来统一管理第三方平台的SDK;而且在app的bundle.gradle文件中引入thirdlibide
//thirdlib
implementation project(':thirdlib')
(2)而后,将下载的友盟统计SDK中的jar文件复制到thirdlib这个module的libs目录下,而且在thirdlib的bundle.gradle文件中引用这些jar文件
//友盟统计sdk
api files('libs/umeng-analytics-7.5.3.jar')
api files('libs/umeng-common-1.5.3.jar')
还须要在app的bundle.gradle中添加如下代码
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.why.project.umengappdemo"
minSdkVersion 16
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
//集成友盟统计sdk repositories { flatDir { dirs 'libs' dirs project(':thirdlib').file('libs') } }
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
//thirdlib
implementation project(':thirdlib')
}
(3)而后,在app的AndroidManifest.xml中添加权限、配置Appkey与渠道(Channel)【注意,appkey值是错误的,换成本身的】
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.why.project.umengappdemo"> <!-- ======================友盟统计sdk========================== --> <!--检测联网方式,区分用户设备使用的是2G、3G或是WiFi。--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <!--获取用户设备的mac地址,在平板设备或电视盒子上,没法经过IMEI标示设备,咱们会将mac地址做为用户的惟一标识。--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <!--获取用户设备的IMEI,经过IMEI来惟一的标识用户。App能够不申请READ_PHONE_STATE--> <!--<uses-permission android:name="android.permission.READ_PHONE_STATE"/>--> <!--容许应用程序联网,以便向咱们的服务器端发送数据。--> <uses-permission android:name="android.permission.INTERNET"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <!-- ======================友盟统计配置Appkey与Channel====================== --> <!--value的值填写你在友盟后台申请的应用Appkey--> <meta-data android:value="63639f9wejfefew9032093jfwsedwr" android:name="UMENG_APPKEY"/> <!--value的值填写渠道名称,例如yingyongbao。这里设置动态渠道变量--> <meta-data android:value="${UMENG_CHANNEL_VALUE}" android:name="UMENG_CHANNEL"/> </application> </manifest>
还须要在app的builde.gradle中配置须要的渠道(好比这里是应用宝、华为、小米、360),对应上面的渠道名称变量。
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.why.project.umengappdemo"
minSdkVersion 16
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
/*配置渠道--友盟统计*/ flavorDimensions "default" //渠道 productFlavors { yingyongbao {} huawei {} xiaomi {} _360 {} //批量配置 productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] } }
}
//集成友盟统计sdk
repositories {
flatDir {
dirs 'libs'
dirs project(':thirdlib').file('libs')
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
//thirdlib
implementation project(':thirdlib')
}
(4)而后,在app中新建MyApplication.java文件,并添加友盟统计初始化方法
下面黄色标记的代码是主要代码,紫色标记的代码是用于获取渠道名称的。
package com.why.project.umengappdemo; import android.app.Application; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.text.TextUtils; import com.umeng.commonsdk.UMConfigure; /** * Created by HaiyuKing * Used */ public class MyApplication extends Application { /**系统上下文*/ private static Context mAppContext; @Override public void onCreate() { super.onCreate(); mAppContext = getApplicationContext(); /*=================友盟统计sdk=====================*/ initUmengApp(); } /**获取系统上下文:用于ToastUtil类*/ public static Context getAppContext() { return mAppContext; } //友盟统计 private void initUmengApp(){ /* 注意: 即便您已经在AndroidManifest.xml中配置过appkey和channel值,也须要在App代码中调用初始化接口(如须要使用AndroidManifest.xml中配置好的appkey和channel值,UMConfigure.init调用中appkey和channel参数请置为null)。 */ /** * 初始化common库 * 参数1:上下文,必须的参数,不能为空 * 参数2:友盟 app key,非必须参数,若是Manifest文件中已配置app key,该参数能够传空,则使用Manifest中配置的app key,不然该参数必须传入 * 参数3:友盟 channel,非必须参数,若是Manifest文件中已配置channel,该参数能够传空,则使用Manifest中配置的channel,不然该参数必须传入,channel命名请详见channel渠道命名规范 * 参数4:设备类型,必须参数,传参数为UMConfigure.DEVICE_TYPE_PHONE则表示手机;传参数为UMConfigure.DEVICE_TYPE_BOX则表示盒子;默认为手机 * 参数5:Push推送业务的secret,须要集成Push功能时必须传入Push的secret,不然传空 */ UMConfigure.init(this, UMConfigure.DEVICE_TYPE_PHONE,""); /** * 设置组件化的Log开关 * 参数: boolean 默认为false,如需查看LOG设置为true */ UMConfigure.setLogEnabled(false); /** * 设置日志加密 * 参数:boolean 默认为false(不加密) */ UMConfigure.setEncryptEnabled(false); // 打开统计SDK调试模式--发布前须要修改成false UMConfigure.setLogEnabled(false); } /** * 这个方法是给其余第三方平台使用的,用于获取当前渠道名称:getAppMetaData(getAppContext(),"UMENG_CHANNEL") * 获取application中指定的meta-data。对于友盟统计,多渠道配置,调用方法时传入key就是UMENG_CHANNEL * return 若是没有获取成功(没有对应值,或者异常),则返回值为空 */ public static String getAppMetaData(Context ctx, String key) { if (ctx == null || TextUtils.isEmpty(key)) { return null; } String resultData = null; try { PackageManager packageManager = ctx.getPackageManager(); if (packageManager != null) { ApplicationInfo applicationInfo = packageManager.getApplicationInfo(ctx.getPackageName(), PackageManager.GET_META_DATA); if (applicationInfo != null) { if (applicationInfo.metaData != null) { resultData = applicationInfo.metaData.getString(key); } } } } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return resultData; } }
这样友盟统计SDK就集成到项目中。
即启动数据的统计(包括新增用户、活跃用户、启动次数、使用时长等基本数据)。
须要在每一个Activity的onResume方法中调用 MobclickAgent.onResume(Context),onPause方法中调用 MobclickAgent.onPause(Context)。
常规作法,建新BaseActivity.java文件,而后全部的Activity集成BaseActivity.java
package com.why.project.umengappdemo; import android.support.v7.app.AppCompatActivity; import com.umeng.analytics.MobclickAgent; /** * Created by HaiyuKing * Used */ public class BaseActivity extends AppCompatActivity { //友盟统计SDK @Override protected void onResume() { super.onResume(); MobclickAgent.onResume(this); } //友盟统计SDK @Override protected void onPause() { super.onPause(); MobclickAgent.onPause(this); } }
参考官网或者阅读参考资料。
#=====================友盟统计sdk===================== -keep class com.umeng.** {*;} -keepclassmembers class * { public <init> (org.json.JSONObject); } -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); }