Android 开发之组件化环境搭建

组件化开发 是适应团队开发的一种模式 

如果你一个项目有三人以上联合开发 你就会发现开发协作以及效率会大不如从前 代码臃肿 各种调用 各种重复 都是有可能会发生的 甚至会出现今天写明天错 这时候单一的module 的开发模式 明显已经不适合再继续使用了 所以组件化 应运而生(当然还有插件化 以后会开篇插件化以及插件化相关的框架介绍 今天只谈组件化 以及组件化和插件化的区别)

下面给他两个示例图 区别组件化 和 插件化


Android 开发之组件化环境搭建_第1张图片
组件化图例
Android 开发之组件化环境搭建_第2张图片
插件化图例

 例图已经很明显了 两者从原理上来说是有着本质区别的 但最终目的都是为了提高开发效率和团队协作能力

下面开始环境搭建 本文以as 为例

新建一个项目 KidsDemo 

新建一个module library libmodel 放公共方法 或者 资源 

新建一个phone module businessmodel 功能模块

案例使用了中间件路由 Arouter 具体使用我就不说了 本文略长 关于第三方 我会提供相关联系 

阿里巴巴中间件 点击了解Arouter路由

我的项目架构 


Android 开发之组件化环境搭建_第3张图片
项目架构

我们只写两个module 的 交互 和 通信 即 app 和 businessmodel 之间进行

首先对preject 进行配置 

打开project 的 build.gradle 文件 

添加中间件


apply plugin: ‘com.alibaba.arouter’ dependencies { 

…. 

classpath “com.alibaba:arouter-register:1.0.0” 

// NOTE: Do not place your application dependencies here; they belong 

// in the individual module build.gradle files 

}


提取远程依赖 设置开关 在project 的 gradle.properties 中添加 

isDebug = true;// false debug 模式 true 发布模式 ;false 开发模式不存在依赖关系


提取sdk管理供各model 调用 统一设置sdk版本

ext{ 

android_compileSdkVersion = 25 

android_buildToolsVersion = ‘25.0.3’ 

android_minSdkVersion = 16 

android_targetSdkVersion = 25 

app_versionCode = 1; 

app_versionName = “1.0”;

lib_fastjson = 'com.alibaba:fastjson:1.2.32'

lib_gson = 'com.google.code.gson:gson:2.6.1'

lib_xutils = 'org.xutils:xutils:3.5.0'

lib_router = 'com.alibaba:arouter-api:1.3.0'

lib_routercom = 'com.alibaba:arouter-compiler:1.1.4'

}


接着配置 libmodel 的 build.gradle 文件

compileSdkVersion rootProject.android_compileSdkVersion 

buildToolsVersion rootProject.android_buildToolsVersion

defaultConfig {

    minSdkVersion rootProject.android_minSdkVersion

    targetSdkVersion rootProject.android_targetSdkVersion

    versionCode rootProject.app_versionCode

    versionName rootProject.app_versionName

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

}

compile lib_gson 

compile lib_xutils 

这里配置了sdk 的一些属性 和 gson xutils 等工具

配置 app 的 build.gradle 文件


compileSdkVersion rootProject.android_compileSdkVersion 

buildToolsVersion rootProject.android_buildToolsVersion 

defaultConfig { 

applicationId “com.example.mysmall.kidsdemo” 

minSdkVersion rootProject.android_minSdkVersion 

targetSdkVersion rootProject.android_targetSdkVersion 

versionCode rootProject.app_versionCode 

versionName rootProject.app_versionName 

javaCompileOptions { 

annotationProcessorOptions { 

arguments = [ moduleName : project.getName() ] 

testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner” 

buildTypes { 

release { 

minifyEnabled false 

proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’ 

resourcePrefix “app_” // 区别资源文件命名 防止重名问题

compile lib_router 

annotationProcessor lib_routercom 

testCompile ‘junit:junit:4.12’ 

compile project(‘:businessmodel’) 

compile project(‘:libmodel’)

添加中间件 以及 添加 libmodel businessmodel 依赖

配置 businessmodel 的 build.gradle 文件 

if (isDebug.toBoolean()) {

applyplugin:'com.android.library'

}else {

applyplugin:'com.android.application'

}

android { 

compileSdkVersion rootProject.android_compileSdkVersion 

buildToolsVersion rootProject.android_buildToolsVersion

defaultConfig {

    minSdkVersion rootProject.android_minSdkVersion

    targetSdkVersion rootProject.android_targetSdkVersion

    versionCode rootProject.app_versionCode

    versionName rootProject.app_versionName

    javaCompileOptions {

        annotationProcessorOptions {

            arguments = [ moduleName : project.getName() ]

        }

    }

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

}

buildTypes {

    release {

        minifyEnabled false

        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

    }

}

resourcePrefix "business_" // 同上 区别命名

}

compile lib_router 

annotationProcessor lib_routercom 

compile project(‘:libmodel’) 

添加中间件 和 libmodel 依赖

然后我们要配置清单文件 manifast.xml 

main/ 包下创建 debug/包 然后复制你的manifast.xml 到 debug 下 修改 application 和 mainactivity 的属性即可

然后在android 闭包下配置 

sourceSets {

main {

if (isDebug.toBoolean()) {

manifest.srcFile'src/main/debug/AndroidManifest.xml'

        }else {

manifest.srcFile'src/main/AndroidManifest.xml'

        }

}

}

好了 这样就可以了 分别提供在library 和 application 情况下对manifast的访问


到这里基本配置 已经完成了 

解释一下 几个点

第一 app 和 businessmodel 仅仅只配置了 

compile lib_router 

annotationProcessor lib_routercom // 阿里巴巴的中间件 

compile project(‘:libmodel’) // 共有基础包 

这里并没有配置 网络请求 和 解析 工具 是因为我在libmodel 中已经配置 app 和 buisnessmodel 中配置了 libmodel 直接调用即可 初始化 和 相关封装 工作 都在 libmodel 中 并提供接口 共app 和 buisinessmodel 调用

第二 businessmodel 的相关配置 

if (isDebug.toBoolean()) {

applyplugin:'com.android.library'

}else {

applyplugin:'com.android.application'

}

不知道大家注意没有 在project 的 gradle.properties 文件下 的 我给了一个属性 isDebug = true;// false debug 模式 true 发布模式 这是个开关 为了加载不同的busnessmodel 类型 当为true 是 businessmodel 是个library module 反之 是app module

当然 还有的人将manifastxml 文件进行了配置 配置了两个 这个也是可以的 而我这里没有配置 是因为我一直是当作module 开发的 这种方式的配置方式是 在businessmodel 的main包下 创建一个debug包 将mainfastxml 文件复制一下 paste到 debug 包下 并去掉MainActivity的相关属性即可

我们开始编写libmodle 看一下 这个包的架构 


Android 开发之组件化环境搭建_第4张图片
libmodel结构

base 基础包 存储baseactivity application 和 activity管理者 

router 路由包 管理路由 初始化 和 uri 地址管理 

utils 工具包 一些sp工具 gson 解析工具等



首先看一下 base 包 

AppContext 是上下问管理类 获取application 的 上下文对象 具体代码就不写了 稍后我会push 到 github 上 

AppManager app的堆栈管理 所有的activity 

BaseActivity activity 的父类 和 activity 生命周期管理 

BaseChildApplication 各个modile 的application 的 父类 管理同意初始化 以及内存管理 

ApplicationAsLibrary 内存管理的抽象方法

router 包下 ConstantRouterUri 所有的uri 的 常量类 

utils 这个包就不说了 无关紧要 只是展示作用而已 

稍后会有代码上传 如有需要 自己去pull 就i好了

现在我们开始编码 我想要app 和 businessmodule 进行互相跳转 互相传值并展示 

app module 下只有两个类 一个是mainactivity 一个是appApplication

/**

* 作者: Nade_S on 2018/6/21.

*/public classMyAppextendsApplication{    

@Override    

public void onCreate() {

        super.onCreate();

        ARouter.openLog();    // 打印日志        

ARouter.openDebug();  // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)       

 ARouter.init( this ); // 尽可能早,推荐在Application中初始化    }

}


App的MainActivity

//@Route(path = "/app/activity/main")

@Route(path = ConstantRouterUri.AppMainUri)

public class MainActivityextends AppCompatActivity {

@Override

    protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        findViewById(R.id.app_jump_bt).setOnClickListener(new View.OnClickListener() {

@Override

            public void onClick(View v) {

ARouter.getInstance().build("/business/activity/main").withInt("age",33).withString("name","c罗").navigation();

            }

});

        int age = getIntent().getIntExtra("age",0);

        String name = getIntent().getStringExtra("name");

        Toast.makeText(this, "appMain---"+name+age, Toast.LENGTH_SHORT).show();

    }

}


为了直观显示 我把MainActivity 直接写在了这里

@Route(path = ConstantRouterUri.AppMainUri) 这样也是可以的

我现在要做的操作的是 点击跳转到 businessmodel 下 MainActivity 页面 并传值过去

现在开始编写 businessmodel包下的MainActivity

//@Route(path = "/business/activity/main")

@Route(path = ConstantRouterUri.BusinessMainUri)

public class MainActivity extends AppCompatActivity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.b_activity_main);

        findViewById(R.id.business_jump_bt).setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                ARouter.getInstance().build("/app/activity/main").withInt("age",34).withString("name","梅西").navigation();

            }

        });

        int age = getIntent().getIntExtra("age",0);

        String name = getIntent().getStringExtra("name");

        Toast.makeText(this, "businessMain---"+name+age, Toast.LENGTH_SHORT).show();

    }

}


business取值并展示 点击返回到app包下的并传值

效果如下:展示App/MainActivity 与 Business/MainActivty 相互传值并显示 


Android 开发之组件化环境搭建_第5张图片
效果展示

当然这是发布版 如果是开发阶段 直接在project的 build.gradle 设置开关debug--ture/false即可

好了 本文结束 如有疑问 留言或私信 demo 已上传 需要源码可以下载后查看

点击下载demo



Android 开发之组件化环境搭建_第6张图片
加群交流

你可能感兴趣的:(Android 开发之组件化环境搭建)