Ver código fonte

推送集成

master
xuqm 1 ano atrás
pai
commit
87ac219978
14 arquivos alterados com 376 adições e 77 exclusões
  1. +196
    -0
      README.md
  2. +4
    -4
      app/build.gradle
  3. +7
    -1
      app/src/main/java/cn/org/bjca/trust/pushdemo/MainActivity.kt
  4. +15
    -0
      push/src/main/java/cn/org/bjca/trust/push/common/MessageHelper.kt
  5. +1
    -0
      push/src/main/java/cn/org/bjca/trust/push/db/device/Device.kt
  6. +6
    -6
      push/src/main/java/cn/org/bjca/trust/push/db/device/DeviceDao.kt
  7. +10
    -3
      push/src/main/java/cn/org/bjca/trust/push/huawei/HwMessageService.kt
  8. +1
    -1
      push/src/main/java/cn/org/bjca/trust/push/kit/ImClientInterface.kt
  9. +1
    -2
      push/src/main/java/cn/org/bjca/trust/push/kit/SdkInterface.kt
  10. +14
    -25
      push/src/main/java/cn/org/bjca/trust/push/manager/PushSdkManager.kt
  11. +7
    -6
      push/src/main/java/cn/org/bjca/trust/push/message/client/ImClient.kt
  12. +36
    -27
      push/src/main/java/cn/org/bjca/trust/push/provider/PushProvider.kt
  13. +2
    -2
      settings.gradle
  14. +76
    -0
      华为sdk集成.md

+ 196
- 0
README.md Ver arquivo

@@ -17,6 +17,202 @@



# 1.快速开始

- 添加以下仓库

- ```groovy
maven {
url "https://repo.eclipse.org/content/repositories/paho-releases/"
}
```

- 添加以下依赖

- ```groovy
implementation 'cn.org.bjca.trus:push:0.0.1.011'
```

### 如果不需要推送服务,跳过以下配置

#### 应用级(app)`build.gradle`文件里面,根据实际需求配置

```groovy
android {
defaultConfig {
manifestPlaceholders = [
// 小米推送参数
XIAOMI_APP_ID : "2882303761520224743",
XIAOMI_APP_KEY: "5762022470743",

// 华为推送参数
HUAWEI_APP_ID : "107729977",
]
}
}
```



#### 1.华为[123](./README.md)

- ##### 根据[华为推送服务配置文档](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-config-agc-0000001050170137)完成应用创建和推送服务的开通

- ##### 登录[AppGallery Connect](https://developer.huawei.com/consumer/cn/service/josp/agc/index.html)网站,点击“我的项目”。

- ##### 在项目列表中找到您的项目,在项目中点击需要集成HMS Core SDK的应用。

- ##### 在“项目设置 > 常规”页面的“应用”区域,点击“agconnect-services.json”下载配置文件。

![点击放大](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtyPub/011/111/111/0000000000011111111.20230221102806.12268288190126774767350517557615:50001231000000:2800:12ABACEF3849B9BA1E7CDABD51E96D6851FABECD55E05713EAAC7B0A487F73E1.png?needInitFileName=true?needInitFileName=true)

- ##### 将“agconnect-services.json”文件拷贝到应用级根目录下。

![img](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtyPub/011/111/111/0000000000011111111.20230221102806.48189746150828014962362521369272:50001231000000:2800:A389367A1252831B6E662C4D5340473CB088CB9B317B4418003379F782052999.png?needInitFileName=true?needInitFileName=true)
- ##### 配置HMS Core SDK的Maven仓地址


Android Studio的代码库配置在Gradle插件7.0以下版本、7.0版本和7.1及以上版本有所不同。请根据您当前的Gradle插件版本,选择对应的配置过程。

| [7.0以下版本](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-integrating-sdk-0000001050040084#ZH-CN_TOPIC_0000001087049212__zh-cn_topic_0000001050041594_li547444421611) | [7.0版本](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-integrating-sdk-0000001050040084#ZH-CN_TOPIC_0000001087049212__zh-cn_topic_0000001050041594_li1796424071918) | [7.1及以上版本](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-integrating-sdk-0000001050040084#ZH-CN_TOPIC_0000001087049212__zh-cn_topic_0000001050041594_li1345452582116) |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
| | | |


- ##### 添加AGC插件配置。请根据实际情况选择:

- 方式一:在文件头部声明下一行添加如下配置。

```groovy
apply plugin: 'com.huawei.agconnect'
```

- 方式二:在`plugins`中添加如下配置

```groovy
plugins { id 'com.android.application' // 添加如下配置 id 'com.huawei.agconnect'}
```



- ##### 配置签名

将[生成签名证书指纹](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-config-agc-0000001050170137#section193351110105114)步骤中生成的签名文件拷贝到工程的app目录下,在build.gradle文件中配置签名。

```groovy
android {
signingConfigs {
config {
// 根据您实际的签名信息,替换以下参数中的xxxx
keyAlias 'xxxx'
keyPassword 'xxxx'
storeFile file('xxxx.jks')
storePassword 'xxxx'
}
}

buildTypes {
debug {
signingConfig signingConfigs.config
}
release {
signingConfig signingConfigs.config
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
```

- ## 同步工程

在完成以上的配置后,点击工具栏中的gradle同步图标完成“build.gradle”文件的同步,然后将相关依赖下载到本地。

![img](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtyPub/011/111/111/0000000000011111111.20230221102807.71643474582974097971276481469874:50001231000000:2800:6E12E277C5CE78BD6042495DB9A695384BAEAFA3301E04B4BB0EBED6FB371E4A.png?needInitFileName=true?needInitFileName=true)






# 2.注册im服务














































































+ 4
- 4
app/build.gradle Ver arquivo

@@ -18,10 +18,10 @@ android {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

manifestPlaceholders = [
XIAOMI_APP_ID : "2882303761520224743",
XIAOMI_APP_KEY : "5762022470743",
XIAOMI_APP_ID : "2882303761520224743",
XIAOMI_APP_KEY: "5762022470743",

HUAWEI_APP_ID : "107729977",
HUAWEI_APP_ID : "107729977",
]
}

@@ -54,7 +54,7 @@ android {
}
}
dependencies {
implementation fileTree(dir: 'libs',includes: ['*.jar','*.aar'])
implementation fileTree(dir: 'libs', includes: ['*.jar', '*.aar'])

implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.4.1'


+ 7
- 1
app/src/main/java/cn/org/bjca/trust/pushdemo/MainActivity.kt Ver arquivo

@@ -4,17 +4,23 @@ import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import cn.org.bjca.trust.push.PushSdk
import cn.org.bjca.trust.push.enums.ConnAckReturnCode
import cn.org.bjca.trust.push.enums.OsType
import cn.org.bjca.trust.push.message.callback.CallbackListener
import cn.org.bjca.trust.push.message.msg.Message
import cn.org.bjca.trust.push.message.msg.SendMessage

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
PushSdk.instance.register(this, "xuqinmin")
PushSdk.instance.register("xuqinmin")
findViewById<TextView>(R.id.register).setOnClickListener {
}
findViewById<TextView>(R.id.send).setOnClickListener {
PushSdk.instance.sendTextMessage("xuqinmin", "你好啊${System.currentTimeMillis()}")
}

}

}

+ 15
- 0
push/src/main/java/cn/org/bjca/trust/push/common/MessageHelper.kt Ver arquivo

@@ -1,6 +1,7 @@
package cn.org.bjca.trust.push.common

import cn.org.bjca.trust.push.enums.MsgType
import cn.org.bjca.trust.push.message.ImManager
import cn.org.bjca.trust.push.message.bean.TextMessage
import cn.org.bjca.trust.push.message.bean.UnknownMessage
import cn.org.bjca.trust.push.message.msg.Message
@@ -35,4 +36,18 @@ object MessageHelper {

return message
}

@JvmStatic
fun sendMessage(clientId: String, message: Message) {
LogHelper.d("------app端调用发送消息-----")
val sendMessage = SendMessage()
sendMessage.messageId = message.messageId ?: CommonHelper.generateMessageId()
sendMessage.timestamp = System.currentTimeMillis()
sendMessage.fromClientId = clientId
sendMessage.toClientId = message.toClientId
sendMessage.target = clientId
sendMessage.messageType = message.msgType.value
sendMessage.message = message.createContentJsonStr()
ImManager.instance.sendMessage(sendMessage)
}
}

+ 1
- 0
push/src/main/java/cn/org/bjca/trust/push/db/device/Device.kt Ver arquivo

@@ -8,6 +8,7 @@ import androidx.room.PrimaryKey
data class Device(
@PrimaryKey(autoGenerate = true) var p_id: Int? = null,
@ColumnInfo(name = "device_id") var device: String = "",
@ColumnInfo(name = "push_token") var pushToken: String = "",
// 厂商 MANUFACTURER
@ColumnInfo(name = "manufacturer") var manufacturer: String = "",
// 品牌 BRAND


+ 6
- 6
push/src/main/java/cn/org/bjca/trust/push/db/device/DeviceDao.kt Ver arquivo

@@ -1,9 +1,6 @@
package cn.org.bjca.trust.push.db.device

import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.Query
import androidx.room.*

@Dao
interface DeviceDao {
@@ -11,8 +8,11 @@ interface DeviceDao {
fun getAll(): List<Device>

@Insert
fun insertAll(vararg users: Device)
fun insertAll(vararg devices: Device)

@Update
fun update(device: Device)

@Delete
fun delete(user: Device)
fun delete(device: Device)
}

+ 10
- 3
push/src/main/java/cn/org/bjca/trust/push/huawei/HwMessageService.kt Ver arquivo

@@ -2,12 +2,19 @@ package cn.org.bjca.trust.push.huawei

import android.os.Bundle
import cn.org.bjca.trust.push.common.LogHelper
import cn.org.bjca.trust.push.db.DbHelper
import com.huawei.hms.push.HmsMessageService

class HwMessageService: HmsMessageService() {
class HwMessageService : HmsMessageService() {

override fun onNewToken(p0: String?, p1: Bundle?) {
override fun onNewToken(p0: String, p1: Bundle?) {
super.onNewToken(p0, p1)
LogHelper.e( "get token:$p0")
LogHelper.e("get token:$p0")
val devices = DbHelper.getDataBase().deviceDao().getAll()
if (devices.isNotEmpty()) {
DbHelper.getDataBase().deviceDao().update(devices[0].apply {
pushToken = p0
})
}
}
}

+ 1
- 1
push/src/main/java/cn/org/bjca/trust/push/kit/ImClientInterface.kt Ver arquivo

@@ -5,7 +5,7 @@ import cn.org.bjca.trust.push.message.client.ImConnectOptions
import cn.org.bjca.trust.push.message.msg.SendMessage

interface ImClientInterface {
fun connect(context: Context, mImConnectOptions: ImConnectOptions)
fun connect(mImConnectOptions: ImConnectOptions)
fun reConnect()
fun disConnect()
fun isConnect(): Boolean


+ 1
- 2
push/src/main/java/cn/org/bjca/trust/push/kit/SdkInterface.kt Ver arquivo

@@ -8,13 +8,12 @@ interface SdkInterface {
/**
* 注册设备
*/
fun register(context: Context, userId: String)
fun register(userId: String)
fun unregister(context: Context, userId: String)

/**
* 消息相关
*/
fun setMsgCallback(callback: CallbackListener)
fun sendMessage(message: Message)
fun sendTextMessage(toUserId:String, msg: String)
}

+ 14
- 25
push/src/main/java/cn/org/bjca/trust/push/manager/PushSdkManager.kt Ver arquivo

@@ -2,9 +2,8 @@ package cn.org.bjca.trust.push.manager

import android.content.Context
import cn.org.bjca.trust.push.BuildConfig
import cn.org.bjca.trust.push.common.CommonHelper
import cn.org.bjca.trust.push.common.DeviceHelper
import cn.org.bjca.trust.push.common.LogHelper
import cn.org.bjca.trust.push.common.MessageHelper
import cn.org.bjca.trust.push.enums.OsType
import cn.org.bjca.trust.push.kit.SdkInterface
import cn.org.bjca.trust.push.message.ImCallback
@@ -12,14 +11,18 @@ import cn.org.bjca.trust.push.message.ImManager
import cn.org.bjca.trust.push.message.bean.TextMessage
import cn.org.bjca.trust.push.message.callback.CallbackListener
import cn.org.bjca.trust.push.message.client.ImConnectOptions
import cn.org.bjca.trust.push.message.msg.Message
import cn.org.bjca.trust.push.message.msg.SendMessage

class PushSdkManager : SdkInterface {

lateinit var imConnectOptions: ImConnectOptions

override fun register(context: Context, userId: String) {
override fun register(userId: String) {
registerIm(userId)
registerPush(userId)
}

private fun registerPush(userId: String) {}
private fun registerIm(userId: String) {
//先关闭已有连接
if (ImManager.instance.isConnect() || ImManager.instance.isConnecting()) {
ImManager.instance.disConnect()
@@ -45,7 +48,7 @@ class PushSdkManager : SdkInterface {
)
}
imConnectOptions.callback = ImCallback()
ImManager.instance.connect(context, imConnectOptions)
ImManager.instance.connect(imConnectOptions)
}

override fun unregister(context: Context, userId: String) {
@@ -58,25 +61,11 @@ class PushSdkManager : SdkInterface {
}

override fun sendTextMessage(toUserId: String, msg: String) {
sendMessage(TextMessage().apply {
toClientId = toUserId
text = msg
})
MessageHelper.sendMessage(imConnectOptions.clientId,
TextMessage().apply {
toClientId = toUserId
text = msg
})
}

override fun sendMessage(message: Message) {
LogHelper.d("------app端调用发送消息-----")
val sendMessage = SendMessage()
sendMessage.messageId = message.messageId ?: CommonHelper.generateMessageId()
sendMessage.timestamp = System.currentTimeMillis()
sendMessage.fromClientId = imConnectOptions.clientId
sendMessage.toClientId = message.toClientId
sendMessage.target = imConnectOptions.clientId
sendMessage.messageType = message.msgType.value
sendMessage.message = message.createContentJsonStr()


ImManager.instance.sendMessage(sendMessage)
}
}

+ 7
- 6
push/src/main/java/cn/org/bjca/trust/push/message/client/ImClient.kt Ver arquivo

@@ -1,6 +1,5 @@
package cn.org.bjca.trust.push.message.client

import android.content.Context
import cn.org.bjca.trust.push.common.LogHelper
import cn.org.bjca.trust.push.common.MessageHelper
import cn.org.bjca.trust.push.common.json.GsonImplHelp
@@ -21,10 +20,10 @@ class ImClient : ImClientInterface {
private lateinit var mqttSendClient: MqttClient
private lateinit var mqttArrivedClient: MqttClient
private lateinit var options: MqttConnectOptions
private lateinit var mContext: Context
private var isConnecting = false
override fun connect(context: Context, mImConnectOptions: ImConnectOptions) {
mContext = context
private var startConnect = false
override fun connect(mImConnectOptions: ImConnectOptions) {
startConnect = true
connectOptions = mImConnectOptions
init()
mConnect()
@@ -36,12 +35,12 @@ class ImClient : ImClientInterface {
Thread {
try {
if (!mqttSendClient.isConnected) mqttSendClient.connect(options)
} catch (e: java.lang.Exception) {
} catch (e: Exception) {
connectOptions.callback?.connectError(ConnAckReturnCode.CONNECTED)
}
try {
if (!mqttArrivedClient.isConnected) mqttArrivedClient.connect(options)
} catch (e: java.lang.Exception) {
} catch (e: Exception) {
connectOptions.callback?.connectError(ConnAckReturnCode.CONNECTED)
}
isConnecting = false
@@ -132,11 +131,13 @@ class ImClient : ImClientInterface {
}

override fun reConnect() {
if (!startConnect) return
init()
mConnect()
}

override fun disConnect() {
startConnect = false
init()
mqttArrivedClient.disconnect()
mqttSendClient.disconnect()


+ 36
- 27
push/src/main/java/cn/org/bjca/trust/push/provider/PushProvider.kt Ver arquivo

@@ -33,46 +33,61 @@ class PushProvider : ContentProvider() {
//初始化日志收集系统
CrashHandler.init()
// 初始化唯一码
initDevice()
initDevice()?.let {
when (it.manufacturer) {
"HUAWEI" -> {
// 华为推送
try {
HmsMessaging.getInstance(context).isAutoInitEnabled = true
} catch (e: Exception) {
LogHelper.e("注册华为sdk失败", e)
}
}
}
}

// 华为推送
HmsMessaging.getInstance(context).isAutoInitEnabled = true

// MiPushClient.registerPush(this, APP_ID, APP_KEY);

return true
}

private fun initDevice() {
val device = DbHelper.getDataBase().deviceDao().getAll()
if (device.isEmpty()) {
val d = Device()
private fun initDevice(): Device? {
val devices = DbHelper.getDataBase().deviceDao().getAll()
var device: Device? = null
if (devices.isEmpty()) {
device = Device()
val fields = Build::class.java.declaredFields
for (field in fields) {
try {
field.isAccessible = true
when (field.name) {
"MANUFACTURER" -> d.manufacturer = CommonHelper.anyToString(field[null])
"BRAND" -> d.brand = CommonHelper.anyToString(field[null])
"MODEL" -> d.model = CommonHelper.anyToString(field[null])
"CPU_ABI" -> d.cpuAbi = CommonHelper.anyToString(field[null])
"MANUFACTURER" -> device.manufacturer =
CommonHelper.anyToString(field[null])
"BRAND" -> device.brand = CommonHelper.anyToString(field[null])
"MODEL" -> device.model = CommonHelper.anyToString(field[null])
"CPU_ABI" -> device.cpuAbi = CommonHelper.anyToString(field[null])
"FINGERPRINT" -> {
d.fingerprint = CommonHelper.anyToString(field[null])
d.device = CommonHelper.anyToString(field[null])
device.fingerprint = CommonHelper.anyToString(field[null])
device.device = CommonHelper.anyToString(field[null])
}
"SUPPORTED_32_BIT_ABIS" -> d.supported32BitAbis =
"SUPPORTED_32_BIT_ABIS" -> device.supported32BitAbis =
CommonHelper.anyToString(field[null])
"SUPPORTED_64_BIT_ABIS" -> device.supported64BitAbis =
CommonHelper.anyToString(field[null])
"SUPPORTED_64_BIT_ABIS" -> d.supported64BitAbis =
"SUPPORTED_ABIS" -> device.supportedAbis =
CommonHelper.anyToString(field[null])
"SUPPORTED_ABIS" -> d.supportedAbis = CommonHelper.anyToString(field[null])
}
} catch (e: Exception) {
LogHelper.e("an error occured when collect crash info", e)
}
}
DbHelper.getDataBase().deviceDao().insertAll(d)
DbHelper.getDataBase().deviceDao().insertAll(device)
} else {
device = devices[0]
}
LogHelper.e(CommonHelper.anyToString(DbHelper.getDataBase().deviceDao().getAll()))
LogHelper.d(CommonHelper.anyToString(device))
return device
}

private fun initDb() {
@@ -95,11 +110,8 @@ class PushProvider : ContentProvider() {

val table = getTableName(uri)
return if (table != null) DbHelper.getDataBase().openHelper.readableDatabase.query(
SupportSQLiteQueryBuilder.builder(table)
.selection(selection, selectionArgs)
.columns(projection)
.orderBy(sortOrder)
.create()
SupportSQLiteQueryBuilder.builder(table).selection(selection, selectionArgs)
.columns(projection).orderBy(sortOrder).create()
) else null
}

@@ -116,10 +128,7 @@ class PushProvider : ContentProvider() {
}

override fun update(
uri: Uri,
values: ContentValues?,
selection: String?,
selectionArgs: Array<out String>?
uri: Uri, values: ContentValues?, selection: String?, selectionArgs: Array<out String>?
): Int {
TODO("Not yet implemented")
}


+ 2
- 2
settings.gradle Ver arquivo

@@ -1,6 +1,6 @@
pluginManagement {
repositories {
maven {url 'https://developer.huawei.com/repo/'}
maven { url 'https://developer.huawei.com/repo/' }

maven {
url 'http://nexus.51trust.net/repository/android-group/'
@@ -18,7 +18,7 @@ pluginManagement {
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
repositories {
maven {url 'https://developer.huawei.com/repo/'}
maven { url 'https://developer.huawei.com/repo/' }
maven {
url 'http://127.0.0.1:1022/repository/maven-public/'
allowInsecureProtocol true


+ 76
- 0
华为sdk集成.md Ver arquivo

@@ -0,0 +1,76 @@
- ##### 根据[华为推送服务配置文档](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-config-agc-0000001050170137)完成应用创建和推送服务的开通

- ##### 登录[AppGallery Connect](https://developer.huawei.com/consumer/cn/service/josp/agc/index.html)网站,点击“我的项目”。

- ##### 在项目列表中找到您的项目,在项目中点击需要集成HMS Core SDK的应用。

- ##### 在“项目设置 > 常规”页面的“应用”区域,点击“agconnect-services.json”下载配置文件。

![点击放大](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtyPub/011/111/111/0000000000011111111.20230221102806.12268288190126774767350517557615:50001231000000:2800:12ABACEF3849B9BA1E7CDABD51E96D6851FABECD55E05713EAAC7B0A487F73E1.png?needInitFileName=true?needInitFileName=true)

- ##### 将“agconnect-services.json”文件拷贝到应用级根目录下。

![img](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtyPub/011/111/111/0000000000011111111.20230221102806.48189746150828014962362521369272:50001231000000:2800:A389367A1252831B6E662C4D5340473CB088CB9B317B4418003379F782052999.png?needInitFileName=true?needInitFileName=true)
- ##### 配置HMS Core SDK的Maven仓地址


Android Studio的代码库配置在Gradle插件7.0以下版本、7.0版本和7.1及以上版本有所不同。请根据您当前的Gradle插件版本,选择对应的配置过程。

| [7.0以下版本](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-integrating-sdk-0000001050040084#ZH-CN_TOPIC_0000001087049212__zh-cn_topic_0000001050041594_li547444421611) | [7.0版本](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-integrating-sdk-0000001050040084#ZH-CN_TOPIC_0000001087049212__zh-cn_topic_0000001050041594_li1796424071918) | [7.1及以上版本](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-integrating-sdk-0000001050040084#ZH-CN_TOPIC_0000001087049212__zh-cn_topic_0000001050041594_li1345452582116) |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
| | | |


- ##### 添加AGC插件配置。请根据实际情况选择:

- 方式一:在文件头部声明下一行添加如下配置。

```groovy
apply plugin: 'com.huawei.agconnect'
```

- 方式二:在`plugins`中添加如下配置

```groovy
plugins { id 'com.android.application' // 添加如下配置 id 'com.huawei.agconnect'}
```



- ##### 配置签名

将[生成签名证书指纹](https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-config-agc-0000001050170137#section193351110105114)步骤中生成的签名文件拷贝到工程的app目录下,在build.gradle文件中配置签名。

```groovy
android {
signingConfigs {
config {
// 根据您实际的签名信息,替换以下参数中的xxxx
keyAlias 'xxxx'
keyPassword 'xxxx'
storeFile file('xxxx.jks')
storePassword 'xxxx'
}
}

buildTypes {
debug {
signingConfig signingConfigs.config
}
release {
signingConfig signingConfigs.config
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
```

- ## 同步工程

在完成以上的配置后,点击工具栏中的gradle同步图标完成“build.gradle”文件的同步,然后将相关依赖下载到本地。

![img](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtyPub/011/111/111/0000000000011111111.20230221102807.71643474582974097971276481469874:50001231000000:2800:6E12E277C5CE78BD6042495DB9A695384BAEAFA3301E04B4BB0EBED6FB371E4A.png?needInitFileName=true?needInitFileName=true)

Carregando…
Cancelar
Salvar