Jelajahi Sumber

修改文档

#Suyghur 3 tahun lalu
induk
melakukan
f5382375db

+ 87 - 47
README.md

@@ -1,5 +1,3 @@
-[TOC]
-
 # 修订记录
 
 | 日期         | 版本    | 说明   | 作者  |
@@ -17,7 +15,7 @@
 - Gradle Version : 7.0.2+
 
 - Android Studio开启Android X支持,请在游戏项目根目录的**`gradle.properties`**中设置
-  
+
   ```properties
   android.useAndroidX=true
   android.enableJetifier=true
@@ -38,9 +36,9 @@
 - 3.拷贝对应渠道目录下**`res/values/strings.xml`**中的内容至项目中相应的文档中,如果没有strings.xml则新建一份即可,如果该目录没有则不需要处理
 
 - 4.在应用**`build.gradle`**中**`dependencies`**节点下添加SDK依赖,目前只提供远程依赖
-  
+
   > 在项目级**`build.gradle`**文件下的**`allprojects`**节点下添加仓库的url
-  
+
   ```groovy
       allprojects {
           repositories {
@@ -52,15 +50,28 @@
           }
       }
   ```
-  
+
   > 在应用级**`build.gradle`**文件下的**`allprojects`**节点下添加仓库的url
-  
+
   ```groovy
-    implementation 'io.github.yyxxgame.sdk:eyuancomm-sdk-ktx-comm:1.0.0-rc3'
-    implementation 'io.github.yyxxgame.sdk:eyuancomm-sdk-ktx-impl:1.0.0-rc3'
+    implementation 'io.github.yyxxgame.sdk:eyuancomm-sdk-ktx-comm:1.0.0-rc6'
+    implementation 'io.github.yyxxgame.sdk:eyuancomm-sdk-ktx-impl:1.0.0-rc4'
+
+    // 以下sdk按接入需求引入,注意不能同时引入
+
+    // 元游sdk(谷歌包官网包)
+    implementation 'io.github.yyxxgame.sdk:eyuancomm-sdk-ktx-core:1.0.0-rc5'
     // 以下sdk依赖在生成对应包时按需引入,为了避免资源冲突请不要同时引入
-    implementation 'io.github.yyxxgame.sdk:eyuancomm-channel-lib-huawei:1.0.0-rc3'
-    implementation 'io.github.yyxxgame.sdk:eyuancomm-channel-lib-oppo:1.0.0-rc3'
+    // 元游sdk港台繁体语言包
+    implementation 'io.github.yyxxgame.sdk:eyuancomm-lang-hk:1.0.0-rc4'
+    // 元游sdk越南语言包
+    implementation 'io.github.yyxxgame.sdk:eyuancomm-lang-vn:1.0.0-rc4'
+
+    // 华为渠道sdk
+    implementation 'io.github.yyxxgame.sdk:eyuancomm-channel-lib-huawei:1.0.0-rc4'
+
+    // oppo渠道sdk
+    implementation 'io.github.yyxxgame.sdk:eyuancomm-channel-lib-huawei:1.0.0-rc4'
   ```
 
 # 3.接口说明
@@ -293,18 +304,21 @@
 
 角色信息实体对象SdkRoleInfo,如无特别说明所有字段均不能为null或空串""
 
-| 参数            | 类型     | 说明                          |
-|:-------------:|:------:|:---------------------------:|
-| userId        | string | 当前用户ID                      |
-| serverId      | string | 当前角色所在的服务器ID                |
-| serverName    | string | 当前角色所在的服务器名                 |
-| roleId        | string | 当前角色ID                      |
-| roleName      | string | 当前角色名                       |
-| roleLevel     | string | 当前角色等级                      |
-| roleCTime     | long   | 当前角色创建的时间戳(10位),角色一旦创建则是固定值 |
-| vipLevel      | string | 当前Vip角色等级,若无传"none"         |
-| balance       | string | 当前角色游戏币余额,若无传"none"         |
-| totalPurchase | int    | 累计充值金额,若无传0)                |
+| 参数         | 类型     | 说明                          |
+|:----------:|:------:|:---------------------------:|
+| userId     | string | 当前用户ID                      |
+| serverId   | string | 当前角色所在的服务器ID                |
+| serverName | string | 当前角色所在的服务器名                 |
+| roleId     | string | 当前角色ID                      |
+| roleName   | string | 当前角色名                       |
+| roleLevel  | string | 当前角色等级                      |
+| rolePower  | int    | 当前角色战力                      |
+| roleGold   | int    | 当前角色元宝                      |
+| roleChange | int    | 当前角色累充金额(单位分)               |
+| roleCTime  | long   | 当前角色创建的时间戳(10位),角色一旦创建则是固定值 |
+| vipLevel   | string | 当前Vip角色等级,若无传"none"         |
+| partyId    | string | 当前角色帮派Id,若无传"none"          |
+| partyName  | string | 当前角色帮派名称,若无传"none"          |
 
 > 角色创建
 
@@ -346,26 +360,32 @@
 
 ```java
     SdkRoleInfo gameRoleInfo = new SdkRoleInfo();
-    //用户ID
+    // 用户ID
     gameRoleInfo.setUserId(EYuanGame.getInstance().getCurrentUserId());
-    //角色ID
+    // 角色ID
     gameRoleInfo.setRoleId(roleId);
-    //角色名称
+    // 角色名称
     gameRoleInfo.setRoleName(roleName);
-    //角色等级
+    // 角色等级
     gameRoleInfo.setRoleLevel(roleLevel);
-    //创角时间戳(角色一旦创角则是固定值)
+    // 创角时间戳(角色一旦创角则是固定值)
     gameRoleInfo.setRoleCTime(System.currentTimeMillis()/1000)
-    //服务器ID
+    // 角色战力
+    gameRoleInfo.setRolePower(100);
+    // 角色元宝
+    gameRoleInfo.setRoleGold(200);
+    // 角色累充金额
+    gameRoleInfo.setRoleChange(2000);
+    // 帮派Id
+    gameRoleInfo.setPartyId("1231");
+    // 帮派名称
+    gameRoleInfo.setPartyName("帮派1231")
+    // 服务器ID
     gameRoleInfo.setServerId(serverId);
-    //服务器名
+    // 服务器名
     gameRoleInfo.setServerName(serverName);
-    //用户VIP等级,无该字段则传空串""
+    // 用户VIP等级,无该字段则传空串"none"
     gameRoleInfo.setVipLevel("1");
-    //当前角色游戏币余额
-    gameRoleInfo.setBalance("600");
-    //累计充值金额,若无传0)
-    gameRoleInfo.setTotalPurchase(0)
 
     //角色创建
     EYuanCommSdk.getInstance().roleCreate(this, gameRoleInfo);
@@ -594,19 +614,39 @@
     EYuanCommSdk.getInstance().getCurrentSdkVersion();
 ```
 
-## 13)SDK日志接口(选接)
+## 13)SDK游戏打点上报(按需接入)
+
+SDK埋点事件信息实体对象SdkEvent
 
-> 若游戏有需要持久化java、kotlin和C++(联系我方技术获取头文件)层的日志,可以使用SDK的日志接口。SDK的日志框架底层使用C++进行开发,使用了Linux系统的mmap内存拷贝技术
-> SDK会默认缓存3天的日志,过期则自动删除
-> 缓存的文件使用Facebook开源的压缩算法zlib进行压缩
-> 缓存路径为**手机内部存储目录/Android/data/包名/files/dolin/zap**,即应用的私有目录
-> 更多使用方法请联系我方技术
+| 参数          | 类型     | 说明                 |
+|:-----------:|:------:|:------------------:|
+| eventName   | string | 事件名称               |
+| eventParams | string | 事件参数(预留)           |
+| standard    | bool   | 是否fb标准事件           |
+| fbAliasName | string | fb标准事件名称,非标准事件则为"" |
 
 ```java
-    // debug日志
-    Logger.d(TAG,msg);
-    // info日志
-    Logger.i(TAG,msg);
-    // error日志
-    Logger.e(TAG,msg);
+    /**
+     * 游戏内打点上报
+     *
+     * @param context Aontext上下文
+     * @param sdkEvent SDK埋点事件信息实体对象
+     */
+    public void traceEvent(Context context, SdkEvent sdkEvent)
+```
+
+- 示例
+
+```java
+    SdkEvent tutorialEvent = new SdkEvent();
+    tutorialEvent.setEventName("tutorial");
+    joinEvent.setStandard(false);
+    EYuanCommSdk.getInstance().traceEvent(this, tutorialEvent);
+
+    // fb标准事件
+    SdkEvent joinEvent = new SdkEvent();
+    joinEvent.setEventName("joinin_party");
+    joinEvent.setStandard(true);
+    joinEvent.setFbAliasName("fb_mobile_achievement_unlocked");
+    EYuanCommSdk.getInstance().traceEvent(this, joinEvent);
 ```

+ 13 - 8
demo/build.gradle

@@ -12,8 +12,7 @@ android {
     buildToolsVersion rootProject.ext.android.buildToolsVersion
 
     defaultConfig {
-//        applicationId 'com.xgyy.jpcq.nearme.gamecenter'
-        applicationId 'com.xgyy.jpcq.huawei'
+        applicationId 'com.shzd.eyuangame'
         minSdk rootProject.ext.android.minSdk
         targetSdk rootProject.ext.android.targetSdk
         versionCode 1
@@ -65,13 +64,19 @@ android {
 }
 
 dependencies {
-    implementation 'io.github.yyxxgame.sdk:eyuancomm-sdk-ktx-comm:1.0.0-rc3'
-    implementation 'io.github.yyxxgame.sdk:eyuancomm-sdk-ktx-impl:1.0.0-rc3'
-    implementation 'io.github.yyxxgame.sdk:eyuancomm-channel-lib-huawei:1.0.0-rc3'
-//    implementation 'io.github.yyxxgame.sdk:eyuancomm-channel-lib-oppo:1.0.0-rc3'
-
-
     implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
     implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
     implementation 'androidx.core:core-ktx:1.7.0'
+
+    implementation 'io.github.yyxxgame.sdk:eyuancomm-sdk-ktx-comm:1.0.0-rc6'
+    implementation 'io.github.yyxxgame.sdk:eyuancomm-sdk-ktx-impl:1.0.0-rc4'
+    implementation 'io.github.yyxxgame.sdk:eyuancomm-sdk-ktx-comm:1.0.0-rc6'
+    implementation 'io.github.yyxxgame.sdk:eyuancomm-sdk-ktx-impl:1.0.0-rc4'
+    implementation 'io.github.yyxxgame.sdk:eyuancomm-sdk-ktx-core:1.0.0-rc5'
+    implementation 'io.github.yyxxgame.sdk:eyuancomm-lang-vn:1.0.0-rc4'
+//    implementation 'io.github.yyxxgame.sdk:eyuancomm-channel-lib-huawei:1.0.0-rc4'
+//    implementation 'io.github.yyxxgame.sdk:eyuancomm-channel-lib-oppo:1.0.0-rc4'
+
+
+
 }

+ 0 - 75
demo/src/main/assets/agconnect-services.json

@@ -1,75 +0,0 @@
-{
-	"agcgw":{
-		"backurl":"connect-dra.hispace.hicloud.com",
-		"url":"connect-dra.dbankcloud.cn",
-		"websocketbackurl":"connect-ws-dra.hispace.dbankcloud.com",
-		"websocketurl":"connect-ws-dra.hispace.dbankcloud.cn"
-	},
-	"agcgw_all":{
-		"CN":"connect-drcn.dbankcloud.cn",
-		"CN_back":"connect-drcn.hispace.hicloud.com",
-		"DE":"connect-dre.dbankcloud.cn",
-		"DE_back":"connect-dre.hispace.hicloud.com",
-		"RU":"connect-drru.dbankcloud.cn",
-		"RU_back":"connect-drru.hispace.hicloud.com",
-		"SG":"connect-dra.dbankcloud.cn",
-		"SG_back":"connect-dra.hispace.hicloud.com"
-	},
-	"client":{
-		"cp_id":"2640852000031689367",
-		"product_id":"737518067793991082",
-		"client_id":"781642244007414976",
-		"client_secret":"4F6D961703766A0590BCDC06B76B55BCA30F2AE5B09102CFBFB6ABEF7661821D",
-		"project_id":"737518067793991082",
-		"app_id":"105116483",
-		"api_key":"CwEAAAAAl0Ub8lJcC4b2nuGaT+j1NznFNrKGrBF5jKY3mpV8EXPIUkKrgSF5aqXcn6VhUuta+LncBgT7fwvI7mwsP/ZkPmcvoBw=",
-		"package_name":"com.xgyy.jpcq.huawei"
-	},
-	"oauth_client":{
-		"client_id":"105116483",
-		"client_type":1
-	},
-	"app_info":{
-		"app_id":"105116483",
-		"package_name":"com.xgyy.jpcq.huawei"
-	},
-	"service":{
-		"analytics":{
-			"collector_url":"datacollector-dra.dt.hicloud.com,datacollector-dra.dt.dbankcloud.cn",
-			"collector_url_ru":"datacollector-drru.dt.hicloud.com,datacollector-drru.dt.dbankcloud.cn",
-			"collector_url_sg":"datacollector-dra.dt.hicloud.com,datacollector-dra.dt.dbankcloud.cn",
-			"collector_url_de":"datacollector-dre.dt.hicloud.com,datacollector-dre.dt.dbankcloud.cn",
-			"collector_url_cn":"datacollector-drcn.dt.hicloud.com,datacollector-drcn.dt.dbankcloud.cn",
-			"resource_id":"p1",
-			"channel_id":""
-		},
-		"search":{
-			"url":"https://search-dra.cloud.huawei.com"
-		},
-		"cloudstorage":{
-			"storage_url":"https://ops-dra.agcstorage.link",
-			"default_storage":""
-		},
-		"ml":{
-			"mlservice_url":"ml-api-dra.ai.dbankcloud.com,ml-api-dra.ai.dbankcloud.cn"
-		}
-	},
-	"region":"SG",
-	"configuration_version":"3.0",
-	"appInfos":[
-		{
-			"package_name":"com.xgyy.jpcq.huawei",
-			"client":{
-				"app_id":"105116483"
-			},
-			"app_info":{
-				"package_name":"com.xgyy.jpcq.huawei",
-				"app_id":"105116483"
-			},
-			"oauth_client":{
-				"client_type":1,
-				"client_id":"105116483"
-			}
-		}
-	]
-}

+ 4 - 0
demo/src/main/assets/yyxx_game/ext_log.json

@@ -0,0 +1,4 @@
+{
+  "tutorial": "t9ghwz",
+  "joinin_party": "tcb169"
+}

+ 7 - 0
demo/src/main/assets/yyxx_game/sdk_log.json

@@ -0,0 +1,7 @@
+{
+  "open_app": "iwgqu5",
+  "sign_up": "lo5o9s",
+  "login_success_account": "2j2gqs",
+  "ecommerce_purchase": "p4sqr7",
+  "first_purchase": "e3yw8i"
+}

+ 13 - 3
demo/src/main/assets/yyxx_game/yyxx_comm.properties

@@ -1,7 +1,17 @@
 # 融合应用编号
-YYXX_COMM_GCP_CODE=Y010301
-YYXX_COMM_GAME_CODE=100001
+YYXX_GCP_CODE=Y010401
+YYXX_GAME_CODE=100001
 # 渠道Id
-YYXX_CHANNEL_ID=3
+YYXX_CHANNEL_ID=4
+# Adjust配置
+YYXX_ADJUST_TRACE=true
+YYXX_ADJUST_APP_ID=ymyq28xetdkw
+#YYXX_ADJUST_CHANNEL_TOKEN=6snwjqf
+# Facebook Analytics配置
+YYXX_FACEBOOK_TRACE=true
+# Firebase Analytics配置
+YYXX_FIREBASE_TRACE=true
 # debug模式(cp出正式包请关闭)
 YYXX_OWN_DEBUG=true
+# sdk地区
+YYXX_LANG_ENV=2

+ 23 - 13
demo/src/main/java/com/yyxx/eyuancomm/demo/CacheRoleInfo.kt

@@ -10,26 +10,29 @@ import org.json.JSONObject
  * Created on 2020/12/7
  */
 class CacheRoleInfo {
-
     data class RoleInfo(
         var roleId: String = "", var roleName: String = "", var roleLevel: String = "",
+        var rolePower: Int = 0, var roleGold: Int = 0, var roleChange: Int = 0,
         var serverCode: String = "", var serverName: String = "", var vipLevel: String = "",
-        var balance: String = "", var totalPurchase: Int = 0, var roleCTime: Long = 0
+        var partyId: String = "", var partyName: String = "", var roleCTime: Long = 0
     ) {
         fun toJsonString(): String {
+            val jsonObject = JSONObject()
             try {
-                val jsonObject = JSONObject()
                 jsonObject.put("role_id", roleId)
                 jsonObject.put("role_name", roleName)
                 jsonObject.put("role_level", roleLevel)
+                jsonObject.put("role_power", rolePower)
+                jsonObject.put("role_gold", roleGold)
+                jsonObject.put("role_change", roleChange)
+                jsonObject.put("role_ctime", roleCTime)
+                jsonObject.put("party_id", partyId)
+                jsonObject.put("party_name", partyName)
                 jsonObject.put("server_code", serverCode)
                 jsonObject.put("server_name", serverName)
                 jsonObject.put("vip_level", vipLevel)
-                jsonObject.put("balance", balance)
-                jsonObject.put("total_purchase", totalPurchase)
-                jsonObject.put("role_ctime", roleCTime)
                 return jsonObject.toString()
-            } catch (e: JSONException) {
+            } catch (e: Exception) {
                 e.printStackTrace()
             }
             return ""
@@ -37,6 +40,7 @@ class CacheRoleInfo {
     }
 
     companion object {
+
         @JvmStatic
         fun setDemoRoleInfo(context: Context, userId: String): RoleInfo {
             val ts = System.currentTimeMillis() / 1000
@@ -44,12 +48,15 @@ class CacheRoleInfo {
                 roleId = "aaa$ts",
                 roleName = "角色名123",
                 roleLevel = "110",
+                rolePower = 100,
+                roleGold = 100,
+                roleChange = 100,
                 serverCode = "333",
                 serverName = "服务器名333",
                 vipLevel = "1",
-                balance = "600",
-                totalPurchase = 0,
-                roleCTime = ts
+                roleCTime = ts,
+                partyId = "party_101",
+                partyName = "帮派名"
             )
             val info = roleInfo.toJsonString()
             val sp = context.getSharedPreferences("app_role_info", Context.MODE_PRIVATE)
@@ -76,9 +83,12 @@ class CacheRoleInfo {
                         serverCode = jsonObject.getString("server_code"),
                         serverName = jsonObject.getString("server_name"),
                         vipLevel = jsonObject.getString("vip_level"),
-                        balance = jsonObject.getString("balance"),
-                        totalPurchase = jsonObject.getInt("total_purchase"),
-                        roleCTime = jsonObject.getLong("role_ctime")
+                        partyId = jsonObject.getString("party_id"),
+                        partyName = jsonObject.getString("party_name"),
+                        roleCTime = jsonObject.getLong("role_ctime"),
+                        rolePower = jsonObject.getInt("role_power"),
+                        roleGold = jsonObject.getInt("role_gold"),
+                        roleChange = jsonObject.getInt("role_change")
                     )
                 }
 

+ 24 - 2
demo/src/main/java/com/yyxx/eyuancomm/demo/DemoActivity.java

@@ -20,6 +20,7 @@ import java.util.List;
 
 import cn.yyxx.eyuancomm.comm.EYuanCommSdk;
 import cn.yyxx.eyuancomm.comm.entity.SdkChargeInfo;
+import cn.yyxx.eyuancomm.comm.entity.SdkEvent;
 import cn.yyxx.eyuancomm.comm.entity.SdkRoleInfo;
 import cn.yyxx.eyuancomm.comm.internal.ICallback;
 
@@ -38,6 +39,8 @@ public class DemoActivity extends Activity implements View.OnClickListener {
             add(new Item(3, "03 角色登录"));
             add(new Item(4, "04 角色升级"));
             add(new Item(5, "05 定额充值"));
+            add(new Item(6, "06 模拟CP打点"));
+            add(new Item(7, "07 模拟CP打点(Facebook标准事件)"));
         }
     };
     private CacheRoleInfo.RoleInfo cacheRoleInfo = null;
@@ -98,9 +101,12 @@ public class DemoActivity extends Activity implements View.OnClickListener {
         roleInfo.setRoleCTime(cacheRoleInfo.getRoleCTime());
         roleInfo.setServerId(cacheRoleInfo.getServerCode());
         roleInfo.setServerName(cacheRoleInfo.getServerName());
-        roleInfo.setBalance(cacheRoleInfo.getBalance());
         roleInfo.setVipLevel(cacheRoleInfo.getVipLevel());
-        roleInfo.setTotalPurchase(cacheRoleInfo.getTotalPurchase());
+        roleInfo.setRolePower(cacheRoleInfo.getRolePower());
+        roleInfo.setRoleGold(cacheRoleInfo.getRoleGold());
+        roleInfo.setRoleChange(cacheRoleInfo.getRoleChange());
+        roleInfo.setPartyId(cacheRoleInfo.getPartyId());
+        roleInfo.setPartyName(cacheRoleInfo.getPartyName());
         return roleInfo;
     }
 
@@ -269,6 +275,22 @@ public class DemoActivity extends Activity implements View.OnClickListener {
                     }
                 });
             }
+            break;
+            case 6: {
+                SdkEvent sdkEvent = new SdkEvent();
+                sdkEvent.setEventName("tutorial");
+                sdkEvent.setStandard(false);
+                EYuanCommSdk.getInstance().traceEvent(this, sdkEvent);
+            }
+            break;
+            case 7: {
+                SdkEvent sdkEvent = new SdkEvent();
+                sdkEvent.setEventName("joinin_party");
+                sdkEvent.setStandard(true);
+                sdkEvent.setFbAliasName("fb_mobile_achievement_unlocked");
+                EYuanCommSdk.getInstance().traceEvent(this, sdkEvent);
+            }
+            break;
         }
     }
 

+ 19 - 5
demo/src/main/res/values/strings.xml

@@ -1,7 +1,21 @@
 <resources>
-    <string name="facebook_app_id">265361418929970</string>
-    <string name="fb_login_protocol_scheme">fb265361418929970</string>
-    <string name="app_name" translatable="false">EYuanCommSdkDemo-Huawei</string>
-    <string name="google_app_id">242301350243</string>
-    <string name="google_client_id">242301350243-0qdvdetd5j13movtkvv2cno0jh9843no.apps.googleusercontent.com</string>
+    <string name="app_name" translatable="false">EYuanGameSdk-KTX</string>
+    <string name="facebook_app_id" translatable="false">229604925839347</string>
+    <string name="fb_login_protocol_scheme" translatable="false">fb229604925839347</string>
+    <!-- project_number -->
+    <string name="gcm_defaultSenderId" translatable="false">70429070957</string>
+    <!-- current_key -->
+    <string name="google_api_key" translatable="false">AIzaSyCm83BI5DNj8--WPduAppPDkyoFSx0yOdE</string>
+    <!-- mobilesdk_app_id -->
+    <string name="google_app_id" translatable="false">1:70429070957:android:07d3ee059d2d420cfb9164</string>
+    <!-- current_key -->
+    <string name="google_crash_reporting_api_key" translatable="false">AIzaSyCm83BI5DNj8--WPduAppPDkyoFSx0yOdE</string>
+    <!-- storage_bucket -->
+    <string name="google_storage_bucket" translatable="false">api-project-33500926.appspot.com</string>
+    <!-- project_id -->
+    <string name="project_id" translatable="false">api-project-33500926</string>
+    <!-- type3的client_id -->
+    <string name="default_web_client_id" translatable="false">70429070957-7clr9u565jrjgbgg474ksg8q2esq2okj.apps.googleusercontent.com</string>
+    <string name="com.crashlytics.RequireBuildId" translatable="false">true</string>
+    <string name="com.google.firebase.crashlytics.mapping_file_id" translatable="false">00000000000000000000000000000000</string>
 </resources>

+ 4 - 4
keystore.properties

@@ -1,4 +1,4 @@
-storePassword=qpcqc3uz_yyxx2022
-keyPassword=qpcqc3uz_yyxx2022
-keyAlias=alias.jpcq_yyxx2022
-storeFile=../zkeystore/jpcq_yyxx.keystore
+storePassword=shzd1y28_yyxx2021
+keyPassword=shzd1y28_yyxx2021
+keyAlias=alias.shzd_yyxx2021
+storeFile=../zkeystore/shzd_yyxx.keystore

TEMPAT SAMPAH
zkeystore/jpcq_yyxx.keystore


TEMPAT SAMPAH
zkeystore/shzd_yyxx.keystore