Commit cc9ebc46 by 王涛55

feat:组件生命周期控制

parent bc933ca1
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
<option value="$PROJECT_DIR$/lib_baidu_textdect" /> <option value="$PROJECT_DIR$/lib_baidu_textdect" />
<option value="$PROJECT_DIR$/lib_common_ui" /> <option value="$PROJECT_DIR$/lib_common_ui" />
<option value="$PROJECT_DIR$/lib_data_drive" /> <option value="$PROJECT_DIR$/lib_data_drive" />
<option value="$PROJECT_DIR$/lib_module_common" />
<option value="$PROJECT_DIR$/lib_network" /> <option value="$PROJECT_DIR$/lib_network" />
</set> </set>
</option> </option>
......
...@@ -14,7 +14,15 @@ android { ...@@ -14,7 +14,15 @@ android {
targetSdkVersion build_config.target_sdk targetSdkVersion build_config.target_sdk
versionCode build_config.version_code versionCode build_config.version_code
versionName build_config.version_name versionName build_config.version_name
multiDexEnabled true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 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 { sourceSets {
...@@ -88,9 +96,13 @@ android { ...@@ -88,9 +96,13 @@ android {
lintOptions { lintOptions {
abortOnError false abortOnError false
} }
}
dexOptions {
preDexLibraries = false
}
}
dependencies { dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(dir: 'libs', include: ['*.jar'])
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
<application <application
android:roundIcon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher"
android:allowBackup="false" android:allowBackup="false"
android:name="com.hikcreate.app.CommonApplication"
android:theme="@style/Theme.AppCompat.Light.NoActionBar" android:theme="@style/Theme.AppCompat.Light.NoActionBar"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
......
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) {
}
}
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--------------------->");
}
}
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();
}
}
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;
}
}
...@@ -5,8 +5,12 @@ import android.os.Bundle; ...@@ -5,8 +5,12 @@ import android.os.Bundle;
import android.support.v4.app.FragmentTransaction; import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity; 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.login.testLoginActivity;
import com.hikcreate.passport.TestFragment; import com.hikcreate.passport.TestFragment;
import com.hikcreate.temp.TestBean;
import com.module.hikcreate.R; import com.module.hikcreate.R;
...@@ -28,8 +32,7 @@ public class testActivity extends AppCompatActivity { ...@@ -28,8 +32,7 @@ public class testActivity extends AppCompatActivity {
startActivity(mIntent); startActivity(mIntent);
}); });
findViewById(R.id.mBtnPassport).setOnClickListener(v -> { findViewById(R.id.mBtnPassport).setOnClickListener(v -> {
Intent mIntent = new Intent(testActivity.this,testLoginActivity.class);
startActivity(mIntent);
}); });
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.test_passport,new TestFragment()); transaction.add(R.id.test_passport,new TestFragment());
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
<Button <Button
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="给通行证模块发送信息" android:text="发送Message信息"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:id="@+id/mBtnPassport" android:id="@+id/mBtnPassport"
/> />
......
...@@ -11,6 +11,13 @@ android { ...@@ -11,6 +11,13 @@ android {
versionCode build_config.version_code versionCode build_config.version_code
versionName build_config.version_name versionName build_config.version_name
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 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 { buildTypes {
...@@ -20,9 +27,16 @@ android { ...@@ -20,9 +27,16 @@ android {
} }
} }
dexOptions {
preDexLibraries = false
}
} }
dependencies { dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(dir: 'libs', include: ['*.jar'])
api project(':lib_app_common') api project(':lib_app_common')
api project(':lib_common_ui')
api project(':lib_data_drive')
api project(':lib_network')
api project(':lib_module_common')
} }
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);
}
}
...@@ -6,14 +6,22 @@ if (build_module == build_module_login) { ...@@ -6,14 +6,22 @@ if (build_module == build_module_login) {
android { android {
defaultConfig { defaultConfig {
if (build_module == build_module_login) { if (build_module == build_module_login) {
applicationId build_modele_login_app_id applicationId build_modele_app_id +"."+ project.getName()
} }
minSdkVersion build_config.min_sdk minSdkVersion build_config.min_sdk
targetSdkVersion build_config.target_sdk targetSdkVersion build_config.target_sdk
versionCode build_config.version_code versionCode build_config.version_code
versionName build_config.version_name versionName build_config.version_name
resourcePrefix build_modele_login_resourcePrefix resourcePrefix build_modele_login_resourcePrefix
multiDexEnabled true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 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 compileSdkVersion build_config.compile_sdk
...@@ -44,15 +52,18 @@ android { ...@@ -44,15 +52,18 @@ android {
} else { } else {
manifest.srcFile 'src/main/AndroidManifest.xml' manifest.srcFile 'src/main/AndroidManifest.xml'
java { java {
exclude 'com/duiafudao/app_login/application/**' exclude 'com/hikcreate/test/**'
} }
} }
} }
} }
dexOptions {
preDexLibraries = false
}
} }
dependencies { dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(dir: 'libs', include: ['*.jar'])
api project(':lib_app_common')
api project(':app_common') api project(':app_common')
} }
...@@ -19,4 +19,9 @@ public class testLoginActivity extends AppCompatActivity { ...@@ -19,4 +19,9 @@ public class testLoginActivity extends AppCompatActivity {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.lg_app_test); setContentView(R.layout.lg_app_test);
} }
@Override
protected void onDestroy() {
super.onDestroy();
}
} }
package com.hikcreate.app; package com.hikcreate.test;
import android.app.Application; import android.app.Application;
import android.content.Context;
import android.support.multidex.MultiDex; import com.hikcreate.base.AppContext;
/** /**
* app初始化类
* *
* @author wangtao55 * @author wangtao55
* @date 2019/9/21 * @date 2019/9/23
* @mail wangtao55@hikcreate.com * @mail wangtao55@hikcreate.com
*/ */
public class AppBaseContext extends Application { public class CommonApplication extends Application {
@Override @Override
protected void attachBaseContext(Context base) { public void onCreate() {
super.attachBaseContext(base); super.onCreate();
AppContext.init(base); AppContext.getInstance().registerAppLogic("com.login.LoginAppLogic");
AppContext.getInstance().registerActivityLifeLogic("com.login.LoginActivityLifeCycle");
AppContext.getInstance().logicOnCreate(this);
} }
@Override @Override
public void onCreate() { public void onTerminate() {
super.onCreate(); super.onTerminate();
AppContext.getInstance().logicOnTerminate();
}
@Override
public void onLowMemory() {
super.onLowMemory();
AppContext.getInstance().logicOnLowMemory();
} }
} }
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) {
}
}
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--------------------->");
}
}
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
<application <application
android:roundIcon="@mipmap/lg_ic_launcher" android:roundIcon="@mipmap/lg_ic_launcher"
android:allowBackup="false" android:allowBackup="false"
android:name="com.hikcreate.test.CommonApplication"
android:theme="@style/Theme.AppCompat.Light.NoActionBar" android:theme="@style/Theme.AppCompat.Light.NoActionBar"
android:icon="@mipmap/lg_ic_launcher" android:icon="@mipmap/lg_ic_launcher"
android:label="@string/lg_app_name_test" android:label="@string/lg_app_name_test"
......
...@@ -7,14 +7,22 @@ if (build_module == build_module_passport) { ...@@ -7,14 +7,22 @@ if (build_module == build_module_passport) {
android { android {
defaultConfig { defaultConfig {
if (build_module == build_module_passport) { if (build_module == build_module_passport) {
applicationId build_modele_login_app_id applicationId build_modele_app_id +"."+ project.getName()
} }
minSdkVersion build_config.min_sdk minSdkVersion build_config.min_sdk
targetSdkVersion build_config.target_sdk targetSdkVersion build_config.target_sdk
versionCode build_config.version_code versionCode build_config.version_code
versionName build_config.version_name versionName build_config.version_name
resourcePrefix build_modele_passport_resourcePrefix resourcePrefix build_modele_passport_resourcePrefix
multiDexEnabled true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 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 compileSdkVersion build_config.compile_sdk
...@@ -25,6 +33,9 @@ android { ...@@ -25,6 +33,9 @@ android {
} }
} }
dexOptions {
preDexLibraries = false
}
} }
dependencies { dependencies {
......
...@@ -5,8 +5,14 @@ import android.support.v4.app.Fragment; ...@@ -5,8 +5,14 @@ import android.support.v4.app.Fragment;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Toast;
import com.app.passport.R; 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 { ...@@ -21,6 +27,7 @@ public class TestFragment extends Fragment {
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
MessageWrap.getMessageWrapDefault().register(this);
} }
@Override @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...@@ -28,9 +35,20 @@ public class TestFragment extends Fragment { ...@@ -28,9 +35,20 @@ public class TestFragment extends Fragment {
return inflater.inflate(R.layout.passport_test_fragment,container,false); 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 @Override
public void onPause() { public void onPause() {
super.onPause(); super.onPause();
} }
@Override
public void onDestroyView() {
super.onDestroyView();
MessageWrap.getMessageWrapDefault().unregister(this);
}
} }
...@@ -63,11 +63,18 @@ versions.bugly_native_crashreport ='latest.release' ...@@ -63,11 +63,18 @@ versions.bugly_native_crashreport ='latest.release'
versions.meituanWalle = '1.1.3' versions.meituanWalle = '1.1.3'
versions.eventbus = "3.1.1" versions.eventbus = "3.1.1"
versions.gson = "2.8.0" versions.gson = "2.8.0"
versions.arouter = "2.8.0"
versions.aRouterApi = '1.4.1'
versions.aRouterCompiler = '1.2.2'
ext.versions = versions ext.versions = versions
//deps依赖库 //deps依赖库
ext.deps = [:] ext.deps = [:]
def deps = [:] def deps = [:]
deps.aRouterApi = "com.alibaba:arouter-api:$versions.aRouterApi"
deps.aRouterCompiler = "com.alibaba:arouter-compiler:$versions.aRouterCompiler"
// App's support dependencies // App's support dependencies
deps.appcompat = "com.android.support:appcompat-v7:$versions.supportLibraryVersion" deps.appcompat = "com.android.support:appcompat-v7:$versions.supportLibraryVersion"
deps.multidex = "com.android.support:multidex:$versions.multidexVersion" deps.multidex = "com.android.support:multidex:$versions.multidexVersion"
......
...@@ -9,12 +9,10 @@ ext.build_modele_app_id = "com.module.hikcreate" ...@@ -9,12 +9,10 @@ ext.build_modele_app_id = "com.module.hikcreate"
//登录模块 //登录模块
ext.build_module_login = build_module_login ext.build_module_login = build_module_login
ext.build_modele_login_app_id = "com.app.login"
ext.build_modele_login_resourcePrefix = "lg_" ext.build_modele_login_resourcePrefix = "lg_"
//通行证模块 //通行证模块
ext.build_module_passport = build_module_passport ext.build_module_passport = build_module_passport
ext.build_modele_passport_app_id = "com.app.passport"
ext.build_modele_passport_resourcePrefix = "passport_" ext.build_modele_passport_resourcePrefix = "passport_"
//百度相关lib_module //百度相关lib_module
......
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'])
}
...@@ -8,6 +8,13 @@ android { ...@@ -8,6 +8,13 @@ android {
versionCode build_config.version_code versionCode build_config.version_code
versionName build_config.version_name versionName build_config.version_name
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 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 { buildTypes {
release { release {
...@@ -22,6 +29,11 @@ android { ...@@ -22,6 +29,11 @@ android {
targetCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8
} }
dexOptions {
preDexLibraries = false
}
dataBinding { dataBinding {
enabled = true enabled = true
} }
...@@ -30,14 +42,6 @@ android { ...@@ -30,14 +42,6 @@ android {
dependencies { dependencies {
api fileTree(dir: 'libs', include: ['*.jar']) 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 // App's support dependencies
api ([ api ([
deps.appcompat, deps.appcompat,
...@@ -65,5 +69,8 @@ dependencies { ...@@ -65,5 +69,8 @@ dependencies {
annotationProcessor deps.glide_compiler annotationProcessor deps.glide_compiler
api deps.jsbridge api deps.jsbridge
api deps.otto 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
} }
...@@ -23,13 +23,18 @@ android { ...@@ -23,13 +23,18 @@ android {
targetCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8
} }
dexOptions {
preDexLibraries = false
}
dataBinding { dataBinding {
enabled = true enabled = true
} }
} }
dependencies { dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar']) compileOnly fileTree(dir: 'libs', include: ['*.jar'])
implementation deps.appcompat compileOnly deps.appcompat
implementation deps.rxandroid2 compileOnly deps.rxandroid2
} }
...@@ -26,6 +26,9 @@ android { ...@@ -26,6 +26,9 @@ android {
enabled = true enabled = true
} }
dexOptions {
preDexLibraries = false
}
repositories { repositories {
flatDir { flatDir {
dirs 'libs', 'aars' dirs 'libs', 'aars'
...@@ -35,7 +38,7 @@ android { ...@@ -35,7 +38,7 @@ android {
} }
dependencies { dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar']) compileOnly fileTree(dir: 'libs', include: ['*.jar'])
implementation deps.support_v4 compileOnly deps.support_v4
implementation deps.constraint_layout compileOnly deps.constraint_layout
} }
...@@ -23,6 +23,9 @@ android { ...@@ -23,6 +23,9 @@ android {
targetCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8
} }
dexOptions {
preDexLibraries = false
}
dataBinding { dataBinding {
enabled = true enabled = true
} }
......
...@@ -9,8 +9,12 @@ android { ...@@ -9,8 +9,12 @@ android {
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
compileSdkVersion build_config.compile_sdk compileSdkVersion build_config.compile_sdk
} }
dexOptions {
preDexLibraries = false
}
} }
dependencies { dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar']) compileOnly fileTree(dir: 'libs', include: ['*.jar'])
} }
...@@ -6,8 +6,8 @@ android { ...@@ -6,8 +6,8 @@ android {
minSdkVersion build_config.min_sdk minSdkVersion build_config.min_sdk
targetSdkVersion build_config.target_sdk targetSdkVersion build_config.target_sdk
resourcePrefix build_modele_baidu_resourcePrefix resourcePrefix build_modele_baidu_resourcePrefix
versionCode 1 versionCode build_config.version_code
versionName "1.0" versionName build_config.version_name
} }
buildTypes { buildTypes {
...@@ -22,9 +22,14 @@ android { ...@@ -22,9 +22,14 @@ android {
sourceCompatibility JavaVersion.VERSION_1_8 sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8
} }
dexOptions {
preDexLibraries = false
}
} }
dependencies { dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(dir: 'libs', include: ['*.jar'])
deps.eventbus implementation deps.eventbus
implementation deps.gson
} }
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);
}
}
package com.data.bean; package com.message.bean;
/** /**
* 事件驱动消息流类 * 事件驱动消息流类
...@@ -12,7 +12,7 @@ public class GeneralMessageBean { ...@@ -12,7 +12,7 @@ public class GeneralMessageBean {
private String moduleName;//消息moduleName private String moduleName;//消息moduleName
private String dataClassName;//用于通过反射获取类的字符串 private String dataClassName;//用于通过反射获取类的字符串
private String messageJsonData;//message的json数据 private String messageJsonData;//message的json数据
private String extraJsonData;//额外的消息的json数据
public String getDataAction() { public String getDataAction() {
return dataAction; return dataAction;
} }
...@@ -44,4 +44,12 @@ public class GeneralMessageBean { ...@@ -44,4 +44,12 @@ public class GeneralMessageBean {
public void setMessageJsonData(String messageJsonData) { public void setMessageJsonData(String messageJsonData) {
this.messageJsonData = messageJsonData; this.messageJsonData = messageJsonData;
} }
public String getExtraJsonData() {
return extraJsonData;
}
public void setExtraJsonData(String extraJsonData) {
this.extraJsonData = extraJsonData;
}
} }
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());
}
}
}
package com.data.util; package com.message.util;
import com.message.bean.GeneralMessageBean;
import com.google.gson.Gson;
import java.lang.reflect.Field;
import java.lang.reflect.Method; import java.lang.reflect.Method;
/** /**
...@@ -15,71 +19,45 @@ public class ObjectUtil { ...@@ -15,71 +19,45 @@ public class ObjectUtil {
* @return * @return
*/ */
public static Object getObjectBean(String className, String dataContent) { public static Object getObjectBean(String className, String dataContent) {
Object messageBeanObject = null; Object messageBeanObject = null;
try { try {
Class messageClass = Class.forName(className); Class messageClass = Class.forName(className);
messageBeanObject = messageClass.newInstance(); messageBeanObject = messageClass.newInstance();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
return messageBeanObject; return messageBeanObject;
} }
private static Object invokeMethod(Object object,String methodName){ private static Object invokeMethod(Object object,String methodName){
try { try {
Method method = object.getClass().getMethod(methodName); Method method = object.getClass().getMethod(methodName);
return method.invoke(object); return method.invoke(object);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
return null; return null;
} }
private static Object getInfoByMethod(String className, String dataContent,String methodName){ private static Object getInfoByMethod(String className, String dataContent,String methodName){
return invokeMethod(getObjectBean(className,dataContent),methodName); return invokeMethod(getObjectBean(className,dataContent),methodName);
} }
public static <T> T createInstance(Class<T> clz) { public static <T> T createInstance(Class<T> clz) {
try { try {
return clz.newInstance(); return clz.newInstance();
} catch (InstantiationException e) { } catch (InstantiationException e) {
e.printStackTrace(); e.printStackTrace();
} catch (IllegalAccessException e) { } catch (IllegalAccessException e) {
e.printStackTrace(); e.printStackTrace();
} }
return null; return null;
} }
public static <T> T createInstance(Class<T> checkType,String className){ public static <T> T createInstance(Class<T> checkType,String className){
try { try {
Class<T> clz = (Class<T>)Class.forName(className); Class<T> clz = (Class<T>)Class.forName(className);
Object obj = clz.newInstance(); Object obj = clz.newInstance();
if (!checkType.isInstance(obj)) { if (!checkType.isInstance(obj)) {
...@@ -90,8 +68,57 @@ public class ObjectUtil { ...@@ -90,8 +68,57 @@ public class ObjectUtil {
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
return null; 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;
}
} }
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
}
# 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
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());
}
}
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="info.hook.com.lib_module_common" />
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;
}
}
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);
}
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);
}
<resources>
<string name="app_name">lib_module_common</string>
</resources>
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
...@@ -9,8 +9,12 @@ android { ...@@ -9,8 +9,12 @@ android {
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
compileSdkVersion build_config.compile_sdk compileSdkVersion build_config.compile_sdk
} }
dexOptions {
preDexLibraries = false
}
} }
dependencies { dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar']) compileOnly fileTree(dir: 'libs', include: ['*.jar'])
} }
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"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment