@@ -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服务 | |||
@@ -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' | |||
@@ -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()}") | |||
} | |||
} | |||
} |
@@ -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) | |||
} | |||
} |
@@ -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 | |||
@@ -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) | |||
} |
@@ -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 | |||
}) | |||
} | |||
} | |||
} |
@@ -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 | |||
@@ -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) | |||
} |
@@ -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) | |||
} | |||
} |
@@ -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() | |||
@@ -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") | |||
} | |||
@@ -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 | |||
@@ -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) |