diff --git a/core/.gitignore b/core/.gitignore
new file mode 100644
index 0000000..36af493
--- /dev/null
+++ b/core/.gitignore
@@ -0,0 +1,3 @@
+/build
+*.iml
+*.DS_Store
\ No newline at end of file
diff --git a/core/build.gradle b/core/build.gradle
new file mode 100644
index 0000000..4dccc86
--- /dev/null
+++ b/core/build.gradle
@@ -0,0 +1,107 @@
+apply plugin: 'com.android.library'
+apply plugin: 'realm-android'
+apply plugin: 'kotlin-android'
+apply plugin: 'kotlin-parcelize'
+
+android {
+ compileSdkVersion COMPILE_SDK_VERSION.toInteger()
+ defaultConfig {
+ minSdkVersion MIN_SDK_VERSION.toInteger()
+ targetSdkVersion TARGET_SDK_VERSION.toInteger()
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled true
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_11
+ targetCompatibility JavaVersion.VERSION_11
+ }
+
+ kotlinOptions {
+ jvmTarget = '11'
+ }
+
+ sourceSets {
+ main {
+ java.srcDirs = [
+ 'src/main/java',
+ 'src/model_smscode/java',
+ 'src/model_public_chat_hall/java',
+ 'src/model_pay/java',
+ 'src/model_upgrade_app/java',
+ 'src/model_labour_union/java',
+ 'src/model_mentoring_relationship/java',
+ 'src/model_music/java',
+ 'src/model_database_room/java',
+ 'src/model_mini_world/java',
+ 'src/model_bank_card/java',
+ 'src/model_super_admin/java',
+ 'src/model_treasure_box/java',
+ 'src/model_community/java',
+ 'src/model_channel_page/java',
+ 'src/model_treasure_box/java',
+ 'src/model_sud_wrapper/java'
+ ]
+// jniLibs.srcDirs = ['libs', 'umeng-app-libs/jniLibs']
+ }
+ }
+
+ buildToolsVersion = '30.0.3'
+
+}
+
+def Lombok = "1.18.24"
+
+dependencies {
+ api fileTree(dir: 'libs', include: ['*.jar'])
+
+ api "com.orhanobut:logger:2.2.0"
+
+ compileOnly "org.projectlombok:lombok:${Lombok}"
+ annotationProcessor "org.projectlombok:lombok:${Lombok}"
+
+ api fileTree(dir: 'share-sdk-libs', include: ['*.jar'])
+
+ // 声网
+ api 'io.agora.rtc:voice-sdk:4.2.2'
+
+ // core
+// implementation 'com.liulishuo.okdownload:okdownload:1.0.4'
+ // provide sqlite to store breakpoints
+// implementation 'com.liulishuo.okdownload:sqlite:1.0.4'
+ // provide okhttp to connect to backend
+// implementation 'com.liulishuo.okdownload:okhttp:1.0.4'
+ // Room
+ api 'androidx.room:room-runtime:2.5.1'
+ annotationProcessor 'androidx.room:room-compiler:2.5.1'
+ // RxJava support for Room
+ api 'androidx.room:room-rxjava2:2.5.1'
+
+ //firebase推送、统计
+// implementation 'com.google.firebase:firebase-messaging:23.1.1'
+// implementation 'com.google.android.gms:play-services-base:18.1.0'
+// implementation 'com.google.firebase:firebase-core:19.0.0'
+// implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1'
+
+ api 'org.jetbrains.kotlin:kotlin-reflect:1.7.10'
+
+ api project(':nim_uikit')
+ api project(':library')
+
+// implementation 'com.liulishuo.okdownload:okdownload:1.0.7'
+// implementation 'com.liulishuo.okdownload:okhttp:1.0.7'
+
+ implementation 'com.tencent.liteav:LiteAVSDK_TRTC:11.7.0.13946'
+
+ api project(':modules:module_base')
+
+ api 'tech.sud.mgp:SudMGP-static:1.5.2.1238'
+}
+repositories {
+ mavenCentral()
+}
diff --git a/core/proguard-rules.pro b/core/proguard-rules.pro
new file mode 100644
index 0000000..f1b4245
--- /dev/null
+++ b/core/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/core/src/main/AndroidManifest.xml b/core/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..331e38e
--- /dev/null
+++ b/core/src/main/AndroidManifest.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/core/src/main/java/com/chwl/core/Constants.java b/core/src/main/java/com/chwl/core/Constants.java
new file mode 100644
index 0000000..20d8a89
--- /dev/null
+++ b/core/src/main/java/com/chwl/core/Constants.java
@@ -0,0 +1,120 @@
+package com.chwl.core;
+
+import com.chwl.library.common.application.Env;
+import com.chwl.library.utils.config.BasicConfig;
+import com.chwl.library.utils.pref.CommonPref;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ *
常量集合
+ * Created by Administrator on 2017/11/9.
+ */
+public class Constants {
+ public static final String ERBAN_DIR_NAME = XConstants.XCHAT_DIR_NAME;
+ public static final String nimAppKey = Env.isDebug() ?
+ SdkConfig.INSTANCE.getNimKeyDebug() : SdkConfig.INSTANCE.getNimKeyRelease();
+// public static final String nimAppSecret = "da03b83af84a";
+ /**
+ * 百度统计
+ */
+
+ public static final String LOG_DIR = ERBAN_DIR_NAME + File.separator + "logs";
+ public static final String CONFIG_DIR = ERBAN_DIR_NAME + File.separator + "config";
+ public static final String VOICE_DIR = ERBAN_DIR_NAME + File.separator + "voice";
+ public static final String CACHE_DIR = ERBAN_DIR_NAME + File.separator + "cache";
+ public static final String HTTP_CACHE_DIR = ERBAN_DIR_NAME + File.separator + "http";
+ public static final String IMAGE_CACHE_DIR = ERBAN_DIR_NAME + File.separator + "image";
+ public static final String DYNAMIC_CACHE_DIR = ERBAN_DIR_NAME + File.separator + "dynamic";
+
+
+ public static final String KEY_MAIN_POSITION = "key_main_position";
+
+ public static final int RESULT_OK = 200;
+
+ public static final int PAGE_START = 1;
+ public static final int PAGE_SIZE = 20;
+ public static final int PAGE_HOME_HOT_SIZE = 12;
+ public static final int BILL_PAGE_SIZE = 50;
+
+ public static final int DEBUG_MAX_UID = 100000;
+
+
+ public static final String HOME_TAB_INFO = "home_tab_info";
+ public static final String KEY_USER_INFO = "key_user_info";
+
+ public static final String KEY_HOME_LIST = "key_home_list";
+ public static final String KEY_HOME_HOT_LIST = "key_home_hot_list";
+ public static final String KEY_HOME_NO_HOT_LIST = "key_home_no_hot_list";
+
+ public static final int FAN_MAIN_PAGE_TYPE = 100;
+ public static final int FAN_NO_MAIN_PAGE_TYPE = 101;
+ public static final String KEY_PAGE_TYPE = "page_type";
+ public static final String KEY_MAIN_TAB_LIST = "main_tab_list";
+
+ public static final String KEY_POSITION = "position";
+
+
+ public static final String CHARGE_UNION_PAY = "fastpay";
+
+ public static final int PAGE_TYPE_MAIN_FRAGMENT = 102;
+
+ /**
+ * 房间相关Key设置
+ */
+ public static final String ROOM_UPDATE_KEY_POSTION = "micPosition";
+ public static final String ROOM_UPDATE_KEY_UID = "micUid";
+ public static final String ROOM_UPDATE_KEY_GENDER = "gender";
+
+ public static final String KEY_CHAT_ROOM_INFO_ROOM = "roomInfo";
+ public static final String KEY_CHAT_ROOM_INFO_MIC = "micQueue";
+
+ public static final String ROOM_UID = "ROOM_UID";
+ public static final String ROOM_TYPE = "ROOM_TYPE";
+ public static final String ROOM_INFO = "ROOM_INFO";
+ public static final String IS_ROOM_MIN = "is_room_min";
+ public static final String IS_PARTY = "is_party";
+
+ /**
+ * 座驾版本第一次显示控制key
+ */
+ public static final String SHOW_CAR_GUIDE = "show_car_guide";
+
+ public static final String NEW_USER_ICON = "https://image.zhongjialx.com/newUserIcon.png";
+
+ public static final String IS_SEND = "isSend";
+ public static final String TOP_TITLE = "top_title";
+
+ public static final int CLIENT_ROLE_BROADCASTER = 1;
+ public static final int CLIENT_ROLE_AUDIENCE = 2;
+
+ public static final int DRAGON_BAR_ID = XConstants.DRAGON_BALL_ID;
+
+ public static final byte TYPE_JOINED = 1;
+ public static final byte TYPE_RECOMMEND = 2;
+ public static final byte TYPE_ALL = 0;
+
+ public static final String WXPAY_REFERER = (BuildConfig.DEBUG && CommonPref.instance(BasicConfig.INSTANCE.getAppContext()).getInt(Env.KEY_ENVIRONMENT) == Env.EnvType.Debug.code) ?
+ XConstants.KEY_REFERER_DEBUG : XConstants.KEY_REFERER_RELEASE;
+
+ //相亲模式男神坑位下标
+ public static final List maleIndex = Arrays.asList(0, 1, 4, 5);
+
+ public static final String GOOGLE = com.chwl.library.common.Constants.GOOGLE;
+
+ public static final String ANDROID = "android";
+
+ //上传的图片 默认大小不能超过大小 640KB
+ public static final int UPLOAD_IMAGE_MAX_FILE_LENGTH = 640;
+ //上传的图片 默认宽高最大值 2340
+ public static final int UPLOAD_IMAGE_MAX_SIZE = 2340;
+ //上传的gif 默认大小不能超过 1MB
+ public static final int UPLOAD_GIF_MAX_SIZE = 1 << 20;
+
+ public static final String PHONE_LOGIN = "phone_login";
+
+ public static final String IS_SHOW_FREE_GIFT = "is_show_free_gift";
+
+}
diff --git a/core/src/main/java/com/chwl/core/DemoCache.java b/core/src/main/java/com/chwl/core/DemoCache.java
new file mode 100644
index 0000000..6983050
--- /dev/null
+++ b/core/src/main/java/com/chwl/core/DemoCache.java
@@ -0,0 +1,346 @@
+package com.chwl.core;
+
+import android.text.TextUtils;
+
+import androidx.annotation.Nullable;
+
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+import com.netease.nimlib.sdk.StatusBarNotificationConfig;
+import com.chwl.core.auth.AuthModel;
+import com.chwl.core.auth.entity.AccountInfo;
+import com.chwl.core.auth.entity.TicketInfo;
+import com.chwl.core.home.bean.MainTabInfo;
+import com.chwl.core.initial.bean.SplashComponent;
+import com.chwl.core.initial.bean.InitInfo;
+import com.chwl.core.noble.bean.NobleConfig;
+import com.chwl.core.noble.bean.NobleRight;
+import com.chwl.core.utils.CurrentTimeUtils;
+import com.chwl.core.utils.SharedPreferenceUtils;
+import com.chwl.library.utils.pref.ObjectPref;
+import com.chwl.library.utils.pref.SettingsPref;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * Created by zhouxiangfeng on 2017/5/6.
+ */
+
+public class DemoCache {
+ public static final String KEY_IS_FIRST_HOME_HIGH_PARTY_DIALOG = "IsFirstHomeHighPartyDialog";
+ private static final String KEY_BOX_MESSAGE = "key_box_message";
+ private static final String KEY_TICKET_INFO = "TicketInfo";
+ private static final String KEY_ACCOUNT_INFO = "AccountInfo";
+ private static final String KEY_FACE_LIST_INFO = "FaceListInfo";
+ private static final String KEY_INIT_DATA = "InitInfo";
+ private static final String KEY_INIT_DATA_SAVE_TIME = "InitInfoSavingTime";
+ private static final String KEY_INIT_DATA_SPLASH_PICTURE = "InitInfoSplashPicture";
+ private static final String KEY_INIT_DATA_SPLASH_DATA = "InitInfoSplashData";
+ private static final String KEY_INIT_DATA_NOBLE_VERSION = "InitInfoNobleVersion";
+ private static final String KEY_INIT_DATA_NOBLE_RIGHTS = "InitInfoNobleRights";
+ private static final String KEY_INIT_DATA_NOBLE_CONFIGS = "InitInfoNobleConfigs";
+ private static final String KEY_RED_PACKAGE = "RedPackage";
+ private static final String KEY_AT_MSG_UUID = "AtMsgUuid";
+ private static final String KEY_BGM_SINGLE_CYCLE = "key_bgm_single_cycle";
+ private static final String KEY_SINGLE_ROOM_TIP = "key_single_room_tip";
+ private static final String KEY_NEW_USER_GIFT = "key_new_user_gift";
+ private static final String KEY_NEW_USER_CHARGE_GIFT = "key_new_user_charge_gift";
+ private static final String KEY_MAIN_TAB_DATA = "key_main_tab_data";
+ private static final String KEY_SPEEDY_MESSAGE_GONE_TIME = "SpeedyMessageGoneTime";
+ private static final String KEY_ANCHOR_CARD_VIEW = "key_anchor_card_view";
+ private static final String KEY_ANCHOR_CARD_VIEW_TIME = "key_anchor_card_view_time";
+ private static final String KEY_LAUNCH_COUNT = "key_launch_count";
+ private static final String KEY_RADISH_TIPS = "key_radish_tips";
+ private static final String KEY_KICK_OUT_ROOM = "kick_out_room";
+ private static final String KEY_BOUND_AUTH_CODE = "key_bound_auth_code";
+ private static final String KEY_MY_FAIRY_INDEX = "key_my_fairy_index";
+
+ private static StatusBarNotificationConfig notificationConfig;
+
+ public static Long readSpeedyMessageGoneTime() {
+ return (Long) ObjectPref.instance().get(KEY_SPEEDY_MESSAGE_GONE_TIME, 0L);
+ }
+
+ public static void saveSpeedyMessageGoneTime(Long savingTime) {
+ ObjectPref.instance().put(KEY_SPEEDY_MESSAGE_GONE_TIME, savingTime);
+ }
+
+ public static Map readNobleRights() {
+ String string = SettingsPref.instance().getString(KEY_INIT_DATA_NOBLE_RIGHTS, null);
+ if (TextUtils.isEmpty(string)) return null;
+ return new Gson().fromJson(string,
+ new TypeToken