1、优化程序健壮性,ProcessReceiver收到静态消息后,会检测并启动CoreService
authorsnickersun <scy@incartech.cn>
Fri, 31 Jul 2020 17:18:59 +0000 (01:18 +0800)
committersnickersun <scy@incartech.cn>
Fri, 31 Jul 2020 17:18:59 +0000 (01:18 +0800)
2、保存V466,是上一个提交编译的。不包含本提交。

app/release/ICSer_V463_2007292110_release.apk [deleted file]
app/release/output.json
app/src/main/java/com/enqualcomm/support/MySqlitOpenHelper.java
app/src/main/java/com/enqualcomm/support/service/HeartRateManager.java
app/src/main/java/com/enqualcomm/support/utils/MD5.java
app/src/main/java/com/enqualcomm/support/utils/ProcessReceiver.java
app/src/main/java/com/ic/protocols/protocolAPIHelper.java
app/version_code.properties

diff --git a/app/release/ICSer_V463_2007292110_release.apk b/app/release/ICSer_V463_2007292110_release.apk
deleted file mode 100644 (file)
index 3b7de6d..0000000
Binary files a/app/release/ICSer_V463_2007292110_release.apk and /dev/null differ
index bfb3d4b..718578a 100644 (file)
@@ -1 +1 @@
-[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":464,"versionName":"2007300125","enabled":true,"outputFile":"ICSer_V464_2007300125_release.apk","fullName":"release","baseName":"release"},"path":"ICSer_V464_2007300125_release.apk","properties":{}}]
\ No newline at end of file
+[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":466,"versionName":"2007301941","enabled":true,"outputFile":"ICSer_V466_2007301941_release.apk","fullName":"release","baseName":"release"},"path":"ICSer_V466_2007301941_release.apk","properties":{}}]
\ No newline at end of file
index 5abcc6a..7e05ba6 100644 (file)
@@ -10,20 +10,60 @@ import com.enqualcomm.support.utils.ICLogger;
 public class MySqlitOpenHelper extends SQLiteOpenHelper {\r
   public MySqlitOpenHelper(Context paramContext) { super(paramContext, "data", null, 7); }\r
   \r
-  public void onCreate(SQLiteDatabase paramSQLiteDatabase) {\r
-    paramSQLiteDatabase.execSQL("CREATE TABLE CONTACT(_id INTEGER PRIMARY KEY AUTOINCREMENT ,CATEGORY INTEGER ,NAME TEXT ,NUMBER TEXT ,ICON TEXT ,EXTRA TEXT)");\r
-    paramSQLiteDatabase.execSQL("CREATE TABLE MESSAGE(_id INTEGER PRIMARY KEY AUTOINCREMENT ,CATEGORY INTEGER ,CONTENT TEXT ,PREVIEW TEXT ,STATUS INTEGER ,IN_OR_OUT INTEGER ,CONTACT_CATEGORY INTEGER ,CONTACT_NUMBER TEXT ,SERVER_TIME TEXT ,LOCAL_TIME INTEGER ,ICON TEXT)");\r
-    paramSQLiteDatabase.execSQL("CREATE TABLE ALARM(_id INTEGER PRIMARY KEY AUTOINCREMENT ,TIME TEXT ,WEEK TEXT ,RING TEXT ,STATUS TEXT ,NAME TEXT)");\r
-    paramSQLiteDatabase.execSQL("CREATE TABLE SILENT(_id INTEGER PRIMARY KEY AUTOINCREMENT ,START_TIME TEXT ,END_TIME TEXT ,WEEK TEXT ,STATUS TEXT,CUR_SYS_STATUS TEXT)");\r
-    paramSQLiteDatabase.execSQL("CREATE TABLE IKNOWLEDGE(_id INTEGER PRIMARY KEY AUTOINCREMENT ,SCORE TEXT ,AWARD TEXT)");\r
-    paramSQLiteDatabase.execSQL("CREATE TABLE URLDOWNLOADPIC(_id INTEGER PRIMARY KEY AUTOINCREMENT ,URL TEXT)");\r
-    paramSQLiteDatabase.execSQL("CREATE TABLE NOTICE(_id INTEGER PRIMARY KEY AUTOINCREMENT ,TIME TEXT,NAME TEXT,NUMBER TEXT,ID TEXT,CATEGORY TEXT,FREQUENCY TEXT,CONTENT TEXT)");\r
-    paramSQLiteDatabase.execSQL("CREATE TABLE WEATHER(_id INTEGER PRIMARY KEY AUTOINCREMENT ,WEATHER_TYPE TEXT,MIN_TEMPERATURE TEXT,MAX_TEMPERATURE TEXT,CUR_TEMPERATURE TEXT,WEATHER_INDEX TEXT,WEATHER_INFO TEXT)");\r
-    paramSQLiteDatabase.execSQL("CREATE TABLE DEVICESTATUS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,IS_SILENCE TEXT,START_MONITOR TEXT,END_MONITOR TEXT,IS_ALARM INTEGER)");\r
-    paramSQLiteDatabase.execSQL("CREATE TABLE DOWNLOADINFO(_id INTEGER PRIMARY KEY AUTOINCREMENT ,IMSI TEXT,TIME TEXT,NUMBER TEXT,TOTAL_NUMBER TEXT)");\r
-    paramSQLiteDatabase.execSQL("CREATE TABLE STHEART_RATE(_id INTEGER PRIMARY KEY AUTOINCREMENT ,START_TIME TEXT ,END_TIME TEXT ,WEEK TEXT ,STATUS TEXT,INTERVAL TEXT)");\r
-    paramSQLiteDatabase.execSQL("CREATE TABLE ANTIOFF(_id INTEGER PRIMARY KEY AUTOINCREMENT ,START_TIME TEXT ,END_TIME TEXT ,WEEK TEXT ,STATUS TEXT,CUR_SYS_STATUS TEXT)");\r
-    paramSQLiteDatabase.execSQL("CREATE TABLE UNREADMSG(_id INTEGER PRIMARY KEY AUTOINCREMENT ,CATEGORY INTEGER ,ID TEXT ,COUNT INTEGER,RECVTIME INTEGER)");\r
+  public void onCreate(SQLiteDatabase sqlite) {\r
+    sqlite.execSQL("CREATE TABLE CONTACT(_id INTEGER PRIMARY KEY AUTOINCREMENT ,CATEGORY INTEGER ,NAME TEXT ,NUMBER TEXT ,ICON TEXT ,EXTRA TEXT)");\r
+    sqlite.execSQL("CREATE TABLE ALARM(_id INTEGER PRIMARY KEY AUTOINCREMENT ,TIME TEXT ,WEEK TEXT ,RING TEXT ,STATUS TEXT ,NAME TEXT)");\r
+    sqlite.execSQL("CREATE TABLE SILENT(_id INTEGER PRIMARY KEY AUTOINCREMENT ,START_TIME TEXT ,END_TIME TEXT ,WEEK TEXT ,STATUS TEXT,CUR_SYS_STATUS TEXT)");\r
+    sqlite.execSQL("CREATE TABLE IKNOWLEDGE(_id INTEGER PRIMARY KEY AUTOINCREMENT ,SCORE TEXT ,AWARD TEXT)");\r
+    sqlite.execSQL("CREATE TABLE URLDOWNLOADPIC(_id INTEGER PRIMARY KEY AUTOINCREMENT ,URL TEXT)");\r
+//提示信息表\r
+    sqlite.execSQL("CREATE TABLE NOTICE(_id INTEGER PRIMARY KEY AUTOINCREMENT ,TIME TEXT,NAME TEXT,NUMBER TEXT,ID TEXT,CATEGORY TEXT,FREQUENCY TEXT,CONTENT TEXT)");\r
+    sqlite.execSQL("CREATE TABLE WEATHER(_id INTEGER PRIMARY KEY AUTOINCREMENT ,WEATHER_TYPE TEXT,MIN_TEMPERATURE TEXT,MAX_TEMPERATURE TEXT,CUR_TEMPERATURE TEXT,WEATHER_INDEX TEXT,WEATHER_INFO TEXT)");\r
+    sqlite.execSQL("CREATE TABLE DEVICESTATUS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,IS_SILENCE TEXT,START_MONITOR TEXT,END_MONITOR TEXT,IS_ALARM INTEGER)");\r
+    sqlite.execSQL("CREATE TABLE DOWNLOADINFO(_id INTEGER PRIMARY KEY AUTOINCREMENT ,IMSI TEXT,TIME TEXT,NUMBER TEXT,TOTAL_NUMBER TEXT)");\r
+    sqlite.execSQL("CREATE TABLE STHEART_RATE(_id INTEGER PRIMARY KEY AUTOINCREMENT ,START_TIME TEXT ,END_TIME TEXT ,WEEK TEXT ,STATUS TEXT,INTERVAL TEXT)");\r
+    sqlite.execSQL("CREATE TABLE UNREADMSG(_id INTEGER PRIMARY KEY AUTOINCREMENT ,CATEGORY INTEGER ,ID TEXT ,COUNT INTEGER,RECVTIME INTEGER)");\r
+\r
+\r
+    /*\r
+系统对话消息表,包含微聊,系统推送文本,上传图片,上传语音等一系列消息。\r
+Pushtxt、message\r
+数据库 Message,记录所有message,包括类型(下发txt,chat msg, chat image),文件url或者文本内容。\r
+*/\r
+    sqlite.execSQL("CREATE TABLE MESSAGE(_id INTEGER PRIMARY KEY AUTOINCREMENT ,CATEGORY INTEGER ,CONTENT TEXT ,PREVIEW TEXT ,STATUS INTEGER ,IN_OR_OUT INTEGER ,CONTACT_CATEGORY INTEGER ,CONTACT_NUMBER TEXT ,SERVER_TIME TEXT ,LOCAL_TIME INTEGER ,ICON TEXT)");\r
+    //sqlite.execSQL("CREATE TABLE MESSAGE(_id INTEGER PRIMARY KEY AUTOINCREMENT ,CATEGORY INTEGER ,CONTENT TEXT ,PREVIEW TEXT ,STATUS INTEGER ,IN_OR_OUT INTEGER ,CONTACT_CATEGORY INTEGER ,CONTACT_NUMBER TEXT ,SERVER_TIME TEXT ,LOCAL_TIME INTEGER ,ICON TEXT,FILETYPE INTEGER,DATATYPE INTEGER)");\r
+\r
+\r
+\r
+//日志表格,存储开机关机,低电报警等消息。。。\r
+    sqlite.execSQL("CREATE TABLE EVENT_MESSAGE(_id INTEGER PRIMARY KEY AUTOINCREMENT , EVENT_TYPE INTEGER, EVENT_NAME TEXT, TIME TEXT )");\r
+\r
+/*\r
+脱腕检测时段AntiOff\r
+本身需要时间段的,在时间段内才进行 脱腕检测。没有设置时间段的话,或者从0:00~23:59表示持续判断脱腕检测。\r
+2个数据库,时间段和当前状态记录(包括历史记录)。\r
+*/\r
+    sqlite.execSQL("CREATE TABLE ANTIOFF(_id INTEGER PRIMARY KEY AUTOINCREMENT ,START_TIME TEXT ,END_TIME TEXT ,WEEK TEXT ,STATUS TEXT,CUR_SYS_STATUS TEXT)");\r
+   // sqlite.execSQL("CREATE TABLE ANTIOFF_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,TIME TEXT ,STATUS TEXT,CUR_SYS_STATUS TEXT)");\r
+\r
+/*\r
+睡眠\r
+根据时间段进行检测,时间段内,根据翻滚次数确认其睡眠类型。如深度睡眠或者浅睡。\r
+2个数据库翻滚次数记录,当每日睡眠情况统计计算,检测时间段记在settings里,就不放在数据库了。\r
+*/\r
+    /*每次打点的记录表*/\r
+    sqlite.execSQL("CREATE TABLE SLEEP_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,DATE TEXT, TIME TEXT ,ROLLTIMES INTEGER ,STATUS TEXT ,REM TEXT)");\r
+    /*计算后的分值,每天会在睡眠结束后计算Records获得*/\r
+    sqlite.execSQL("CREATE TABLE SLEEP_STATUS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,TIME TEXT , DEEP_SLEEP INTEGER , LIGHT_SLEEP INTEGER ,SCORE INTEGER )");\r
+\r
+/*久坐\r
+根据时间段进行检测,时间段内,根据计步变化确认其是否在坐着。\r
+1个数据库 久坐检测时间段,报警时长度要求,报警记录*/\r
+    sqlite.execSQL("CREATE TABLE SIT(_id INTEGER PRIMARY KEY AUTOINCREMENT ,START_TIME TEXT ,END_TIME TEXT ,WEEK TEXT ,INTERVAL INTEGER)");\r
+\r
+\r
+    /*所有报警的记录表,包括开关机事件*/\r
+    sqlite.execSQL("CREATE TABLE ALARM_MSG_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,DATE TEXT, TIME TEXT ,ALARM TEXT )");\r
   }\r
   \r
   public void onUpgrade(SQLiteDatabase paramSQLiteDatabase, int paramInt1, int paramInt2) {\r
index 67c9feb..35c29bc 100644 (file)
@@ -65,7 +65,6 @@ public class HeartRateManager extends AbstractInvokeHandlerService {
               sendBroadcastPPGResult();\r
               //因为协议中没有时间变量,所以只能实时传输,如果恰巧没有网络也只能丢弃,有时间变量的话,可以考虑通过deliver的buffer来进行缓存发送\r
               if (connection.isServerConnected()) {\r
-\r
                 if(PPGDATA.isEmpty()){\r
                   String ppgd=protocolAPIHelper.getPPG_MSG(runtime.getHRS().getPPG());\r
                   String bloodd=protocolAPIHelper.getBlood_MSG( runtime.getHRS().getBPH(), runtime.getHRS().getBPL());\r
@@ -73,13 +72,10 @@ public class HeartRateManager extends AbstractInvokeHandlerService {
                   connection.send(protocolAPIHelper.genStringMessage("ppg", ppgd));\r
                   connection.send(protocolAPIHelper.genStringMessage("blood", bloodd));\r
                   connection.send(protocolAPIHelper.genStringMessage("oxygen", oxd));\r
-\r
                 }else {\r
                   connection.send(protocolAPIHelper.genStringMessage("APHT", PPGDATA));\r
                   ICLogger.i("Send PPG " + PPGDATA);\r
                 }\r
-\r
-\r
                 ICLogger.i("Send PPG " + PPGDATA);\r
               } else {\r
                 ICLogger.i("Skip PPG " + PPGDATA);\r
index 6de9921..4c8ae1a 100644 (file)
@@ -15,7 +15,7 @@ public class MD5 {
 \r
     public static String getCMDStringMD5(String src){\r
 \r
-            if (src.isEmpty()) {\r
+            if (src==null || src.isEmpty()) {\r
                 return "";\r
             }\r
             MessageDigest md5 = null;\r
@@ -31,7 +31,7 @@ public class MD5 {
                     result += temp;\r
                 }\r
                 return result;\r
-            } catch (NoSuchAlgorithmException e) {\r
+            } catch (Exception e) {\r
                 e.printStackTrace();\r
             }\r
             return "";\r
index 9a7b6d1..5ab1dec 100644 (file)
@@ -30,6 +30,7 @@ import com.ic.jni.ICJniUtils;
 import com.enqualcomm.support.bean.Contact;\r
 import com.enqualcomm.support.service.AudioService;\r
 import com.enqualcomm.support.service.HeartRateManager;\r
+import com.ic.protocols.protocolAPIHelper;\r
 \r
 import java.util.concurrent.TimeUnit;\r
 \r
@@ -58,11 +59,9 @@ import static com.enqualcomm.support.Constants.KEY_MESSAGE_URL;
 import static com.enqualcomm.support.Constants.KEY_TEMP_BODY;\r
 import static com.enqualcomm.support.Constants.KEY_TEMP_WRIST;\r
 import static com.enqualcomm.support.Constants.RESUME_ACTION;\r
-import static com.enqualcomm.support.Constants.SOS_ACTION;\r
-import static com.enqualcomm.support.Constants.STEP_COUNT_ALARM_ACTION;\r
+\r
 import static com.enqualcomm.support.bean.Content.CONTACT_CATEGORY_GROUP;\r
-import static com.ic.protocols.protocolAPIHelper.genStringMessage;\r
-import static com.ic.protocols.protocolAPIHelper.getTemperatureMSG;\r
+\r
 \r
 \r
 public class ProcessReceiver extends BroadcastReceiver {\r
@@ -248,6 +247,13 @@ public class ProcessReceiver extends BroadcastReceiver {
     stringBuilder.append("action==");\r
     stringBuilder.append(str);\r
     ICLogger.i(stringBuilder.toString());\r
+\r
+    if (CoreService.getInstance()==null)\r
+    {\r
+      ICLogger.i("CoreService is null skip deal with this message! "+str);\r
+      paramContext.startService(new Intent(paramContext,CoreService.class));// protocol service\r
+      return ;\r
+    }\r
     if (RESUME_ACTION.equals(str)) {\r
       SharPreferenceUtil.setPrefBoolean(paramContext, "key_is_resume", paramIntent.getBooleanExtra("is_resume", false));\r
       return;\r
@@ -358,7 +364,7 @@ public class ProcessReceiver extends BroadcastReceiver {
       }else if (ACTION_TEMP_RESULT.equals(str)) {\r
       double wrist_temp=paramIntent.getDoubleExtra(KEY_TEMP_WRIST,0.0f);\r
       double body_temp=paramIntent.getDoubleExtra(KEY_TEMP_BODY,0.0f);\r
-      String temperatureMsg=getTemperatureMSG(wrist_temp,body_temp);\r
+      String temperatureMsg= protocolAPIHelper.getTemperatureMSG(wrist_temp,body_temp);\r
       ICLogger.i("发送体温测量值 "+temperatureMsg);\r
       Deliver.sendLocationMSG(temperatureMsg);\r
 \r
index 4898ebf..098ce2f 100644 (file)
@@ -9,10 +9,10 @@ import com.enqualcomm.support.utils.NettyConnection;
 \r
 public class protocolAPIHelper {\r
 \r
-    private protocol_jiai protocoljiai_handler=null;\r
-    private protocol_beehome protocolbeehome_handler=null;\r
-    private protocol_ic protocolic_handler=null;\r
-    private protocol_fzd protocolfzd_handler=null;\r
+    private static protocol_jiai protocoljiai_handler=null;\r
+    private static protocol_beehome protocolbeehome_handler=null;\r
+    private static protocol_ic protocolic_handler=null;\r
+    private static protocol_fzd protocolfzd_handler=null;\r
 \r
     public protocolAPIHelper(NettyConnection connect,Runtime runtime) {\r
         ICLogger.i("init Protocol "+Config.getProtocolNumber());\r
@@ -25,6 +25,11 @@ public class protocolAPIHelper {
         if (protocolfzd_handler==null)\r
             protocolfzd_handler=new protocol_fzd(connect,runtime);\r
     }\r
+\r
+    private static boolean is_protocol_not_Initialled(){\r
+        return (protocolbeehome_handler==null || protocoljiai_handler == null || protocolic_handler==null|| protocolfzd_handler==null);\r
+\r
+    }\r
     /*\r
        返回true 表示 cmd 全部解析成功\r
        返回false表示 cmd至少有一条解析失败,失败的数据归入buffer,下一次识别接着使用\r
@@ -32,6 +37,7 @@ public class protocolAPIHelper {
        每个字符串如果发现 #,却又没有Header,“IW”则会被丢弃\r
         */\r
     public boolean parserCmd(byte[] bytes) {\r
+        if (is_protocol_not_Initialled()) return false;\r
         switch(Config.protocol_no)\r
         {\r
             case Config.PROTOCOL_JIAI:\r
@@ -57,7 +63,7 @@ public class protocolAPIHelper {
 \r
 \r
     public static String isCmdStr(String msg){\r
-\r
+        if (is_protocol_not_Initialled()) return "";\r
         String ret="";\r
         switch(Config.protocol_no)\r
         {\r
@@ -78,6 +84,7 @@ public class protocolAPIHelper {
     }\r
 \r
     public static String getBindingMSG(){\r
+        if (is_protocol_not_Initialled()) return "";\r
         String ret="";\r
         switch(Config.protocol_no)\r
         {\r
@@ -98,6 +105,7 @@ public class protocolAPIHelper {
     }\r
 \r
     public static String getTemperatureMSG(double temp_adusted,double body_temp){\r
+        if (is_protocol_not_Initialled()) return "";\r
         String ret="";\r
         switch(Config.protocol_no)\r
         {\r
@@ -117,6 +125,7 @@ public class protocolAPIHelper {
         return ret;\r
     }\r
     public static String getWarningMSG(Runtime runtime){\r
+        if (is_protocol_not_Initialled()) return "";\r
         String ret="";\r
         switch(Config.protocol_no)\r
         {\r
@@ -137,6 +146,7 @@ public class protocolAPIHelper {
     }\r
 \r
     public static String getLoginMSG(Runtime runtime){\r
+        if (is_protocol_not_Initialled()) return "";\r
         String ret="";\r
         switch(Config.protocol_no)\r
         {\r
@@ -157,6 +167,7 @@ public class protocolAPIHelper {
     }\r
 \r
     public static String getHeartbeatMSG(Runtime runtime){\r
+        if (is_protocol_not_Initialled()) return "";\r
         String ret="";\r
         switch(Config.protocol_no)\r
         {\r
@@ -177,6 +188,7 @@ public class protocolAPIHelper {
     }\r
 \r
     public static String getGPSLocationMSG(Runtime runtime){\r
+        if (is_protocol_not_Initialled()) return "";\r
         String ret="";\r
         switch(Config.protocol_no)\r
         {\r
@@ -196,6 +208,7 @@ public class protocolAPIHelper {
         return ret;\r
     }\r
     public static String getLBSLocationMSG(Runtime runtime){\r
+        if (is_protocol_not_Initialled()) return "";\r
         String ret="";\r
         switch(Config.protocol_no)\r
         {\r
@@ -217,6 +230,7 @@ public class protocolAPIHelper {
 \r
     public static byte[] getVoicePacketItem(String  packetTime,int count,int index,int datalen,byte[] amrdata){\r
         byte[] ret=null;\r
+        if (is_protocol_not_Initialled()) return null;\r
         switch(Config.protocol_no)\r
         {\r
             case Config.PROTOCOL_JIAI:\r
@@ -235,7 +249,7 @@ public class protocolAPIHelper {
         return ret;\r
     }\r
     public static String getPPG_ECG_MSG(Runtime runtime){\r
-\r
+        if (is_protocol_not_Initialled()) return "";\r
         String ret="";\r
         switch(Config.protocol_no)\r
         {\r
@@ -255,7 +269,7 @@ public class protocolAPIHelper {
         return ret;\r
     }\r
     public static String getPPG_ECG_MSG(int  ppg,int bph,int bpl){\r
-\r
+        if (is_protocol_not_Initialled()) return "";\r
         String ret="";\r
         switch(Config.protocol_no)\r
         {\r
@@ -276,6 +290,7 @@ public class protocolAPIHelper {
     }\r
 \r
     public static String getBlood_MSG(int pbh, int pbl){\r
+        if (is_protocol_not_Initialled()) return "";\r
         String ret="";\r
         switch(Config.protocol_no)\r
         {\r
@@ -296,6 +311,7 @@ public class protocolAPIHelper {
     }\r
 \r
     public static String getOxygen_MSG(int ox){\r
+        if (is_protocol_not_Initialled()) return "";\r
         String ret="";\r
         switch(Config.protocol_no)\r
         {\r
@@ -315,6 +331,7 @@ public class protocolAPIHelper {
         return ret;\r
     }\r
     public static String getPPG_MSG(int ppg){\r
+        if (is_protocol_not_Initialled()) return "";\r
         String ret="";\r
         switch(Config.protocol_no)\r
         {\r
@@ -334,6 +351,7 @@ public class protocolAPIHelper {
         return ret;\r
     }\r
     public static String getPPG_ECG_MSG(int  ppg,int bph,int bpl,int spo2){\r
+        if (is_protocol_not_Initialled()) return "";\r
 \r
         String ret="";\r
         switch(Config.protocol_no)\r
index a64035c..aab734b 100644 (file)
@@ -1,2 +1,2 @@
-#Thu Jul 30 01:25:40 CST 2020\r
-VERSION_CODE=464\r
+#Thu Jul 30 19:41:32 CST 2020\r
+VERSION_CODE=466\r