ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android 组件化实战,9次Android面试经验总结

2022-01-03 11:30:44  阅读:210  来源: 互联网

标签:implementation Module ext rootProject 组件 Android com android 经验总结


三、组件化有什么好处

前后端分离、MVP架构这些思想都是为了解耦,解耦就像是把对应的物品放入对应的箱子,这样在修改或者增加时,就能最小程度的不影响其它模块。

四、结构图

五、代码结构怎么设计

1. 根据业务逻辑新建module

假设有三个业务模块,加上app的主Module,加上common公共Module,所以一共需要5个Module,所以代码结构应该是这样:

2. 提取公共配置,避免版本不一致造成的错误

在项目根目录的build.gradle中的最底部添加

ext{

//SDK 版本号

compileSdkVersion = 28

buildToolsVersion = ‘28.0.3’

minSdkVersion = 21

targetSdkVersion = 28

//app 版本号

versionCode = 118

versionName = “1.1.8”

//依赖库版本号

supportLibVersion = ‘28.0.0’

}

然后在每个Module中对应修改成如下代码:

android {

compileSdkVersion rootProject.ext.compileSdkVersion

buildToolsVersion rootProject.ext.buildToolsVersion

defaultConfig {

applicationId “com.demo.myapplication”

minSdkVersion rootProject.ext.minSdkVersion

targetSdkVersion rootProject.ext.targetSdkVersion

versionCode rootProject.ext.versionCode

versionName rootProject.ext.versionName

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:$rootProject.ext.supportLibVersion”

implementation “com.android.support.constraint:constraint-layout:$rootProject.ext.constraintLibVersion” // 注意这里是双引号

}

3. 设置模块是否可以单独运行

在根目录的gradle.properties末尾添加

是否需要单独编译, 是否是application,true为application,false为library

isApplicationModule1=false

isApplicationModule2=false

isApplicationModule3=false

然后在module中的build.gradle中改变 application 还是 library

(1) 区分 application 还是 library

if (isApplicationModule1.toBoolean()){

apply plugin: ‘com.android.application’

}else{

apply plugin: ‘com.android.library’

}

(2) 增加 applicationId

defaultConfig {

if (isApplicationModule1.toBoolean()){

applicationId “com.demo.myapplication.module1”

}

}

(3) AndroidManifest 启动入口

sourceSets {

main {

if (isApplicationModule1.toBoolean()) {

manifest.srcFile ‘src/main/module/AndroidManifest.xml’

} else {

manifest.srcFile ‘src/main/AndroidManifest.xml’

}

}

}

4. 在主 app module 中引入其他Module

要注意的一点是每个组件如果是独立运行的话,那它是不能作为依赖库供app模块使用的,所以在app模块下的build.gradle文件中需要进行依赖判断

if (!isApplicationModule1.toBoolean()){

implementation project(’:module1’)

}

if (!isApplicationMod

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整资料开源分享

ule2.toBoolean()){

implementation project(’:module2’)

}

if (!isApplicationModule3.toBoolean()){

implementation project(’:module3’)

}

implementation project(’:common’)

在模块 Module中引入 common module

implementation project(’:common’)

至此通过修改配置,每个Module就可以单独运行。

5. 引入Arouter

由于需要模块之间的解耦,平时的Intent跳转需要导包,而Arouter引入之后,就能在跳转的同时不用导包。

集成Arouter

(1) 引入依赖

common中添加

api(“com.alibaba:arouter-api:$rootProject.ext.arouterLibVersion”) { exclude group: ‘com.android.support’ }

annotationProcessor “com.alibaba:arouter-compiler:$rootProject.ext.arouterAnnotationLibVersion”

在每个Module下都需要添加注解

annotationProcessor “com.alibaba:arouter-compiler:$rootProject.ext.arouterAnnotationLibVersion”

(2) 每个引入Arouter的Module的build.gradle中加入下面代码

defaultConfig {

//arouter

javaCompileOptions {

annotationProcessorOptions {

arguments = [moduleName: project.getName()]

}

}

}

(3) 在Application中进行初始化

if (isDebug) {

ARouter.openLog();

ARouter.openDebug();

}

ARouter.init(this);

(4)使用Arouter跳转

定义路由

@Route(path = “/app/main”)

public class MainActivity extends AppCompatActivity {

}

标签:implementation,Module,ext,rootProject,组件,Android,com,android,经验总结
来源: https://blog.csdn.net/m0_65146275/article/details/122285391

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有