本文章是借鉴网上的文章所写。
使用Android studio 3.4 gradle 5.1
总体架构
appmian :App壳 主要负责页面切换
home shop user :业务模块
baselibray: 基础组件的依懒
模块的通信 Arouter 框架
坑
ARouter::Compiler >>> No module name, for more information, look at gradle log.
解决办法 :在每个moudle 模块包括壳
javaCompileOptions { annotationProcessorOptions { arguments = [ AROUTER_MODULE_NAME : project.getName() ] } }
统一gradle管理
创建config.gradle 将所有的build.向如下格式
ext {
android = [
compileSdkVersion: 28,
buildToolsVersion: "29.0.3",
minSdkVersion : 15,
targetSdkVersion : 28,
versionCode : 1,
versionName : "1.0"
]
appId = [
applicationId: "com.example.myapplication"
]
androidx = [
"appcompat" : 'com.android.support:appcompat-v7:28.0.0',
"junit" : 'junit:junit:4.12',
"runner" : 'com.android.support.test:runner:1.0.2',
"espresso" : 'com.android.support.test.espresso:espresso-core:3.0.2',
"constraintlayout": 'com.android.support.constraint:constraint-layout:1.1.3',
]
MagicIndicator_version = '1.5.0'
butterknife_version = '10.2.3'
okhttp_version = '3.10.0'
gson_version = '2.6.2'
glide_version = '3.7.0'
event_version = '3.1.1'
dependencies = [
"MagicIndicator" : "com.github.hackware1993:MagicIndicator:$MagicIndicator_version",
"butterknife" : "com.jakewharton:butterknife:$butterknife_version",
"okhttp" : "com.squareup.okhttp3:okhttp:$okhttp_version",
"gson" : "com.google.code.gson:gson:$gson_version",
"glide" : 'com.github.bumptech.glide:glide:4.9.0',
"rxandroid" : 'io.reactivex.rxjava2:rxandroid:2.1.0',
"rxjava" : 'io.reactivex.rxjava2:rxjava:2.2.3',
"compilers" : 'com.github.bumptech.glide:compiler:4.9.0',
"eventbus" : "org.greenrobot:eventbus:$event_version",
"butterknifecompiler": 'com.jakewharton:butterknife-compiler:10.2.3',
"arouter": 'com.alibaba:arouter-api:1.4.1',
"aroutercompiler": 'com.alibaba:arouter-compiler:1.2.2'
]
}
在project 根目录下的build文件中
apply from :"config.gradle"
在app的build中引用
def androidId=rootProject.ext.android
def androidxs=rootProject.ext.androidx
android {
compileSdkVersion androidId.compileSdkVersion
buildToolsVersion androidId.buildToolsVersion
defaultConfig {
minSdkVersion androidId.minSdkVersion
targetSdkVersion androidId.targetSdkVersion
versionCode androidId.versionCode
versionName androidId.versionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation androidxs.appcompat
testImplementation androidxs.junit
androidTestImplementation androidxs.runner
androidTestImplementation androidxs.espresso
}
1步骤 创建home Module
2在project build下面 定义
ext { isRunHome = false // true是Home模块可单独运行 isRunPersonalcenter = false isRunShopingcar = false }
(关于定义变量:在gradle.properties 中也可以定义)
3在 home Module build 中
if(isRunHome.toBoolean()){ // 1.根据之前设定的isRunHome,判断是否需要独立运行 apply plugin: 'com.android.application' }else { apply plugin: 'com.android.library' }
sourceSets { main { // 1.单独调试与集成调试时使用不同的 AndroidManifest.xml 文件 // 我们还可以根据不同工程配置不同的 Java 源代码、不同的 resource 资源文件等的 if(isRunHome.toBoolean()) { manifest.srcFile 'src/main/manifest/AndroidManifest.xml' } else{ manifest.srcFile 'src/main/AndroidManifest.xml' } } }
if(isRunHome.toBoolean()){ // 2.这里也设置一下,可运行的话,添加applicationId applicationId "com.example.home" }
整体如下
if(isRunHome.toBoolean()){ // 1.根据之前设定的isRunHome,判断是否需要独立运行 apply plugin: 'com.android.application' }else { apply plugin: 'com.android.library' } android { compileSdkVersion 28 buildToolsVersion "29.0.2" sourceSets { main { // 1.单独调试与集成调试时使用不同的 AndroidManifest.xml 文件 // 我们还可以根据不同工程配置不同的 Java 源代码、不同的 resource 资源文件等的 if(isRunHome.toBoolean()) { manifest.srcFile 'src/main/manifest/AndroidManifest.xml' } else{ manifest.srcFile 'src/main/AndroidManifest.xml' } } } defaultConfig { javaCompileOptions { annotationProcessorOptions { arguments = [ AROUTER_MODULE_NAME : project.getName() ] } } if(isRunHome.toBoolean()){ // 2.这里也设置一下,可运行的话,添加applicationId applicationId "com.example.home" } 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']) //noinspection GradleCompatible implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' 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' api project(':baselibrary') // implementation 'com.alibaba:arouter-api:1.4.1' annotationProcessor 'com.alibaba:arouter-compiler:1.2.2' }
主App build
implementation project(':baselibrary') annotationProcessor 'com.alibaba:arouter-compiler:1.2.2' if(!isRunHome.toBoolean()){ // 1.如果要独立运行,那么主工程不加载它 implementation project(path: ':home') }
其他模块一样
关于引入arouter注意点
每个模块都要引入annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'
@Route(path = "/home/homeactitvy") public class HomeActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); } }
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); // 这两行必须写在init之前,否则这些配置在init过程中将无效 if(isDebug()) { // 打印日志 ARouter.openLog(); // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险) ARouter.openDebug(); } // 初始化ARouter ARouter.init(this); } private boolean isDebug() { return BuildConfig.DEBUG; } }
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void home(View view){ ARouter.getInstance().build("/home/homeactitvy").navigation(); }