版權聲明:本文爲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); }