本文章是借鉴网上的文章所写。
使用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() ] } }
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(); }