Android简单的模块化开发

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yuan381119866/article/details/81137500

1.为什么要模块开发

     1.解耦性强:随着业务的增多,代码变的越来越复杂,每个模块之间的代码耦合变得越来越严重,解耦问题急需解决。

     2. 编译时间大大减少:以为业务场景对,代码越来越大,同时编译时间也会越来越长。

     3.提高团队协同开发:  团队协同开发存在较多的冲突.不得不花费更多的时间去沟通和协调,影响开发效率 。

   模块化的定义:   

    Modular programming is a software design technique that emphasizes separating the functionality of a program into independent, interchangeable modules, such that each contains everything necessary to execute only one aspect of the desired functionality.

      英文好的同学自己就自己看英文了,具体意思就是,模块化就是将一个程序按照其功能做拆分,分成相互独立的模块,以便于每个模块只包含与其功能相关的内容。比如登录功能可以是一个模块。

主要的思想:(从网上找的)

  android 模块化开发主要是以module来拆分,觉的来代码直接一点。

首先看一下demo的studio结构:

简单说明一下,这里我只要是分成三个部分,一个肯定是我们的宿主APP模块,第二个就是Base模块,这个模块是我们的基础模块,也就是各个module的库,第三个是FirstModule(module的写错了),这个是我模拟的一个功能模块module(实际的业务模块)。

 在FirstModule的gradle文件中

//在文件的顶部
if(isBuildModule.toBoolean()){
    apply plugin: 'com.android.application'
}else{
    apply plugin: 'com.android.library'
}




//在Android模块中
    sourceSets {
        main {
            if (isBuildModule.toBoolean()) {
                manifest.srcFile 'src/main/debug/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/main/release/AndroidManifest.xml'
            }
        }
    }


//isBuildModule是在gradle.properties中声明
isBuildModule=false

在然后是配置AndroidManifest.xml文件,以为当isBuildModule=true时,FirstModule是一个可以运行的模块,为false时是一个库,所以要配置一个AndroidManifest.xml

false就是debug的AndroidManifest.xml,true就是release的AndroidManifest.xml

两个代码是分别是

//debug
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.fristmodule">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:name=".FristApplication">

        <activity
            android:name="com.example.fristmodule.FristActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>



//release

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.fristmodule">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity
            android:name="com.example.fristmodule.FristActivity">
        </activity>
    </application>

</manifest>

FirstModule 基本就完成了,APP的宿主和我们平时一样,不用改什么,我在APP中创建MainActivity,在FirstModule中坚决了firstActivity。然后用intent跳转

 Intent intent = new Intent(MainActivity.this, FristActivity.class);       startActivity(intent);

单isBuildModule=false是项目成功了跳转到FirstActivity了,可单isBuildModule=true时,也就是FirstModule为一个可运行的demo时,APP模块FirstActivity应用爆红了,找不到这个class。原因就是FirstModule不是一个库所以在不到这类,所以我们不能用intent,当然可以用隐式跳转,但是麻烦容易出错,所以在这里我采用了阿里的路由,GitHub的地址:https://github.com/alibaba/ARouter,具体内容的自己去看。

        我把这个ARouter依赖带Base module库中,配置的时候有2个需要注意的是:

     1:gradle的版本<2.2是是用apt的compilel的,版本>2.2的用api。

     2:api 'com.github.bumptech.glide:okhttp3-integration:1.4.0@aar' 这个是阿里的插件,每个module都要添加同样还有在gradle的Android模块加

javaCompileOptions {
            annotationProcessorOptions {
                arguments = [ moduleName : project.getName() ]
            }
        }

然后在各个module中应用Base库

 implementation project(':Base')

最后就按ARouter的规则来跳转。

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ARouter.getInstance().build("/frist/fristactivity").navigation();
            }
        });




@Route(path = "/frist/fristactivity")
public class FristActivity extends AppCompatActivity {...}

demo下载

展开阅读全文

没有更多推荐了,返回首页