<commit_before># Android SDK 集成指南

## 使用提示

本文是 JPush Android SDK 标准的集成指南文档。用以指导 SDK 的使用方法，默认读者已经熟悉 IDE（Eclipse 或者 Android Studio）的基本使用方法，以及具有一定的 Android 编程知识基础。

本篇指南匹配的 JPush Android SDK 版本为：3.0.0 及以后版本。

+ [3 分钟快速 Demo（Android）](android_3m/)：如果您想要快速地测试、感受下极光推送的效果，请参考本文在几分钟内跑通 Demo。
+ 极光推送[文档网站](http://docs.jiguang.cn/)上，有极光推送相关的所有指南、API、教程等全部的文档。包括本文档的更新版本，都会及时地发布到该网站上。
+ 如果您看到本文档，但还未下载 Android SDK，请访问[ SDK 下载页面](http://docs.jiguang.cn/jpush/resources/)下载。

## 产品功能说明

极光推送（JPush）是一个端到端的推送服务，使得服务器端消息能够及时地推送到终端用户手机上，让开发者积极地保持与用户的连接，从而提高用户活跃度、提高应用的留存率。极光推送客户端支持 Android，iOS 两个平台。

本 Android SDK 方便开发者基于 JPush 来快捷地为 Android App 增加推送功能。

### 主要功能

+ 保持与服务器的长连接，以便消息能够即时推送到达客户端
+ 接收通知与自定义消息，并向开发者 App 传递相关信息

### 主要特点

+ 客户端维持连接占用资源少、耗电低
+ SDK 丰富的接口，可定制通知栏提示样式
+ 服务器大容量、稳定

### jpush-android-3.x.x-release.zip 集成压缩包内容

+ AndroidManifest.xml
    + 客户端嵌入 SDK 参考的配置文件
+ libs/jcore-android.x.x.x.jar
    + 极光开发者服务的核心包。
+ libs/jpush-android-3.x.y.jar
    + JPush SDK 开发包。
+ libs/(cpu-type)/libjcore1xx.so
    + 各种 CPU 类型的 native 开发包。
+ res
    + 集成 SDK 必须添加的资源文件
+ example
    + 是一个完整的 Android 项目，通过这个演示了 JPush SDK 的基本用法，可以用来做参考。


### SDK 所支持的 Android 系统版本

目前 SDK 只支持 Android 2.3 或以上版本的手机系统。

富媒体信息流功能则需 Android 3.0 或以上版本的系统。


## jcenter 自动集成步骤


***说明*** ： 使用 jcenter 自动集成的开发者，不需要在项目中添加 jar 和 so，jcenter 会自动完成依赖；在 AndroidManifest.xml 中不需要添加任何 JPush SDK 相关的配置，jcenter 会自动导入。

>***注意*** ：如果需要处理收到的消息、使用 3.0.7 版本支持的别名与标签的新接口，AndroidManifest 中的自定义广播接收器仍需开发者手动配置，参考 SDK 压缩包里的 AndroidManifest.xml 样例文件。

+ 如果开发者需要修改组件属性，可以在本地的 AndroidManifest 中定义同名的组件并配置想要的属性，然后用 xmlns:tools 来控制本地组件覆盖 jcenter 上的组件。示例：

		<manifest xmlns:android="http://schemas.android.com/apk/res/android"
			package="com.android.tests.flavorlib.app"
			xmlns:tools="http://schemas.android.com/tools">

			<application
				android:icon="@drawable/icon"
				android:name="com.example.jpushdemo.ExampleApplication"
				android:label="@string/app_name" >

				<service android:name="cn.jpush.android.service.PushService"
            		android:process=":multiprocess"
            		tools:node="replace" >

            		……
            	</service>

            ……
          </application>

          ……
		</manifest>


+ 确认 android studio 的 Project 根目录的主 gradle 中配置了 jcenter 支持。（新建 project 默认配置就支持）

        buildscript {
            repositories {
                jcenter()
            }
            ......
        }

        allprojects {
            repositories {
                jcenter()
            }
        }



+ 在 module 的 gradle 中添加依赖和 AndroidManifest 的替换变量。



        android {
            ......
            defaultConfig {
                applicationId "com.xxx.xxx" //JPush 上注册的包名.
                ......

                ndk {
                    //选择要添加的对应 cpu 类型的 .so 库。
                    abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
                    // 还可以添加 'x86', 'x86_64', 'mips', 'mips64'
                }

                manifestPlaceholders = [
                    JPUSH_PKGNAME : applicationId,
                    JPUSH_APPKEY : "你的 Appkey ", //JPush 上注册的包名对应的 Appkey.
                    JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.
                ]
                ......
            }
            ......
        }


        dependencies {
            ......

            compile 'cn.jiguang.sdk:jpush:3.3.2'  // 此处以JPush 3.3.2 版本为例。
            compile 'cn.jiguang.sdk:jcore:2.0.1'  // 此处以JCore 2.0.1 版本为例。
            ......
        }

      ***注*** : **如果你使用的 JCore 是 2.0.0 及以上的版本，需要额外在 Androidmanifest 中配置一个Service**，以在更多手机平台上获得更稳定的支持，示例如下。（JCore1.x版本不需要）
	
	     <!-- Since JCore2.0.0 Required SDK核心功能-->
	     <!-- 可配置android:process参数将Service放在其他进程中；android:enabled属性不能是false -->
         <!-- 这个是自定义Service，要继承极光JCommonService，可以在更多手机平台上使得推送通道保持的更稳定 -->
	     <service android:name="xx.xx.XService"
                 android:enabled="true"
                 android:exported="false"
                 android:process=":pushcore">
                 <intent-filter>
                     <action android:name="cn.jiguang.user.service.action" />
                 </intent-filter>
         </service>    
         
      ***注*** : **从JPush3.0.7开始，需要配置继承JPushMessageReceiver的广播，原来如果配了MyReceiver现在可以弃用。示例如下。

         <!-- Required since 3.0.7 -->
         <!-- 新的 tag/alias 接口结果返回需要开发者配置一个自定的广播 -->
         <!-- 3.3.0开始所有事件将通过该类回调 --><commit_msg>update version<commit_after># Android SDK 集成指南

## 使用提示

本文是 JPush Android SDK 标准的集成指南文档。用以指导 SDK 的使用方法，默认读者已经熟悉 IDE（Eclipse 或者 Android Studio）的基本使用方法，以及具有一定的 Android 编程知识基础。

本篇指南匹配的 JPush Android SDK 版本为：3.0.0 及以后版本。

+ [3 分钟快速 Demo（Android）](android_3m/)：如果您想要快速地测试、感受下极光推送的效果，请参考本文在几分钟内跑通 Demo。
+ 极光推送[文档网站](http://docs.jiguang.cn/)上，有极光推送相关的所有指南、API、教程等全部的文档。包括本文档的更新版本，都会及时地发布到该网站上。
+ 如果您看到本文档，但还未下载 Android SDK，请访问[ SDK 下载页面](http://docs.jiguang.cn/jpush/resources/)下载。

## 产品功能说明

极光推送（JPush）是一个端到端的推送服务，使得服务器端消息能够及时地推送到终端用户手机上，让开发者积极地保持与用户的连接，从而提高用户活跃度、提高应用的留存率。极光推送客户端支持 Android，iOS 两个平台。

本 Android SDK 方便开发者基于 JPush 来快捷地为 Android App 增加推送功能。

### 主要功能

+ 保持与服务器的长连接，以便消息能够即时推送到达客户端
+ 接收通知与自定义消息，并向开发者 App 传递相关信息

### 主要特点

+ 客户端维持连接占用资源少、耗电低
+ SDK 丰富的接口，可定制通知栏提示样式
+ 服务器大容量、稳定

### jpush-android-3.x.x-release.zip 集成压缩包内容

+ AndroidManifest.xml
    + 客户端嵌入 SDK 参考的配置文件
+ libs/jcore-android.x.x.x.jar
    + 极光开发者服务的核心包。
+ libs/jpush-android-3.x.y.jar
    + JPush SDK 开发包。
+ libs/(cpu-type)/libjcore1xx.so
    + 各种 CPU 类型的 native 开发包。
+ res
    + 集成 SDK 必须添加的资源文件
+ example
    + 是一个完整的 Android 项目，通过这个演示了 JPush SDK 的基本用法，可以用来做参考。


### SDK 所支持的 Android 系统版本

目前 SDK 只支持 Android 2.3 或以上版本的手机系统。

富媒体信息流功能则需 Android 3.0 或以上版本的系统。


## jcenter 自动集成步骤


***说明*** ： 使用 jcenter 自动集成的开发者，不需要在项目中添加 jar 和 so，jcenter 会自动完成依赖；在 AndroidManifest.xml 中不需要添加任何 JPush SDK 相关的配置，jcenter 会自动导入。

>***注意*** ：如果需要处理收到的消息、使用 3.0.7 版本支持的别名与标签的新接口，AndroidManifest 中的自定义广播接收器仍需开发者手动配置，参考 SDK 压缩包里的 AndroidManifest.xml 样例文件。

+ 如果开发者需要修改组件属性，可以在本地的 AndroidManifest 中定义同名的组件并配置想要的属性，然后用 xmlns:tools 来控制本地组件覆盖 jcenter 上的组件。示例：

		<manifest xmlns:android="http://schemas.android.com/apk/res/android"
			package="com.android.tests.flavorlib.app"
			xmlns:tools="http://schemas.android.com/tools">

			<application
				android:icon="@drawable/icon"
				android:name="com.example.jpushdemo.ExampleApplication"
				android:label="@string/app_name" >

				<service android:name="cn.jpush.android.service.PushService"
            		android:process=":multiprocess"
            		tools:node="replace" >

            		……
            	</service>

            ……
          </application>

          ……
		</manifest>


+ 确认 android studio 的 Project 根目录的主 gradle 中配置了 jcenter 支持。（新建 project 默认配置就支持）

        buildscript {
            repositories {
                jcenter()
            }
            ......
        }

        allprojects {
            repositories {
                jcenter()
            }
        }



+ 在 module 的 gradle 中添加依赖和 AndroidManifest 的替换变量。



        android {
            ......
            defaultConfig {
                applicationId "com.xxx.xxx" //JPush 上注册的包名.
                ......

                ndk {
                    //选择要添加的对应 cpu 类型的 .so 库。
                    abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
                    // 还可以添加 'x86', 'x86_64', 'mips', 'mips64'
                }

                manifestPlaceholders = [
                    JPUSH_PKGNAME : applicationId,
                    JPUSH_APPKEY : "你的 Appkey ", //JPush 上注册的包名对应的 Appkey.
                    JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.
                ]
                ......
            }
            ......
        }


        dependencies {
            ......

            compile 'cn.jiguang.sdk:jpush:3.3.2'  // 此处以JPush 3.3.2 版本为例。
            compile 'cn.jiguang.sdk:jcore:2.1.0'  // 此处以JCore 2.1.0 版本为例。
            ......
        }

      ***注*** : **如果你使用的 JCore 是 2.0.0 及以上的版本，需要额外在 Androidmanifest 中配置一个Service**，以在更多手机平台上获得更稳定的支持，示例如下。（JCore1.x版本不需要）
	
	     <!-- Since JCore2.0.0 Required SDK核心功能-->
	     <!-- 可配置android:process参数将Service放在其他进程中；android:enabled属性不能是false -->
         <!-- 这个是自定义Service，要继承极光JCommonService，可以在更多手机平台上使得推送通道保持的更稳定 -->
	     <service android:name="xx.xx.XService"
                 android:enabled="true"
                 android:exported="false"
                 android:process=":pushcore">
                 <intent-filter>
                     <action android:name="cn.jiguang.user.service.action" />
                 </intent-filter>
         </service>    
         
      ***注*** : **从JPush3.0.7开始，需要配置继承JPushMessageReceiver的广播，原来如果配了MyReceiver现在可以弃用。示例如下。

         <!-- Required since 3.0.7 -->
         <!-- 新的 tag/alias 接口结果返回需要开发者配置一个自定的广播 -->
         <!-- 3.3.0开始所有事件将通过该类回调 -->
{'fraction_non_alphanumeric': 0.1247272309635925, 'fraction_numerical': 0.012633513265188929, 'mean_word_length': 2.1166785969935575, 'pattern_counts': {'":': 4, '<': 37, '<?xml version=': 0, '>': 39, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 12}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5887741', 'n_tokens_mistral': 4388, 'n_tokens_neox': 4599, 'n_words': 505}