From cc9ebc46c32524a9f249e7bb1180ffc01a55d724 Mon Sep 17 00:00:00 2001 From: wangtao55 <wangtao55@hikcreate.com> Date: Mon, 23 Sep 2019 20:01:24 +0800 Subject: [PATCH] feat:组件生命周期控制 --- ModuleProject/.idea/gradle.xml | 1 + ModuleProject/app/build.gradle | 14 +++++++++++++- ModuleProject/app/src/main/AndroidManifest.xml | 1 + ModuleProject/app/src/main/java/com/hikcreate/app/AppActivityLifeCycle.java | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ ModuleProject/app/src/main/java/com/hikcreate/app/AppAppLogic.java | 35 +++++++++++++++++++++++++++++++++++ ModuleProject/app/src/main/java/com/hikcreate/app/AppBaseContext.java | 27 --------------------------- ModuleProject/app/src/main/java/com/hikcreate/app/CommonApplication.java | 46 ++++++++++++++++++++++++++++++++++++++++++++++ ModuleProject/app/src/main/java/com/hikcreate/temp/TestBean.java | 21 +++++++++++++++++++++ ModuleProject/app/src/main/java/com/hikcreate/ui/testActivity.java | 7 +++++-- ModuleProject/app/src/main/res/layout/app_test.xml | 2 +- ModuleProject/app_common/build.gradle | 14 ++++++++++++++ ModuleProject/app_common/src/main/java/com/hikcreate/app/AppContext.java | 21 --------------------- ModuleProject/app_login/build.gradle | 17 ++++++++++++++--- ModuleProject/app_login/src/main/java/com/hikcreate/login/testLoginActivity.java | 5 +++++ ModuleProject/app_login/src/main/java/com/hikcreate/test/CommonApplication.java | 35 +++++++++++++++++++++++++++++++++++ ModuleProject/app_login/src/main/java/com/login/LoginActivityLifeCycle.java | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ ModuleProject/app_login/src/main/java/com/login/LoginAppLogic.java | 35 +++++++++++++++++++++++++++++++++++ ModuleProject/app_login/src/main/module/AndroidManifest.xml | 1 + ModuleProject/app_passport/build.gradle | 13 ++++++++++++- ModuleProject/app_passport/src/main/java/com/hikcreate/passport/TestFragment.java | 18 ++++++++++++++++++ ModuleProject/config/app_config.gradle | 7 +++++++ ModuleProject/config/app_module_config.gradle | 2 -- ModuleProject/config/config_demo | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ModuleProject/lib_app_common/build.gradle | 25 ++++++++++++++++--------- ModuleProject/lib_baidu_audiodect/build.gradle | 11 ++++++++--- ModuleProject/lib_baidu_facedect/build.gradle | 9 ++++++--- ModuleProject/lib_baidu_textdect/build.gradle | 3 +++ ModuleProject/lib_common_ui/build.gradle | 6 +++++- ModuleProject/lib_data_drive/build.gradle | 11 ++++++++--- ModuleProject/lib_data_drive/src/main/java/com/data/bean/GeneralMessageBean.java | 47 ----------------------------------------------- ModuleProject/lib_data_drive/src/main/java/com/data/driver/MessageWrap.java | 18 ------------------ ModuleProject/lib_data_drive/src/main/java/com/data/util/ObjectUtil.java | 97 ------------------------------------------------------------------------------------------------- ModuleProject/lib_data_drive/src/main/java/com/message/bean/GeneralMessageBean.java | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ ModuleProject/lib_data_drive/src/main/java/com/message/driver/MessageWrap.java | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ModuleProject/lib_data_drive/src/main/java/com/message/util/ObjectUtil.java | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ModuleProject/lib_module_common/.gitignore | 1 + ModuleProject/lib_module_common/build.gradle | 37 +++++++++++++++++++++++++++++++++++++ ModuleProject/lib_module_common/proguard-rules.pro | 21 +++++++++++++++++++++ ModuleProject/lib_module_common/src/androidTest/java/info/hook/com/lib_module_common/ExampleInstrumentedTest.java | 27 +++++++++++++++++++++++++++ ModuleProject/lib_module_common/src/main/AndroidManifest.xml | 2 ++ ModuleProject/lib_module_common/src/main/java/com/hikcreate/base/AppContext.java | 192 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ModuleProject/lib_module_common/src/main/java/com/hikcreate/base/BaseActivityLifeLogic.java | 26 ++++++++++++++++++++++++++ ModuleProject/lib_module_common/src/main/java/com/hikcreate/base/BaseAppLogic.java | 22 ++++++++++++++++++++++ ModuleProject/lib_module_common/src/main/res/values/strings.xml | 3 +++ ModuleProject/lib_module_common/src/test/java/info/hook/com/lib_module_common/ExampleUnitTest.java | 17 +++++++++++++++++ ModuleProject/lib_network/build.gradle | 6 +++++- ModuleProject/settings.gradle | 2 +- 47 files changed, 1078 insertions(+), 241 deletions(-) create mode 100644 ModuleProject/app/src/main/java/com/hikcreate/app/AppActivityLifeCycle.java create mode 100644 ModuleProject/app/src/main/java/com/hikcreate/app/AppAppLogic.java delete mode 100644 ModuleProject/app/src/main/java/com/hikcreate/app/AppBaseContext.java create mode 100644 ModuleProject/app/src/main/java/com/hikcreate/app/CommonApplication.java create mode 100644 ModuleProject/app/src/main/java/com/hikcreate/temp/TestBean.java delete mode 100644 ModuleProject/app_common/src/main/java/com/hikcreate/app/AppContext.java create mode 100644 ModuleProject/app_login/src/main/java/com/hikcreate/test/CommonApplication.java create mode 100644 ModuleProject/app_login/src/main/java/com/login/LoginActivityLifeCycle.java create mode 100644 ModuleProject/app_login/src/main/java/com/login/LoginAppLogic.java create mode 100644 ModuleProject/config/config_demo delete mode 100644 ModuleProject/lib_data_drive/src/main/java/com/data/bean/GeneralMessageBean.java delete mode 100644 ModuleProject/lib_data_drive/src/main/java/com/data/driver/MessageWrap.java delete mode 100644 ModuleProject/lib_data_drive/src/main/java/com/data/util/ObjectUtil.java create mode 100644 ModuleProject/lib_data_drive/src/main/java/com/message/bean/GeneralMessageBean.java create mode 100644 ModuleProject/lib_data_drive/src/main/java/com/message/driver/MessageWrap.java create mode 100644 ModuleProject/lib_data_drive/src/main/java/com/message/util/ObjectUtil.java create mode 100644 ModuleProject/lib_module_common/.gitignore create mode 100644 ModuleProject/lib_module_common/build.gradle create mode 100644 ModuleProject/lib_module_common/proguard-rules.pro create mode 100644 ModuleProject/lib_module_common/src/androidTest/java/info/hook/com/lib_module_common/ExampleInstrumentedTest.java create mode 100644 ModuleProject/lib_module_common/src/main/AndroidManifest.xml create mode 100644 ModuleProject/lib_module_common/src/main/java/com/hikcreate/base/AppContext.java create mode 100644 ModuleProject/lib_module_common/src/main/java/com/hikcreate/base/BaseActivityLifeLogic.java create mode 100644 ModuleProject/lib_module_common/src/main/java/com/hikcreate/base/BaseAppLogic.java create mode 100644 ModuleProject/lib_module_common/src/main/res/values/strings.xml create mode 100644 ModuleProject/lib_module_common/src/test/java/info/hook/com/lib_module_common/ExampleUnitTest.java diff --git a/ModuleProject/.idea/gradle.xml b/ModuleProject/.idea/gradle.xml index 393fa21..3fffeaa 100644 --- a/ModuleProject/.idea/gradle.xml +++ b/ModuleProject/.idea/gradle.xml @@ -19,6 +19,7 @@ <option value="$PROJECT_DIR$/lib_baidu_textdect" /> <option value="$PROJECT_DIR$/lib_common_ui" /> <option value="$PROJECT_DIR$/lib_data_drive" /> + <option value="$PROJECT_DIR$/lib_module_common" /> <option value="$PROJECT_DIR$/lib_network" /> </set> </option> diff --git a/ModuleProject/app/build.gradle b/ModuleProject/app/build.gradle index 024789b..4dcd4d4 100644 --- a/ModuleProject/app/build.gradle +++ b/ModuleProject/app/build.gradle @@ -14,7 +14,15 @@ android { targetSdkVersion build_config.target_sdk versionCode build_config.version_code versionName build_config.version_name + multiDexEnabled true testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + javaCompileOptions { + annotationProcessorOptions { + arguments = [AROUTER_MODULE_NAME : project.getName(), AROUTER_GENERATE_DOC: "enable", //For ARouter + "room.schemaLocation": "$projectDir/schemas".toString()] + //指定room.schemaLocation生成的文件路径 + } + } } sourceSets { @@ -88,9 +96,13 @@ android { lintOptions { abortOnError false } -} + dexOptions { + preDexLibraries = false + } +} + dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) diff --git a/ModuleProject/app/src/main/AndroidManifest.xml b/ModuleProject/app/src/main/AndroidManifest.xml index 4cf24c7..45c8c0d 100644 --- a/ModuleProject/app/src/main/AndroidManifest.xml +++ b/ModuleProject/app/src/main/AndroidManifest.xml @@ -5,6 +5,7 @@ <application android:roundIcon="@mipmap/ic_launcher" android:allowBackup="false" + android:name="com.hikcreate.app.CommonApplication" android:theme="@style/Theme.AppCompat.Light.NoActionBar" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" diff --git a/ModuleProject/app/src/main/java/com/hikcreate/app/AppActivityLifeCycle.java b/ModuleProject/app/src/main/java/com/hikcreate/app/AppActivityLifeCycle.java new file mode 100644 index 0000000..55e4f02 --- /dev/null +++ b/ModuleProject/app/src/main/java/com/hikcreate/app/AppActivityLifeCycle.java @@ -0,0 +1,50 @@ +package com.hikcreate.app; + +import android.app.Activity; +import android.os.Bundle; +import android.widget.Toast; + +import com.hikcreate.base.BaseActivityLifeLogic; + +/** + * + * @author wangtao55 + * @date 2019/9/23 + * @mail wangtao55@hikcreate.com + */ +public class AppActivityLifeCycle extends BaseActivityLifeLogic { + @Override + public void onActivityCreated(Activity activity, Bundle savedInstanceState) { + Toast.makeText(activity,"AppActivityLifeCycle",Toast.LENGTH_LONG).show(); + } + + @Override + public void onActivityStarted(Activity activity) { + + } + + @Override + public void onActivityResumed(Activity activity) { + + } + + @Override + public void onActivityPaused(Activity activity) { + + } + + @Override + public void onActivityStopped(Activity activity) { + + } + + @Override + public void onActivityDestroyed(Activity activity) { + + } + + @Override + public void onActivitySaveInstanceState(Activity activity, Bundle savedInstanceState) { + + } +} diff --git a/ModuleProject/app/src/main/java/com/hikcreate/app/AppAppLogic.java b/ModuleProject/app/src/main/java/com/hikcreate/app/AppAppLogic.java new file mode 100644 index 0000000..d65a82f --- /dev/null +++ b/ModuleProject/app/src/main/java/com/hikcreate/app/AppAppLogic.java @@ -0,0 +1,35 @@ +package com.hikcreate.app; + +import android.content.res.Configuration; +import android.util.Log; + +import com.hikcreate.base.BaseAppLogic; + +/** + * 类说明 + * + * @author wangtao55 + * @date 2019/9/23 + * @mail wangtao55@hikcreate.com + */ +public class AppAppLogic extends BaseAppLogic { + @Override + public void onCreate() { + Log.v("AppAppLogic","onCreate--------------------->"); + } + + @Override + public void onTerminate() { + Log.v("AppAppLogic","onTerminate--------------------->"); + } + + @Override + public void onLowMemory() { + Log.v("AppAppLogic","onLowMemory--------------------->"); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + Log.v("AppAppLogic","onConfigurationChanged--------------------->"); + } +} diff --git a/ModuleProject/app/src/main/java/com/hikcreate/app/AppBaseContext.java b/ModuleProject/app/src/main/java/com/hikcreate/app/AppBaseContext.java deleted file mode 100644 index 65c0bfd..0000000 --- a/ModuleProject/app/src/main/java/com/hikcreate/app/AppBaseContext.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.hikcreate.app; - -import android.app.Application; -import android.content.Context; -import android.support.multidex.MultiDex; - -/** - * app初始化类 - * - * @author wangtao55 - * @date 2019/9/21 - * @mail wangtao55@hikcreate.com - */ -public class AppBaseContext extends Application { - - @Override - protected void attachBaseContext(Context base) { - super.attachBaseContext(base); - AppContext.init(base); - } - - @Override - public void onCreate() { - super.onCreate(); - } - -} diff --git a/ModuleProject/app/src/main/java/com/hikcreate/app/CommonApplication.java b/ModuleProject/app/src/main/java/com/hikcreate/app/CommonApplication.java new file mode 100644 index 0000000..3d533b9 --- /dev/null +++ b/ModuleProject/app/src/main/java/com/hikcreate/app/CommonApplication.java @@ -0,0 +1,46 @@ +package com.hikcreate.app; + +import android.app.Application; + +import com.hikcreate.base.AppContext; + +/** + * 类说明 + * + * @author wangtao55 + * @date 2019/9/23 + * @mail wangtao55@hikcreate.com + */ +public class CommonApplication extends Application { + + @Override + public void onCreate() { + super.onCreate(); + registerAppLife(); + registerActivityLife(); + AppContext.getInstance().logicOnCreate(this); + } + + private void registerAppLife(){ + AppContext.getInstance().registerAppLogic("com.login.LoginAppLogic"); + AppContext.getInstance().registerAppLogic("com.hikcreate.app.AppAppLogic"); + } + + private void registerActivityLife(){ + AppContext.getInstance().registerActivityLifeLogic("com.login.LoginActivityLifeCycle"); + AppContext.getInstance().registerActivityLifeLogic("com.hikcreate.app.AppActivityLifeCycle"); + } + + @Override + public void onTerminate() { + super.onTerminate(); + AppContext.getInstance().logicOnTerminate(); + } + + @Override + public void onLowMemory() { + super.onLowMemory(); + AppContext.getInstance().logicOnLowMemory(); + } + +} diff --git a/ModuleProject/app/src/main/java/com/hikcreate/temp/TestBean.java b/ModuleProject/app/src/main/java/com/hikcreate/temp/TestBean.java new file mode 100644 index 0000000..9a49d00 --- /dev/null +++ b/ModuleProject/app/src/main/java/com/hikcreate/temp/TestBean.java @@ -0,0 +1,21 @@ +package com.hikcreate.temp; + +/** + * 类说明 + * + * @author wangtao55 + * @date 2019/9/23 + * @mail wangtao55@hikcreate.com + */ +public class TestBean { + + public String tempValue; + + public String getTempValue() { + return tempValue; + } + + public void setTempValue(String tempValue) { + this.tempValue = tempValue; + } +} diff --git a/ModuleProject/app/src/main/java/com/hikcreate/ui/testActivity.java b/ModuleProject/app/src/main/java/com/hikcreate/ui/testActivity.java index 68d4440..88a8b60 100644 --- a/ModuleProject/app/src/main/java/com/hikcreate/ui/testActivity.java +++ b/ModuleProject/app/src/main/java/com/hikcreate/ui/testActivity.java @@ -5,8 +5,12 @@ import android.os.Bundle; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AppCompatActivity; +import com.message.bean.GeneralMessageBean; +import com.message.driver.MessageWrap; +import com.google.gson.Gson; import com.hikcreate.login.testLoginActivity; import com.hikcreate.passport.TestFragment; +import com.hikcreate.temp.TestBean; import com.module.hikcreate.R; @@ -28,8 +32,7 @@ public class testActivity extends AppCompatActivity { startActivity(mIntent); }); findViewById(R.id.mBtnPassport).setOnClickListener(v -> { - Intent mIntent = new Intent(testActivity.this,testLoginActivity.class); - startActivity(mIntent); + }); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.add(R.id.test_passport,new TestFragment()); diff --git a/ModuleProject/app/src/main/res/layout/app_test.xml b/ModuleProject/app/src/main/res/layout/app_test.xml index 258bee8..ce3d4da 100644 --- a/ModuleProject/app/src/main/res/layout/app_test.xml +++ b/ModuleProject/app/src/main/res/layout/app_test.xml @@ -19,7 +19,7 @@ <Button android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="给通行证模块发送信息" + android:text="发送Message信息" android:layout_marginTop="10dp" android:id="@+id/mBtnPassport" /> diff --git a/ModuleProject/app_common/build.gradle b/ModuleProject/app_common/build.gradle index 0ea4cec..3eab681 100644 --- a/ModuleProject/app_common/build.gradle +++ b/ModuleProject/app_common/build.gradle @@ -11,6 +11,13 @@ android { versionCode build_config.version_code versionName build_config.version_name testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + javaCompileOptions { + annotationProcessorOptions { + arguments = [AROUTER_MODULE_NAME : project.getName(), AROUTER_GENERATE_DOC: "enable", //For ARouter + "room.schemaLocation": "$projectDir/schemas".toString()] + //指定room.schemaLocation生成的文件路径 + } + } } buildTypes { @@ -20,9 +27,16 @@ android { } } + dexOptions { + preDexLibraries = false + } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) api project(':lib_app_common') + api project(':lib_common_ui') + api project(':lib_data_drive') + api project(':lib_network') + api project(':lib_module_common') } diff --git a/ModuleProject/app_common/src/main/java/com/hikcreate/app/AppContext.java b/ModuleProject/app_common/src/main/java/com/hikcreate/app/AppContext.java deleted file mode 100644 index b4e3d7f..0000000 --- a/ModuleProject/app_common/src/main/java/com/hikcreate/app/AppContext.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.hikcreate.app; - -import android.content.Context; -import android.support.multidex.MultiDex; - -/** - * app初始化类 - * - * @author wangtao55 - * @date 2019/9/21 - * @mail wangtao55@hikcreate.com - */ -public class AppContext { - - private Context mContext; - - - public static void init(Context application){ - MultiDex.install(application); - } -} diff --git a/ModuleProject/app_login/build.gradle b/ModuleProject/app_login/build.gradle index 2a86df3..d4ccdd2 100644 --- a/ModuleProject/app_login/build.gradle +++ b/ModuleProject/app_login/build.gradle @@ -6,14 +6,22 @@ if (build_module == build_module_login) { android { defaultConfig { if (build_module == build_module_login) { - applicationId build_modele_login_app_id + applicationId build_modele_app_id +"."+ project.getName() } minSdkVersion build_config.min_sdk targetSdkVersion build_config.target_sdk versionCode build_config.version_code versionName build_config.version_name resourcePrefix build_modele_login_resourcePrefix + multiDexEnabled true testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + javaCompileOptions { + annotationProcessorOptions { + arguments = [AROUTER_MODULE_NAME : project.getName(), AROUTER_GENERATE_DOC: "enable", //For ARouter + "room.schemaLocation": "$projectDir/schemas".toString()] + //指定room.schemaLocation生成的文件路径 + } + } } compileSdkVersion build_config.compile_sdk @@ -44,15 +52,18 @@ android { } else { manifest.srcFile 'src/main/AndroidManifest.xml' java { - exclude 'com/duiafudao/app_login/application/**' + exclude 'com/hikcreate/test/**' } } } } + + dexOptions { + preDexLibraries = false + } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - api project(':lib_app_common') api project(':app_common') } diff --git a/ModuleProject/app_login/src/main/java/com/hikcreate/login/testLoginActivity.java b/ModuleProject/app_login/src/main/java/com/hikcreate/login/testLoginActivity.java index 1977635..f0573ca 100644 --- a/ModuleProject/app_login/src/main/java/com/hikcreate/login/testLoginActivity.java +++ b/ModuleProject/app_login/src/main/java/com/hikcreate/login/testLoginActivity.java @@ -19,4 +19,9 @@ public class testLoginActivity extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.lg_app_test); } + + @Override + protected void onDestroy() { + super.onDestroy(); + } } diff --git a/ModuleProject/app_login/src/main/java/com/hikcreate/test/CommonApplication.java b/ModuleProject/app_login/src/main/java/com/hikcreate/test/CommonApplication.java new file mode 100644 index 0000000..26eaedd --- /dev/null +++ b/ModuleProject/app_login/src/main/java/com/hikcreate/test/CommonApplication.java @@ -0,0 +1,35 @@ +package com.hikcreate.test; + +import android.app.Application; + +import com.hikcreate.base.AppContext; + +/** + * + * @author wangtao55 + * @date 2019/9/23 + * @mail wangtao55@hikcreate.com + */ +public class CommonApplication extends Application { + + @Override + public void onCreate() { + super.onCreate(); + AppContext.getInstance().registerAppLogic("com.login.LoginAppLogic"); + AppContext.getInstance().registerActivityLifeLogic("com.login.LoginActivityLifeCycle"); + AppContext.getInstance().logicOnCreate(this); + } + + @Override + public void onTerminate() { + super.onTerminate(); + AppContext.getInstance().logicOnTerminate(); + } + + @Override + public void onLowMemory() { + super.onLowMemory(); + AppContext.getInstance().logicOnLowMemory(); + } + +} diff --git a/ModuleProject/app_login/src/main/java/com/login/LoginActivityLifeCycle.java b/ModuleProject/app_login/src/main/java/com/login/LoginActivityLifeCycle.java new file mode 100644 index 0000000..fd70f88 --- /dev/null +++ b/ModuleProject/app_login/src/main/java/com/login/LoginActivityLifeCycle.java @@ -0,0 +1,50 @@ +package com.login; + +import android.app.Activity; +import android.os.Bundle; +import android.widget.Toast; + +import com.hikcreate.base.BaseActivityLifeLogic; + +/** + * + * @author wangtao55 + * @date 2019/9/23 + * @mail wangtao55@hikcreate.com + */ +public class LoginActivityLifeCycle extends BaseActivityLifeLogic { + @Override + public void onActivityCreated(Activity activity, Bundle savedInstanceState) { + Toast.makeText(activity,"我来到了登录页面",Toast.LENGTH_LONG).show(); + } + + @Override + public void onActivityStarted(Activity activity) { + + } + + @Override + public void onActivityResumed(Activity activity) { + + } + + @Override + public void onActivityPaused(Activity activity) { + + } + + @Override + public void onActivityStopped(Activity activity) { + + } + + @Override + public void onActivityDestroyed(Activity activity) { + + } + + @Override + public void onActivitySaveInstanceState(Activity activity, Bundle savedInstanceState) { + + } +} diff --git a/ModuleProject/app_login/src/main/java/com/login/LoginAppLogic.java b/ModuleProject/app_login/src/main/java/com/login/LoginAppLogic.java new file mode 100644 index 0000000..ee05ad8 --- /dev/null +++ b/ModuleProject/app_login/src/main/java/com/login/LoginAppLogic.java @@ -0,0 +1,35 @@ +package com.login; + +import android.content.res.Configuration; +import android.util.Log; + +import com.hikcreate.base.BaseAppLogic; + +/** + * 类说明 + * + * @author wangtao55 + * @date 2019/9/23 + * @mail wangtao55@hikcreate.com + */ +public class LoginAppLogic extends BaseAppLogic { + @Override + public void onCreate() { + Log.v("LoginAppLogic","onCreate--------------------->"); + } + + @Override + public void onTerminate() { + Log.v("LoginAppLogic","onTerminate--------------------->"); + } + + @Override + public void onLowMemory() { + Log.v("LoginAppLogic","onLowMemory--------------------->"); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + Log.v("LoginAppLogic","onConfigurationChanged--------------------->"); + } +} diff --git a/ModuleProject/app_login/src/main/module/AndroidManifest.xml b/ModuleProject/app_login/src/main/module/AndroidManifest.xml index 38d9e24..20c9bb9 100644 --- a/ModuleProject/app_login/src/main/module/AndroidManifest.xml +++ b/ModuleProject/app_login/src/main/module/AndroidManifest.xml @@ -6,6 +6,7 @@ <application android:roundIcon="@mipmap/lg_ic_launcher" android:allowBackup="false" + android:name="com.hikcreate.test.CommonApplication" android:theme="@style/Theme.AppCompat.Light.NoActionBar" android:icon="@mipmap/lg_ic_launcher" android:label="@string/lg_app_name_test" diff --git a/ModuleProject/app_passport/build.gradle b/ModuleProject/app_passport/build.gradle index 73a1272..5edc651 100644 --- a/ModuleProject/app_passport/build.gradle +++ b/ModuleProject/app_passport/build.gradle @@ -7,14 +7,22 @@ if (build_module == build_module_passport) { android { defaultConfig { if (build_module == build_module_passport) { - applicationId build_modele_login_app_id + applicationId build_modele_app_id +"."+ project.getName() } minSdkVersion build_config.min_sdk targetSdkVersion build_config.target_sdk versionCode build_config.version_code versionName build_config.version_name resourcePrefix build_modele_passport_resourcePrefix + multiDexEnabled true testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + javaCompileOptions { + annotationProcessorOptions { + arguments = [AROUTER_MODULE_NAME : project.getName(), AROUTER_GENERATE_DOC: "enable", //For ARouter + "room.schemaLocation": "$projectDir/schemas".toString()] + //指定room.schemaLocation生成的文件路径 + } + } } compileSdkVersion build_config.compile_sdk @@ -25,6 +33,9 @@ android { } } + dexOptions { + preDexLibraries = false + } } dependencies { diff --git a/ModuleProject/app_passport/src/main/java/com/hikcreate/passport/TestFragment.java b/ModuleProject/app_passport/src/main/java/com/hikcreate/passport/TestFragment.java index a9ed91a..42de020 100644 --- a/ModuleProject/app_passport/src/main/java/com/hikcreate/passport/TestFragment.java +++ b/ModuleProject/app_passport/src/main/java/com/hikcreate/passport/TestFragment.java @@ -5,8 +5,14 @@ import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Toast; import com.app.passport.R; +import com.message.bean.GeneralMessageBean; +import com.message.driver.MessageWrap; + +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; /** @@ -21,6 +27,7 @@ public class TestFragment extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + MessageWrap.getMessageWrapDefault().register(this); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -28,9 +35,20 @@ public class TestFragment extends Fragment { return inflater.inflate(R.layout.passport_test_fragment,container,false); } + @Subscribe(threadMode = ThreadMode.MAIN) + public void test(GeneralMessageBean bean){ + Toast.makeText(getActivity(),MessageWrap.getMessageWrapDefault(). + getMessageInfo(bean,"tempValue"),Toast.LENGTH_LONG).show(); + } + @Override public void onPause() { super.onPause(); } + @Override + public void onDestroyView() { + super.onDestroyView(); + MessageWrap.getMessageWrapDefault().unregister(this); + } } diff --git a/ModuleProject/config/app_config.gradle b/ModuleProject/config/app_config.gradle index 12e320d..365a695 100644 --- a/ModuleProject/config/app_config.gradle +++ b/ModuleProject/config/app_config.gradle @@ -63,11 +63,18 @@ versions.bugly_native_crashreport ='latest.release' versions.meituanWalle = '1.1.3' versions.eventbus = "3.1.1" versions.gson = "2.8.0" +versions.arouter = "2.8.0" +versions.aRouterApi = '1.4.1' +versions.aRouterCompiler = '1.2.2' ext.versions = versions //deps依赖库 ext.deps = [:] def deps = [:] + +deps.aRouterApi = "com.alibaba:arouter-api:$versions.aRouterApi" +deps.aRouterCompiler = "com.alibaba:arouter-compiler:$versions.aRouterCompiler" + // App's support dependencies deps.appcompat = "com.android.support:appcompat-v7:$versions.supportLibraryVersion" deps.multidex = "com.android.support:multidex:$versions.multidexVersion" diff --git a/ModuleProject/config/app_module_config.gradle b/ModuleProject/config/app_module_config.gradle index f41caa7..553b7ed 100644 --- a/ModuleProject/config/app_module_config.gradle +++ b/ModuleProject/config/app_module_config.gradle @@ -9,12 +9,10 @@ ext.build_modele_app_id = "com.module.hikcreate" //登录模块 ext.build_module_login = build_module_login -ext.build_modele_login_app_id = "com.app.login" ext.build_modele_login_resourcePrefix = "lg_" //通行证模块 ext.build_module_passport = build_module_passport -ext.build_modele_passport_app_id = "com.app.passport" ext.build_modele_passport_resourcePrefix = "passport_" //百度相关lib_module diff --git a/ModuleProject/config/config_demo b/ModuleProject/config/config_demo new file mode 100644 index 0000000..e808ef0 --- /dev/null +++ b/ModuleProject/config/config_demo @@ -0,0 +1,58 @@ +if (build_module == build_module_login) { //替换成对应的module代号值 + apply plugin: 'com.android.application' +} else { + apply plugin: 'com.android.library' +} +android { + defaultConfig { + if (build_module == build_module_login) {//替换成对应的module代号值 + applicationId applicationId +"."+ project.getName() + } + minSdkVersion build_config.min_sdk + targetSdkVersion build_config.target_sdk + versionCode build_config.version_code + versionName build_config.version_name + resourcePrefix build_modele_login_resourcePrefix//替换成对应的module限制字符串 + multiDexEnabled true + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + compileSdkVersion build_config.compile_sdk + + dexOptions { + javaMaxHeapSize "4g" + preDexLibraries = false + jumboMode = true + } + + dataBinding { + enabled = true + } + + lintOptions { + abortOnError false + } + + compileOptions { + encoding = 'utf-8' + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + sourceSets { + main { + if (rootProject.build_module == build_module_login) {//替换成对应的module代号值 + manifest.srcFile 'src/main/module/AndroidManifest.xml' + } else { + manifest.srcFile 'src/main/AndroidManifest.xml' + java { + exclude 'com/duiafudao/app_login/application/**' + } + } + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + +} diff --git a/ModuleProject/lib_app_common/build.gradle b/ModuleProject/lib_app_common/build.gradle index d3ee4dc..e439a8c 100644 --- a/ModuleProject/lib_app_common/build.gradle +++ b/ModuleProject/lib_app_common/build.gradle @@ -8,6 +8,13 @@ android { versionCode build_config.version_code versionName build_config.version_name testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + javaCompileOptions { + annotationProcessorOptions { + arguments = [AROUTER_MODULE_NAME : project.getName(), AROUTER_GENERATE_DOC: "enable", //For ARouter + "room.schemaLocation": "$projectDir/schemas".toString()] + //指定room.schemaLocation生成的文件路径 + } + } } buildTypes { release { @@ -22,6 +29,11 @@ android { targetCompatibility JavaVersion.VERSION_1_8 } + + + dexOptions { + preDexLibraries = false + } dataBinding { enabled = true } @@ -30,14 +42,6 @@ android { dependencies { api fileTree(dir: 'libs', include: ['*.jar']) -// api project(':lib_baidu_audiodect') -// api project(':lib_baidu_facedect') -// api project(':lib_baidu_textdect') -// api project(':lib_common_ui') -// api project(':lib_data_drive') -// api project(':lib_network') - - // App's support dependencies api ([ deps.appcompat, @@ -65,5 +69,8 @@ dependencies { annotationProcessor deps.glide_compiler api deps.jsbridge api deps.otto - + api deps.gson + api deps.eventbus + api deps.aRouterApi,{ exclude group: 'com.android.support:appcompat-v7:25.2.0' } + annotationProcessor deps.aRouterCompiler } diff --git a/ModuleProject/lib_baidu_audiodect/build.gradle b/ModuleProject/lib_baidu_audiodect/build.gradle index 22a1118..0b1d060 100644 --- a/ModuleProject/lib_baidu_audiodect/build.gradle +++ b/ModuleProject/lib_baidu_audiodect/build.gradle @@ -23,13 +23,18 @@ android { targetCompatibility JavaVersion.VERSION_1_8 } + + dexOptions { + preDexLibraries = false + } + dataBinding { enabled = true } } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation deps.appcompat - implementation deps.rxandroid2 + compileOnly fileTree(dir: 'libs', include: ['*.jar']) + compileOnly deps.appcompat + compileOnly deps.rxandroid2 } diff --git a/ModuleProject/lib_baidu_facedect/build.gradle b/ModuleProject/lib_baidu_facedect/build.gradle index 4d09df0..0137d6d 100644 --- a/ModuleProject/lib_baidu_facedect/build.gradle +++ b/ModuleProject/lib_baidu_facedect/build.gradle @@ -26,6 +26,9 @@ android { enabled = true } + dexOptions { + preDexLibraries = false + } repositories { flatDir { dirs 'libs', 'aars' @@ -35,7 +38,7 @@ android { } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation deps.support_v4 - implementation deps.constraint_layout + compileOnly fileTree(dir: 'libs', include: ['*.jar']) + compileOnly deps.support_v4 + compileOnly deps.constraint_layout } diff --git a/ModuleProject/lib_baidu_textdect/build.gradle b/ModuleProject/lib_baidu_textdect/build.gradle index 0400d44..2460610 100644 --- a/ModuleProject/lib_baidu_textdect/build.gradle +++ b/ModuleProject/lib_baidu_textdect/build.gradle @@ -23,6 +23,9 @@ android { targetCompatibility JavaVersion.VERSION_1_8 } + dexOptions { + preDexLibraries = false + } dataBinding { enabled = true } diff --git a/ModuleProject/lib_common_ui/build.gradle b/ModuleProject/lib_common_ui/build.gradle index 1b775e2..6ed6a44 100644 --- a/ModuleProject/lib_common_ui/build.gradle +++ b/ModuleProject/lib_common_ui/build.gradle @@ -9,8 +9,12 @@ android { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" compileSdkVersion build_config.compile_sdk } + + dexOptions { + preDexLibraries = false + } } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) + compileOnly fileTree(dir: 'libs', include: ['*.jar']) } diff --git a/ModuleProject/lib_data_drive/build.gradle b/ModuleProject/lib_data_drive/build.gradle index 25abc56..fb72602 100644 --- a/ModuleProject/lib_data_drive/build.gradle +++ b/ModuleProject/lib_data_drive/build.gradle @@ -6,8 +6,8 @@ android { minSdkVersion build_config.min_sdk targetSdkVersion build_config.target_sdk resourcePrefix build_modele_baidu_resourcePrefix - versionCode 1 - versionName "1.0" + versionCode build_config.version_code + versionName build_config.version_name } buildTypes { @@ -22,9 +22,14 @@ android { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } + + dexOptions { + preDexLibraries = false + } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - deps.eventbus + implementation deps.eventbus + implementation deps.gson } diff --git a/ModuleProject/lib_data_drive/src/main/java/com/data/bean/GeneralMessageBean.java b/ModuleProject/lib_data_drive/src/main/java/com/data/bean/GeneralMessageBean.java deleted file mode 100644 index 8d4f348..0000000 --- a/ModuleProject/lib_data_drive/src/main/java/com/data/bean/GeneralMessageBean.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.data.bean; - -/** - * 事件驱动消息流类 - * - * @author wangtao55 - * @date 2019/9/19 - * @mail wangtao55@hikcreate.com - */ -public class GeneralMessageBean { - private String dataAction;//消息来自于哪个事件 - private String moduleName;//消息moduleName - private String dataClassName;//用于通过反射获取类的字符串 - private String messageJsonData;//message的json数据 - - public String getDataAction() { - return dataAction; - } - - public void setDataAction(String dataAction) { - this.dataAction = dataAction; - } - - public String getModuleName() { - return moduleName; - } - - public void setModuleName(String moduleName) { - this.moduleName = moduleName; - } - - public String getDataClassName() { - return dataClassName; - } - - public void setDataClassName(String dataClassName) { - this.dataClassName = dataClassName; - } - - public String getMessageJsonData() { - return messageJsonData; - } - - public void setMessageJsonData(String messageJsonData) { - this.messageJsonData = messageJsonData; - } -} diff --git a/ModuleProject/lib_data_drive/src/main/java/com/data/driver/MessageWrap.java b/ModuleProject/lib_data_drive/src/main/java/com/data/driver/MessageWrap.java deleted file mode 100644 index 6b9bef2..0000000 --- a/ModuleProject/lib_data_drive/src/main/java/com/data/driver/MessageWrap.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.data.driver; - -import com.data.bean.GeneralMessageBean; - -/** - * author : taowang - * date :2019/9/19 - * description:消息控制中枢 - **/ -public class MessageWrap { - - public static void sendMessage(GeneralMessageBean mGeneralMessageBean){ - -// EventBus.getDefault().post(mGeneralMessageBean); - - } - -} diff --git a/ModuleProject/lib_data_drive/src/main/java/com/data/util/ObjectUtil.java b/ModuleProject/lib_data_drive/src/main/java/com/data/util/ObjectUtil.java deleted file mode 100644 index 117f512..0000000 --- a/ModuleProject/lib_data_drive/src/main/java/com/data/util/ObjectUtil.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.data.util; - -import java.lang.reflect.Method; - -/** - * author : taowang - * date :2019/9/19 - * description:消息实体操作类 - **/ -public class ObjectUtil { - - /** - * @param className : 全路径的类名 - * @param dataContent - * @return - */ - public static Object getObjectBean(String className, String dataContent) { - - Object messageBeanObject = null; - - try { - - Class messageClass = Class.forName(className); - messageBeanObject = messageClass.newInstance(); - - } catch (Exception e) { - e.printStackTrace(); - } - - return messageBeanObject; - } - - - - private static Object invokeMethod(Object object,String methodName){ - - try { - - Method method = object.getClass().getMethod(methodName); - return method.invoke(object); - - - } catch (Exception e) { - - e.printStackTrace(); - - } - - return null; - } - - - - - private static Object getInfoByMethod(String className, String dataContent,String methodName){ - return invokeMethod(getObjectBean(className,dataContent),methodName); - } - - - - - public static <T> T createInstance(Class<T> clz) { - - try { - - return clz.newInstance(); - - } catch (InstantiationException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - - return null; - } - - - - public static <T> T createInstance(Class<T> checkType,String className){ - - try { - - Class<T> clz = (Class<T>)Class.forName(className); - Object obj = clz.newInstance(); - if (!checkType.isInstance(obj)) { - throw new Exception("类型不匹配"); - } - return (T)obj; - - } catch (Exception e) { - e.printStackTrace(); - } - - return null; - } - -} diff --git a/ModuleProject/lib_data_drive/src/main/java/com/message/bean/GeneralMessageBean.java b/ModuleProject/lib_data_drive/src/main/java/com/message/bean/GeneralMessageBean.java new file mode 100644 index 0000000..d08fe72 --- /dev/null +++ b/ModuleProject/lib_data_drive/src/main/java/com/message/bean/GeneralMessageBean.java @@ -0,0 +1,55 @@ +package com.message.bean; + +/** + * 事件驱动消息流类 + * + * @author wangtao55 + * @date 2019/9/19 + * @mail wangtao55@hikcreate.com + */ +public class GeneralMessageBean { + private String dataAction;//消息来自于哪个事件 + private String moduleName;//消息moduleName + private String dataClassName;//用于通过反射获取类的字符串 + private String messageJsonData;//message的json数据 + private String extraJsonData;//额外的消息的json数据 + public String getDataAction() { + return dataAction; + } + + public void setDataAction(String dataAction) { + this.dataAction = dataAction; + } + + public String getModuleName() { + return moduleName; + } + + public void setModuleName(String moduleName) { + this.moduleName = moduleName; + } + + public String getDataClassName() { + return dataClassName; + } + + public void setDataClassName(String dataClassName) { + this.dataClassName = dataClassName; + } + + public String getMessageJsonData() { + return messageJsonData; + } + + public void setMessageJsonData(String messageJsonData) { + this.messageJsonData = messageJsonData; + } + + public String getExtraJsonData() { + return extraJsonData; + } + + public void setExtraJsonData(String extraJsonData) { + this.extraJsonData = extraJsonData; + } +} diff --git a/ModuleProject/lib_data_drive/src/main/java/com/message/driver/MessageWrap.java b/ModuleProject/lib_data_drive/src/main/java/com/message/driver/MessageWrap.java new file mode 100644 index 0000000..8ab88ac --- /dev/null +++ b/ModuleProject/lib_data_drive/src/main/java/com/message/driver/MessageWrap.java @@ -0,0 +1,77 @@ +package com.message.driver; + +import android.util.Log; +import com.message.bean.GeneralMessageBean; +import com.message.util.ObjectUtil; +import org.greenrobot.eventbus.EventBus; +import info.hook.com.lib_data_drive.BuildConfig; + +/** + * author : taowang + * date :2019/9/19 + * description:消息控制中枢 + **/ +public final class MessageWrap { + + private static volatile MessageWrap defaultInstance; + private EventBus messageEventBus; + private int messageCount; //消息数量 + private static final String MESSAGE_TAG = "HIK-MessageWrap"; + + public static MessageWrap getMessageWrapDefault() { + if (defaultInstance == null) { + synchronized (MessageWrap.class) { + if (defaultInstance == null) { + defaultInstance = new MessageWrap(); + } + } + } + return defaultInstance; + } + + private MessageWrap() { + messageEventBus = new EventBus(); + + } + + public void register(Object subscriber) { + messageEventBus.register(subscriber); + messageCount++; + } + + public int getMessageCount() { + return messageCount; + } + + public void unregister(Object subscriber) { + messageEventBus.unregister(subscriber); + messageCount--; + } + + public void sendMessage(GeneralMessageBean mGeneralMessageBean) { + //可以添加一些业务处理的代码,控制消息的发送 + messageEventBus.post(mGeneralMessageBean); + showInfo(mGeneralMessageBean); + } + + public void sendMessageSticky(GeneralMessageBean mGeneralMessageBean) { + //可以添加一些业务处理的代码,控制消息的发送 + messageEventBus.postSticky(mGeneralMessageBean); + showInfo(mGeneralMessageBean); + } + + public String getMessageInfo(GeneralMessageBean mGeneralMessageBean, String name) { + return ObjectUtil.readAttributeValueByName(mGeneralMessageBean, name); + } + + private void showInfo(GeneralMessageBean mGeneralMessageBean) { + if (BuildConfig.DEBUG) { + //打印消息信息 + Log.v(MESSAGE_TAG, "moduleName-----" + mGeneralMessageBean.getModuleName()); + Log.v(MESSAGE_TAG, "dataAction-----" + mGeneralMessageBean.getDataAction()); + Log.v(MESSAGE_TAG, "dataClassName-----" + mGeneralMessageBean.getDataClassName()); + Log.v(MESSAGE_TAG, "messageJsonData-----" + mGeneralMessageBean.getMessageJsonData()); + } + } + +} diff --git a/ModuleProject/lib_data_drive/src/main/java/com/message/util/ObjectUtil.java b/ModuleProject/lib_data_drive/src/main/java/com/message/util/ObjectUtil.java new file mode 100644 index 0000000..8688f4d --- /dev/null +++ b/ModuleProject/lib_data_drive/src/main/java/com/message/util/ObjectUtil.java @@ -0,0 +1,124 @@ +package com.message.util; + +import com.message.bean.GeneralMessageBean; +import com.google.gson.Gson; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +/** + * author : taowang + * date :2019/9/19 + * description:消息实体操作类 + **/ +public class ObjectUtil { + + /** + * @param className : 全路径的类名 + * @param dataContent + * @return + */ + public static Object getObjectBean(String className, String dataContent) { + Object messageBeanObject = null; + try { + Class messageClass = Class.forName(className); + messageBeanObject = messageClass.newInstance(); + } catch (Exception e) { + e.printStackTrace(); + } + return messageBeanObject; + } + + private static Object invokeMethod(Object object,String methodName){ + try { + Method method = object.getClass().getMethod(methodName); + return method.invoke(object); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + private static Object getInfoByMethod(String className, String dataContent,String methodName){ + return invokeMethod(getObjectBean(className,dataContent),methodName); + } + + + public static <T> T createInstance(Class<T> clz) { + try { + return clz.newInstance(); + } catch (InstantiationException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + return null; + } + + public static <T> T createInstance(Class<T> checkType,String className){ + + try { + Class<T> clz = (Class<T>)Class.forName(className); + Object obj = clz.newInstance(); + if (!checkType.isInstance(obj)) { + throw new Exception("类型不匹配"); + } + return (T)obj; + + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + public static void readAttributeValue(Object obj){ + String nameValues =""; + Class cls = obj.getClass(); + Field[] fields = cls.getDeclaredFields(); + for (int i=0;i<fields.length;i++){ + try { + Field field = fields[i]; + field.setAccessible(true); + Object value = field.get(obj); + nameValues += field.getName()+":"+value+","; + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + int lastIndex = nameValues.lastIndexOf(","); + String result= nameValues.substring(0,lastIndex); + System.out.println(result); + } + + public static String readAttributeValueByName(Object obj,String name){ + Class cls = obj.getClass(); + Field[] fields = cls.getDeclaredFields(); + for (Field field : fields) { + try { + field.setAccessible(true); + if (name.equals(field.getName())) { + return (String) field.get(obj); + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + return null; + } + + public static String readAttributeValueByMethod(GeneralMessageBean mGeneralMessageBean, String name){ + Object message = getObjectBean(mGeneralMessageBean.getDataClassName(),mGeneralMessageBean.getMessageJsonData()); + return (String) invokeMethod(message,name); + } + + public static String readAttributeValueByName(GeneralMessageBean mGeneralMessageBean, String name) { + try { + Class messageClass = Class.forName(mGeneralMessageBean.getDataClassName()); + Gson gson = new Gson(); + Object jsonObject = gson.fromJson(mGeneralMessageBean.getExtraJsonData(), messageClass); + return readAttributeValueByName(jsonObject, name); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/ModuleProject/lib_module_common/.gitignore b/ModuleProject/lib_module_common/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/ModuleProject/lib_module_common/.gitignore @@ -0,0 +1 @@ +/build diff --git a/ModuleProject/lib_module_common/build.gradle b/ModuleProject/lib_module_common/build.gradle new file mode 100644 index 0000000..50b8a0b --- /dev/null +++ b/ModuleProject/lib_module_common/build.gradle @@ -0,0 +1,37 @@ +apply plugin: 'com.android.library' +android { + defaultConfig { + minSdkVersion build_config.min_sdk + targetSdkVersion build_config.target_sdk + versionCode build_config.version_code + versionName build_config.version_name + multiDexEnabled true + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + } + compileSdkVersion build_config.compile_sdk + + dexOptions { + javaMaxHeapSize "4g" + preDexLibraries = false + jumboMode = true + } + + dataBinding { + enabled = true + } + + lintOptions { + abortOnError false + } + + compileOptions { + encoding = 'utf-8' + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation deps.multidex +} diff --git a/ModuleProject/lib_module_common/proguard-rules.pro b/ModuleProject/lib_module_common/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/ModuleProject/lib_module_common/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/ModuleProject/lib_module_common/src/androidTest/java/info/hook/com/lib_module_common/ExampleInstrumentedTest.java b/ModuleProject/lib_module_common/src/androidTest/java/info/hook/com/lib_module_common/ExampleInstrumentedTest.java new file mode 100644 index 0000000..6fe9fda --- /dev/null +++ b/ModuleProject/lib_module_common/src/androidTest/java/info/hook/com/lib_module_common/ExampleInstrumentedTest.java @@ -0,0 +1,27 @@ +package info.hook.com.lib_module_common; + +import android.content.Context; + +import androidx.test.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("info.hook.com.lib_module_common.test", appContext.getPackageName()); + } +} diff --git a/ModuleProject/lib_module_common/src/main/AndroidManifest.xml b/ModuleProject/lib_module_common/src/main/AndroidManifest.xml new file mode 100644 index 0000000..6d94bad --- /dev/null +++ b/ModuleProject/lib_module_common/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="info.hook.com.lib_module_common" /> diff --git a/ModuleProject/lib_module_common/src/main/java/com/hikcreate/base/AppContext.java b/ModuleProject/lib_module_common/src/main/java/com/hikcreate/base/AppContext.java new file mode 100644 index 0000000..0a085df --- /dev/null +++ b/ModuleProject/lib_module_common/src/main/java/com/hikcreate/base/AppContext.java @@ -0,0 +1,192 @@ +package com.hikcreate.base; +import android.app.Activity; +import android.app.Application; +import android.content.Context; +import android.content.res.Configuration; +import android.os.Bundle; +import android.support.multidex.MultiDex; +import java.util.ArrayList; +import java.util.List; + +/** + * app初始化类 + * + * @author wangtao55 + * @date 2019/9/21 + * @mail wangtao55@hikcreate.com + */ +@SuppressWarnings("ALL") +public class AppContext { + + private Application mContext; + private List<String> logicList = new ArrayList<>(); + private List<BaseAppLogic> logicClassList = new ArrayList<>(); + + private List<String> logicActivityLifeList = new ArrayList<>(); + private List<BaseActivityLifeLogic> logicActivityLifeClassList = new ArrayList<>(); + + private static AppContext mAppContext; + private AppContext() { + } + + public static AppContext getInstance() { + if (mAppContext == null) { + mAppContext = new AppContext(); + } + return mAppContext; + } + + public void registerAppLogic(String logicClass){ + logicList.add(logicClass); + } + + public void registerActivityLifeLogic(String logicClass){ + logicActivityLifeList.add(logicClass); + } + + public void logicOnCreate(Application application){ + + for(String logicClass : logicList){ + try { + Class appClass = Class.forName(logicClass); + BaseAppLogic appLogic = (BaseAppLogic) appClass.newInstance(); + logicClassList.add(appLogic); + appLogic.onCreate(); + }catch (Exception e){ + e.printStackTrace(); + } + } + for(String logicActivityClass : logicActivityLifeList){ + try { + Class appClass = Class.forName(logicActivityClass); + BaseActivityLifeLogic appLogic = (BaseActivityLifeLogic) appClass.newInstance(); + logicActivityLifeClassList.add(appLogic); + }catch (Exception e){ + e.printStackTrace(); + } + } + init(application); + } + + public void logicOnTerminate(){ + for(BaseAppLogic logicClass : logicClassList){ + try { + logicClass.onTerminate(); + }catch (Exception e){ + e.printStackTrace(); + } + } + } + + public void logicOnLowMemory(){ + for(BaseAppLogic logicClass : logicClassList){ + try { + logicClass.onLowMemory(); + }catch (Exception e){ + e.printStackTrace(); + } + } + } + + public void logicOnConfigurationChanged(Configuration newConfig){ + for(BaseAppLogic logicClass : logicClassList){ + try { + logicClass.onConfigurationChanged(newConfig); + }catch (Exception e){ + e.printStackTrace(); + } + } + } + + public void init(Application application) { + mContext = application; + initActivityLifeCycle(application); + MultiDex.install(application); + } + + public void initActivityLifeCycle(Application application){ + application.registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() { + @Override + public void onActivityCreated(Activity activity, Bundle savedInstanceState) { + for(BaseActivityLifeLogic logicClass : logicActivityLifeClassList){ + try { + logicClass.onActivityCreated(activity,savedInstanceState); + }catch (Exception e){ + e.printStackTrace(); + } + } + } + + @Override + public void onActivityStarted(Activity activity) { + for(BaseActivityLifeLogic logicClass : logicActivityLifeClassList){ + try { + logicClass.onActivityStarted(activity); + }catch (Exception e){ + e.printStackTrace(); + } + } + } + + @Override + public void onActivityResumed(Activity activity) { + for(BaseActivityLifeLogic logicClass : logicActivityLifeClassList){ + try { + logicClass.onActivityResumed(activity); + }catch (Exception e){ + e.printStackTrace(); + } + } + } + + @Override + public void onActivityPaused(Activity activity) { + for(BaseActivityLifeLogic logicClass : logicActivityLifeClassList){ + try { + logicClass.onActivityPaused(activity); + }catch (Exception e){ + e.printStackTrace(); + } + } + } + + @Override + public void onActivityStopped(Activity activity) { + for(BaseActivityLifeLogic logicClass : logicActivityLifeClassList){ + try { + logicClass.onActivityStopped(activity); + }catch (Exception e){ + e.printStackTrace(); + } + } + } + + @Override + public void onActivitySaveInstanceState(Activity activity, Bundle outState) { + for(BaseActivityLifeLogic logicClass : logicActivityLifeClassList){ + try { + logicClass.onActivitySaveInstanceState(activity,outState); + }catch (Exception e){ + e.printStackTrace(); + } + } + } + + @Override + public void onActivityDestroyed(Activity activity) { + for(BaseActivityLifeLogic logicClass : logicActivityLifeClassList){ + try { + logicClass.onActivityDestroyed(activity); + }catch (Exception e){ + e.printStackTrace(); + } + } + } + }); + + } + + public Context getApplication() { + return mContext; + } +} diff --git a/ModuleProject/lib_module_common/src/main/java/com/hikcreate/base/BaseActivityLifeLogic.java b/ModuleProject/lib_module_common/src/main/java/com/hikcreate/base/BaseActivityLifeLogic.java new file mode 100644 index 0000000..797a681 --- /dev/null +++ b/ModuleProject/lib_module_common/src/main/java/com/hikcreate/base/BaseActivityLifeLogic.java @@ -0,0 +1,26 @@ +package com.hikcreate.base; + +import android.app.Activity; +import android.app.Application; +import android.content.res.Configuration; +import android.os.Bundle; + +/** + * 基础activity配置类 + * + * @author wangtao55 + * @date 2019/9/23 + * @mail wangtao55@hikcreate.com + */ +public abstract class BaseActivityLifeLogic { + + abstract public void onActivityCreated(Activity activity, Bundle savedInstanceState); + abstract public void onActivityStarted(Activity activity); + abstract public void onActivityResumed(Activity activity); + abstract public void onActivityPaused(Activity activity); + abstract public void onActivityStopped(Activity activity); + abstract public void onActivityDestroyed(Activity activity); + abstract public void onActivitySaveInstanceState(Activity activity, Bundle savedInstanceState); + + +} diff --git a/ModuleProject/lib_module_common/src/main/java/com/hikcreate/base/BaseAppLogic.java b/ModuleProject/lib_module_common/src/main/java/com/hikcreate/base/BaseAppLogic.java new file mode 100644 index 0000000..1491126 --- /dev/null +++ b/ModuleProject/lib_module_common/src/main/java/com/hikcreate/base/BaseAppLogic.java @@ -0,0 +1,22 @@ +package com.hikcreate.base; + +import android.app.Application; +import android.content.res.Configuration; + +/** + * 基础app配置类 + * + * @author wangtao55 + * @date 2019/9/23 + * @mail wangtao55@hikcreate.com + */ +public abstract class BaseAppLogic { + + private Application mApplication; + abstract public void onCreate(); + abstract public void onTerminate(); + abstract public void onLowMemory(); + abstract public void onConfigurationChanged(Configuration newConfig); + + +} diff --git a/ModuleProject/lib_module_common/src/main/res/values/strings.xml b/ModuleProject/lib_module_common/src/main/res/values/strings.xml new file mode 100644 index 0000000..7309039 --- /dev/null +++ b/ModuleProject/lib_module_common/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ +<resources> + <string name="app_name">lib_module_common</string> +</resources> diff --git a/ModuleProject/lib_module_common/src/test/java/info/hook/com/lib_module_common/ExampleUnitTest.java b/ModuleProject/lib_module_common/src/test/java/info/hook/com/lib_module_common/ExampleUnitTest.java new file mode 100644 index 0000000..be51a3a --- /dev/null +++ b/ModuleProject/lib_module_common/src/test/java/info/hook/com/lib_module_common/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package info.hook.com.lib_module_common; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/ModuleProject/lib_network/build.gradle b/ModuleProject/lib_network/build.gradle index 1b775e2..6ed6a44 100644 --- a/ModuleProject/lib_network/build.gradle +++ b/ModuleProject/lib_network/build.gradle @@ -9,8 +9,12 @@ android { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" compileSdkVersion build_config.compile_sdk } + + dexOptions { + preDexLibraries = false + } } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) + compileOnly fileTree(dir: 'libs', include: ['*.jar']) } diff --git a/ModuleProject/settings.gradle b/ModuleProject/settings.gradle index 0949510..950926c 100644 --- a/ModuleProject/settings.gradle +++ b/ModuleProject/settings.gradle @@ -1 +1 @@ -include ':app', ':lib_common_ui', ':lib_data_drive', ':app_common',":lib_network", ':lib_app_common', ':app_passport', ':app_login', ':lib_baidu_audiodect',':buildsrc',":lib_baidu_facedect",":lib_baidu_textdect" +include ':app', ':lib_common_ui', ':lib_data_drive', ':app_common', ':lib_module_common',":lib_network", ':lib_app_common', ':app_passport', ':app_login', ':lib_baidu_audiodect',':buildsrc',":lib_baidu_facedect",":lib_baidu_textdect" -- libgit2 0.26.0