# 基础指南

欢迎使用腾讯移动分析（简称MTA）Android统计SDK，您可以按照下面[AndroidStudio自动接入](https://dtsupport.gitbook.io/mta-docs/app/app_android/pages/-M7juN6gsxUVwNo5-lRP#自动接入（推荐）)和[eclipse手动接入](https://dtsupport.gitbook.io/mta-docs/app/app_android/pages/-M7juN6gsxUVwNo5-lRP#手动集成（以eclipse为例）)开始集成SDK。

## 适用范围

本指南适用MTA Android SDK 3.x.x版本

## 集成准备 —— 创建应用

登陆官网管理台，按照步骤提示注册应用，可获得AppKey，获取位置如下图所示：

![](/files/-M7juNS4ro9iwhOPpzGs)

## 集成接入

### 自动接入（推荐）

AndroidStudio上可以使用jcenter远程仓库自动接入，不需要在项目中导入jar包和so文件；在AndroidManifest.xml中不需要配置MTA相关的内容， jcenter 会自动导入。（升级SDK删除老版本SDK的配置）

在app build.gradle文件下配置 以下内容

```markup
android {
    defaultConfig {
        ndk {
        //根据需要 自行选择添加的对应cpu类型的.so库。
        abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
        // 还可以添加 'x86', 'x86_64', 'mips', 'mips64'
        }
        manifestPlaceholders = [
        MTA_APPKEY:"注册应用的appkey",
        MTA_CHANNEL:"渠道名称"
        ]
    }
}

dependencies {
// mta包稳定版和测试版本二选一，mid包必须要添加 

//mta 3.4.7 稳定版
compile 'com.qq.mta:mta:3.4.7-Release'

//mid jar包 必须添加
compile 'com.tencent.mid:mid:4.06-Release'



}
```

***注意***

如果在添加以上 abiFilter 配置之后android Studio出现以下提示：

NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin. 则在 Project 根目录的gradle.properties文件中添加：

android.useDeprecatedNdk=true

### 手动集成（以eclipse为例）

#### 向工程中导入SDK

前往[SDK下载中心](http://mta.qq.com/mta/ctr_index/download)下载SDK压缩包，解压至本地目录，将其中lib目录下的mta-sdk-x.x.x.jar\[1]复制到您的应用工程libs目录（若不存在请新建一个）中。以Eclipse为例：右键点击工程根目录→选择Properties→ Java Build Path →Libraries→点击Add JARs…选中当前工程libs目彔下的mta-sdk-x.x.x.jar文件，点击“OK”按钮即导入成功。

#### 配置AndroidManifest.xml文件

需要添加下面两类配置：

| Meta-Data      | 类型                          | 用途                                                                                                                     | 必选 |
| -------------- | --------------------------- | ---------------------------------------------------------------------------------------------------------------------- | -- |
| TA\_APPKEY     | String，不能为纯数字字符串            | MTA提供给每个app的appkey，用来定位该应用程序的唯一性                                                                                       | 是  |
| InstallChannel | String，若为纯数字字符串不能超过int表示的范围 | 用来标注应用推广渠道，区分新用户的来源来查看统计[多渠道打包配置](https://dtsupport.gitbook.io/mta-docs/app/app_android/pages/-M7juN6gsxUVwNo5-lRP#注意) | 是  |
| Provider       | Android组件                   | 兼容Android 6.0系统（MID 3.0以上版本才需要）                                                                                        | 否  |

**注意：** appkey和installChannel也能够在代码中设置，见APP设置接口

| 需要的权限                    | 用途                                                | 必选 |
| ------------------------ | ------------------------------------------------- | -- |
| INTERNET                 | 允许应用程序联网，以便向我们的服务器端发送数据                           | 是  |
| READ\_PHONE\_STATE       | 获取用户手机的IMEI，用来唯一的标识用户。(运行在平板上的应用会读取mac地址作为用户的唯一标识 | 是  |
| ACCESS\_NETWORK\_STATE   | 获取设备的网络状态                                         | 是  |
| ACCESS\_WIFI\_STATE      | 获取设备的WIFI网络状态                                     | 是  |
| WRITE\_EXTERNAL\_STORAGE | 获取SD卡信息                                           | 是  |

权限示例文件：

```markup
<!-- 必选权限< -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!-- 可选权限< -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>


<application ......>


<provider
    android:name="com.tencent.mid.api.MidProvider"
    android:authorities="你的包名.TENCENT.MID.V3"
    android:exported="true" >
</provider>
<!-- 请将value改为管理台申请的AppKey < -->
<meta-data android:name="TA_APPKEY" android:value="ABCDEFG12233456"/>
<!-- 请将value改为app发布对应的渠道，不同的发布渠道使用不同的名字 < -->
<meta-data android:name="InstallChannel" android:value="play"/>


</application>
```

## 添加统计代码

### 常用类说明

MTA主要使用到2个类

```java
import com.tencent.stat.StatConfig
import com.tencent.stat.StatService
```

StatConfig类：MTA配置类，可以设置上报策略、Debug开关、session超时时间等，需要在初始化MTA之前被调用才能及时生效，通常使用SDK默认配置即可。

StatService类：MTA统计类，需要开发者按下面的步骤主动调用接口。

### 添加基础统计代码

在App初始化之处，通常为Application或MainActivity的onCreate()方法内，添加以下调用

```java
        // 打开Logcat输出，上线时，一定要关闭
        StatConfig.setDebugEnable(true);
        // 注册activity生命周期，统计时长
        StatService.registerActivityLifecycleCallbacks(this.getApplication());
```

## 集成测试验证

当您完成以下的MTA嵌入工作后，启动app，触发MTA统计接口，便会自动上报数据。

在应用的接入配置页开始SDK集成验证，查看是否接入成功，如下图所示： ![](/files/-M7juNSAbh4SmtbJGFbv)

SDK会实时上报数据请等待验证，验证耗时约1分钟，超时请按以下顺序检查：

（1）设备的wifi是否打开，是否正常联网；

（2）APPKEY、权限等设置是否正确；

（3）确保已触发MTA统计接口；

（4）打开MTA的debug开关，查看标签为“MtaSDK“的logcat提示，是否有错误日志；成功上报的日志通常为

```
I/MtaSDK: [StatDispatcher(522): StatDispatcher.java:288] - http recv response status code:200, content length:29
```

（5）如果logcat提示`Compatibility problem was found in this device!`，请先删除apk重新安装，可参考兼容性错误。

## 升级SDK

新版本SDK兼容老版本接口，升级时只需要替换旧的jar包即可：先在工程所在libs目录下删除旧的jar包，复制新jar包到libs路径，同时，在Java Build Path里面删除旧的jar包，并添加新jar包引用。

## 代码混淆

请保留以下选项：

-keep class com.tencent.stat.\*{\*;}

-keep class com.tencent.mid.\*{\*;}

## 注意

* **若使用自定义或第三方打包工具打包，建议通过代码接口的方式配置渠道，具体步骤：**

1. 渠道打包工具打包
2. 代码中，读取打包工具设置的渠道
3. 初始化时，调用StatConfig.setInstallChannel(ctx, channel)设置MTA渠道

* **如需同时统计app内的h5页面数据，请根据**[**hybird app android使用说明**](https://mta.qq.com/docs/hybirid_app.html)**进行集成**


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dtsupport.gitbook.io/mta-docs/app/app_android/app_android_introduction.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
