Android 关于模块化

MainModule是写mainactivity中viewpager+三个按钮的那个,它是个module
commonsdk是用来归类底层library(utillibrary、widgetlibrary,baselibrary)的,它是个module
commonsdk拿它放color属性,图片资源,等
baselibrary 基本上所有要用的依赖都放这里,但前面不能用implement,都用api,api就相当于public的意思,implement它就是private的意思
Android 关于模块化_第1张图片
Android 关于模块化_第2张图片
在gradle.properties配置

# 开启并行编译
org.gradle.parallel=true
# 开启编译守护进程
org.gradle.daemon=true
# 标识模块的运行模式 true标识作为Module,否则表示作为Applicaiton运行
IS_MODULE = true

MIN_SDK_VERSION=16
COMPILE_SDK_VERSION=28
TARGET_SDK_VERSION=28

在项目的buildgradle写

project.ext {
    compileSdkVersion = COMPILE_SDK_VERSION.toInteger()
    minSdkVersion = MIN_SDK_VERSION
    targetSdkVersion = TARGET_SDK_VERSION

    isModule = IS_MODULE.toBoolean()
}

在app的buildgradle写

 if (isModule) {
        implementation project(':MainModule')
        implementation project(':commonsdk')
    }

在app的buildgradle
Android 关于模块化_第3张图片

 //这个没有快捷键,也提示不出来
  compileSdkVersion rootProject.ext.compileSdkVersion
  minSdkVersion rootProject.ext.minSdkVersion
  targetSdkVersion rootProject.ext.targetSdkVersion

在baselibrary的buildgradle

	// ARouter 使两个功能模块相互通信
    api 'com.alibaba:arouter-api:1.4.1'
    annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'

先改mainmodule的buildgradle(其余的功能模块的buildegradle,commonsdk的buildegradle)

if (isModule) {
    apply plugin: 'com.android.library'
} else {
    apply plugin: 'com.android.application'
}

mainmodule的buildgradle

 if (isModule) {
        api project(':commonsdk')
        implementation project(':ModuleChitchat')
        implementation project(':ModuleCommunity')
        implementation project(':ModuleInformation')
        implementation project(':ModuleMine')
    }

其余的功能模块的buildegradle

//Android模块化开发
implementation project(':commonsdk')

Android 关于模块化_第4张图片
commonsdk的buildegradle

	api project( ':baselibrary')
    api project( ':utillibrary')
    api project( ':widgetlibrary')

在配置APP里的buildgradle baselibrary的buildgradle,MainModule commonsdk utillibrary和widgetlibrary的buildegradle,功能模块的buildegradle

  javaCompileOptions {
            annotationProcessorOptions {
                includeCompileClasspath = true
                arguments = [ AROUTER_MODULE_NAME : project.getName() ]
            }
        }

Android 关于模块化_第5张图片
再在commonsdk模块 其他功能模块和MainModule添个依赖

    //Android模块化开发
    annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'

在baselibrary里创建baseapplication类

public class BaseApplication extends Application {

    public static Context mContext;

    @Override
    public void onCreate() {
        super.onCreate();
        mContext = this;
    }
  public static Context getContext() {
        return mContext;
    }
}

在utillibrary、widgetlibrary建个manager

public class UtilManager {

    private static Context mContext;

    public static void init(Context mContext) {
        mContext= mContext;
    }

    public static Context getContext() {
        return mContext;
    }
}
public class WidgetManager {

    private static Context mContext;

    public static void init(Context mContext) {
        mContext= mContext;
    }

    public static Context getContext() {
        return mContext;
    }
}

在commonsdk在配一个application,继承baseapplication

public class CommonApplication extends BaseApplication {

    @Override
    public void onCreate() {
        super.onCreate();
        UtilManager.init(mContext);
        WidgetManager.init(mContext);
    }
}

在app里写一个application,继承CommonApplication

public class MyApplication extends CommonApplication {

    private static Context mContext;

    @Override
    public void onCreate() {
        super.onCreate();
        mContext = this;
        //今日头条初始化
        AutoSizeinit.AutoSizeinit(this);
        //Fresco
        Fresco.initialize(this);
    }
}

保证APP的buildgradle里有applicationId 别的APPID都注释了
applicationid就只有APP的buildgradle有,别的module和library都注释了(别的buildgradle没有applicationid,因为它是library)

编译一下!!看看是否有错

在app的myapplication中写

	    ARouter.openDebug();
        ARouter.openDebug();
        ARouter.init(this);

在你app下写个activity测试一下是否能在模块之间跳转
Android 关于模块化_第6张图片

ARouter.getInstance().build("/main/home").navigation();

在MainModule里建的activity写@Route(path = “/main/home”)
在这里插入图片描述

记得在app的清单文件里注册application,
Android 关于模块化_第7张图片
只有APP的清单文件有,别的不能有

你可能感兴趣的:(原创)