您当前的位置:首页 > 电脑百科 > 程序开发 > 移动端 > Android

组件化架构搭建——铺路Android架构师

时间:2022-07-05 11:43:54  来源:  作者:Android秃老师

组件化定义

组件化是建立在模块化思想上的一次演进,一个变种。组件化本来就是模块化的概念。核心是模块角色的可转化换性,在打包时,是library;调试时,是Application。

组件化的单位是组件,这里跟模块化的一个最大的区别就是组件之间是可以相互进行跳转的,其实现就是通过路由,这个在之后会手动来实现这个路由的功能。它是一个编译时的行为

组件化架构搭建——铺路Android架构师

 

组件化优点:

  • 可重用
  • 代码简洁
  • 易测试

为什么使用组件化

一直使用单工程操作,项目越来越大导致出现了不少的问题:

  1. 查找问题慢:定位问题,需要在多个代码混合的模块中寻找和跳转。
  2. 开发维护成本增加:避免代码的改动影响其它业务的功能,导致开发和维护成本不断增加。
  3. 编译时间长:项目工程越大,编译完整代码所花费的时间越长。
  4. 开发效率低:多人协作开发时,开发风格不一,又很难将业务完全分割,大家互相影响,导致开发效率低下。
  5. 代码复用性差:写过的代码很难抽离出来再次利用。

组件化项目整体结构

组件化架构搭建——铺路Android架构师

 

COMPONENTLIB2 LIBRARY项目结构

组件化架构搭建——铺路Android架构师

 

BUILD.GRADLE

apply plugin: 'com.Android.library'

android {
    compileSdkVersion 28



    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support:appcompat-v7:28.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

1234567891011121314151617181920212223242526272829303132333435

APPCONFIG

package com.example.componentlib2;

public class AppConfig {
    public static final String[] COMPONENTS = {
            "com.example.logincomponent.LoginApplication",
            "com.example.minecomponent.MineApplication"
    };
}

123456789

IAPPCOMPONENT

package com.example.componentlib2;

import android.app.Application;

public interface IAppComponent {
    void initalliza(Application app);
}

12345678
package com.example.componentlib2;

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;

public interface ILoginService {

    // 跳转 从主 app  跳转到 login app
    void launch(Context context, String targetClass);

    //获取数据主app从login app 获取返回数据并显示
    Fragment newUserInfoFragment(FragmentManager fragmentManager, int viewId, Bundle bundle);

}

1234567891011121314151617

IMINESERVICE

package com.example.componentlib2;

import android.content.Context;

public interface IMineService {
    void launch(Context context,int userId);
}

12345678

SERVICEFACTORY

package com.example.componentlib2;

public class ServiceFactory {
    private static final ServiceFactory instance = new ServiceFactory();

    public static ServiceFactory getInstance() {
        return instance;
    }

    private ServiceFactory() {

    }

    private ILoginService mLoginService;
    private IMineService mMineService;


    public ILoginService getLoginService() {
        return mLoginService;
    }

    public void setLoginService(ILoginService mLoginService) {
        this.mLoginService = mLoginService;
    }

    public IMineService getMineService() {
        return mMineService;
    }

    public void setMineService(IMineService mMineService) {
        this.mMineService = mMineService;
    }
}

12345678910111213141516171819202122232425262728293031323334

LOGINCOMPONENT 组件

组件化架构搭建——铺路Android架构师

 

LOGINACTIVITY

package com.example.logincomponent;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class LoginActivity extends AppCompatActivity {

    public static String EXTRA_TARGET_CLASS = "extra_target_class";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login_mAIn);
    }
}

123456789101112131415

LOGINAPPLICATION

package com.example.logincomponent;

import android.app.Application;

import com.example.componentlib2.IAppComponent;
import com.example.componentlib2.ServiceFactory;

public class LoginApplication extends Application implements IAppComponent {

    private static Application application;

    public static Application getApplication() {
        return application;
    }

    // 当 login 是 application 的时候 调用 initalliza 方法时,上下文指向的就是 LoginApplication
    @Override
    public void onCreate() {
        super.onCreate();
        initalliza(this);
    }

    //当 login是 lib 的时候 被主 App 调用被赋值
    @Override
    public void initalliza(Application app) {
        application = app;
        ServiceFactory.getInstance().setLoginService(new LoginService());
    }
}

123456789101112131415161718192021222324252627282930

LOGINSERVICE

package com.example.logincomponent;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;

import com.example.componentlib2.ILoginService;

public class LoginService implements ILoginService {

    @Override
    public void launch(Context context, String targetClass) {
        Intent intent = new Intent(context, LoginActivity.class);
        intent.putExtra(LoginActivity.EXTRA_TARGET_CLASS, targetClass);
        context.startActivity(intent);
    }

    @Override
    public Fragment newUserInfoFragment(FragmentManager fragmentManager, int viewId, Bundle bundle) {
        UserInfoFragment fragment = new UserInfoFragment();
        fragment.setArguments(bundle);
        fragmentManager.beginTransaction().add(viewId, fragment).commit();
        return fragment;
    }
}

12345678910111213141516171819202122232425262728

USERINFOFRAGMENT

package com.example.logincomponent;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class UserInfoFragment extends Fragment {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.userinfo_fragment, null);
    }
}

12345678910111213141516171819

MINECOMPONENT 组件

组件化架构搭建——铺路Android架构师

 

MINEACTIVITY

package com.example.minecomponent;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MineActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mineactivity_main);
    }
}

1234567891011121314

MINEAPPLICATION

package com.example.minecomponent;

import android.app.Application;

import com.example.componentlib2.IAppComponent;
import com.example.componentlib2.ServiceFactory;

public class MineApplication extends Application implements IAppComponent {

    private static Application application;

    public static Application getApplication() {
        return application;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        initalliza(this);
    }

    @Override
    public void initalliza(Application app) {
        application = app;
        ServiceFactory.getInstance().setMineService(new MineService());
    }
}

12345678910111213141516171819202122232425262728

MINESERVICE

package com.example.minecomponent;

import android.content.Context;
import android.content.Intent;

import com.example.componentlib2.IMineService;

public class MineService implements IMineService {
    @Override
    public void launch(Context context, int userId) {
        Intent intent = new Intent(context, MineActivity.class);
        intent.putExtra("ID", userId);
        context.startActivity(intent);
    }
}

文末

文章介绍了组件化,以及如何搭建好一个组件化。本文可能写的有点粗糙,有关组件化、热修复等进入架构师的框架搭建,有一套比较系统的Android架构核心技术学习进阶资料,需要的可以私信我发送“核心笔记”或“手册”即可前往获取全套资料!



Tags:Android架构师   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
组件化架构搭建——铺路Android架构师
组件化定义组件化是建立在模块化思想上的一次演进,一个变种。组件化本来就是模块化的概念。核心是模块角色的可转化换性,在打包时,是library;调试时,是application。组件化的单位...【详细内容】
2022-07-05  Search: Android架构师  点击:(340)  评论:(0)  加入收藏
▌简易百科推荐
Android Emulator黑屏怎么办 Android模拟器黑屏解决方法
Android Emulator黑屏问题困扰了非常多的玩家,Android Emulator作为一款安卓模拟器,可以让你在电脑上运行和浏览安卓应用程序,但是程序本身不是很稳定,很容易会出现黑屏,启动不了...【详细内容】
2024-03-04  18183游戏网    Tags:Android Emulator   点击:(46)  评论:(0)  加入收藏
Android开发中常见的Hook技术有哪些?
Hook技术介绍Hook技术是一种在软件开发中常见的技术,它允许开发者在特定的事件发生时插入自定义的代码逻辑。常见的应用场景包括在函数调用前后执行特定的操作,或者在特定的事...【详细内容】
2023-12-25  沐雨花飞蝶  微信公众号  Tags:Android   点击:(92)  评论:(0)  加入收藏
在Android应用开发中使用NFC功能
NFC介绍NFC是指“近场通讯”(Near Field Communication),它是一种短距离无线通信技术,允许设备在非接触或极短距离内进行通信。NFC通常用于移动支付、门禁系统、智能标签和其他...【详细内容】
2023-12-22  沐雨花飞蝶  微信公众号  Tags:Android   点击:(104)  评论:(0)  加入收藏
关于Android图像Bitmap类,你要知道的一切
Bitmap介绍Bitmap是一种图像文件格式,它由像素阵列组成,每个像素都有自己的颜色信息。在计算机图形学中,Bitmap图像可以被描述为一个二维的矩阵,其中每个元素代表一个像素的颜色...【详细内容】
2023-12-19  沐雨花飞蝶  微信公众号  Tags:Android   点击:(102)  评论:(0)  加入收藏
Android开发中如何进行单元测试?
单元测试介绍单元测试是软件开发中的一种测试方法,用于验证代码中的最小可测试单元(通常是函数或方法)是否按预期工作。单元测试通常由开发人员编写,旨在隔离和测试代码的特定部...【详细内容】
2023-12-11  沐雨花飞蝶  微信公众号  Tags:Android   点击:(170)  评论:(0)  加入收藏
一篇聊聊Jetpack Room实现数据存储持久性
Room介绍Room 是 Android Jetpack 组件库中的一部分,它是用于在 Android 应用中进行本地数据库访问和管理的库。Room 提供了一个抽象层,使开发者能够更轻松地访问 SQLite 数据...【详细内容】
2023-12-08  沐雨花飞蝶  微信公众号  Tags:Jetpack   点击:(149)  评论:(0)  加入收藏
了解Android系统架构中的HAL硬件抽象层
在Android系统中,HAL的存在使得不同厂商的硬件可以统一被上层的应用程序调用,从而提高了系统的兼容性和可移植性。HAL还可以帮助开发者更方便地开发应用程序,因为他们不需要为...【详细内容】
2023-12-06  沐雨花飞蝶  微信公众号  Tags:Android   点击:(214)  评论:(0)  加入收藏
我们一起聊聊 IntentService 与 Service 的区别?
Service介绍Service组件是Android应用开发中的四大组件之一,用于在后台执行长时间运行的操作或处理远程请求。它可以在没有用户界面的情况下执行任务,并且可以与其他应用组件...【详细内容】
2023-12-06  沐雨花飞蝶  微信公众号  Tags:IntentService   点击:(179)  评论:(0)  加入收藏
Android数据对象序列化原理与应用
序列化与反序列化「序列化」是将对象转换为可以存储或传输的格式的过程。在计算机科学中,对象通常是指内存中的数据结构,如数组、列表、字典等。通过序列化,可以将这些对象转换...【详细内容】
2023-11-14  沐雨花飞蝶  微信公众号  Tags:Android   点击:(280)  评论:(0)  加入收藏
你了解Android中的SELinux吗?
SELinux介绍SELinux(Security-Enhanced Linux)是一种安全增强的Linux操作系统,它通过强制访问控制(MAC)机制来提供更高级别的系统安全保护。相比于传统的Linux访问控制机制(DAC),SEL...【详细内容】
2023-11-09  沐雨花飞蝶  微信公众号  Tags:Android   点击:(272)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条