插件化实战

前两篇文章都是插件化的理论知识,但是正在的运用在项目中,会遇到各种各样的问题,这样需要整个完成一个组件化开发的实例。

第一步:创建一个新项目PlugProject,等待项目构建完成

第二步:创建两个基础模块(baseResLib和baseUtilsLib),

  1)baseResLib是放置项目使用的资源文件,例如图片和文字等。

  2)baseUtilsLib是放置项目使用的公共类库

因为基础模块是没有界面的,所以不需要过多的设置,只要将其在gradle中设置成library即可。

apply plugin: 'com.android.library'
 其他业务模块使用该基础模块的方式:
compile project(':basereslib')
compile project(':baseutilslib')

第三步:创建业务模块(carByBuyApp和carBySellApp)

 1)carByBusApp 是买车业务模块

 2)carBySellApp 是卖车业务模块

因为是业务模块,与基础模块不同,在debug模式下,业务模块是可以独立编译和运行的,在release模式下,它又变成一个library模块。这样我们就要在业务模块的gradle中进行动态的设置处理:

if(isDebug.toBoolean()){
    apply plugin: 'com.android.application'
}else{
    apply plugin: 'com.android.library'
}
而其中的isDebug参数,是一个全局的变量。我们可以在gradle.propertes中手动设置:
#trueΪdebug falseΪrealse
isDebug=false

所有的业务模块需要依赖基础模块的支持,我们需要在gradle中进行引入基础模块:

dependencies {
    compile project(':basereslib')
    compile project(':baseutilslib')
}

业务模块既然可以在debug模式下独立运行,说明是它在debug模式下是一个独立的apk,这样我们就需要对AndroidManifest.xml文件进行特殊处理

我们需要在main包下,新建两个包debug和release,来分别存放配置文件。

然后通过在gradle中设置属性来根据不同模式下,选择相应的配置文件

android {
    
    sourceSets {
        main {
            if(isDebug.toBoolean()) {
                manifest.srcFile 'src/main/debug/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/main/release/AndroidManifest.xml'
                java{
                    exclude 'debug/**'
                }
            }
        }
    }
}

release/AndroidManifes.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.malei.carbybuyapp" >
    <application>
        <activity android:name=".CarBuyActivity">
        </activity>
    </application>

</manifest>
debug/AndroidMainifes.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.malei.carbybuyapp">

    <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:label="@string/app_name"
        android:supportsRtl="true">
        <activity android:name=".CarBuyActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

第四步:以上一个组件化架构就完成了,我们现在还要在不同的模块之间进行跳转,这个时候,我们就需要 Arouter插件了。

引入插件的方式:在业务组件中添加引入

android {
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [moduleName: project.getName()]
            }
        }
    }
}
dependencies {
    compile 'com.alibaba:arouter-api:1.2.1'
    annotationProcessor 'com.alibaba:arouter-compiler:1.1.2'

    compile project(':basereslib')
    compile project(':baseutilslib')

}

然后对Aroutter进行初始化在Applicaton中

/**
 * @author by malei on 2018/3/9.
 */
public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        if(BuildConfig.DEBUG){
            ARouter.openLog();     // 打印日志
            ARouter.openDebug();   // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)
        }
        ARouter.init( this ); // 尽可能早,推荐在Application中初始化
    }
}
在我们需要跳转的页面添加注解
@Route(path = "/com/main")
public class CarBuyActivity extends Activity{
然后就可以在其他业务模块的Activity中跳转到CarBuyActivity了。
ARouter.getInstance().build("/com/main").navigation();
这样一个debug模式下的组件化就完成了

第五步:在realse模式下,运行组件化框架

想要在realse模式下运行,我们就要对项目进行签名

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.malei.plugproject"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true //必须写
    }

    signingConfigs {
        debug {
            keyAlias 'xxx'
            keyPassword '666666'
            storePassword '666666'
            storeFile file('kes.jks')
        }
        release {
            keyAlias 'xxx'
            keyPassword '666666'
            storePassword '666666'
            storeFile file('kes.jks')
        }
    }

    buildTypes {
        release {
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
            minifyEnabled false
        }
    }
}
然后在依赖包中根据不同模式,也要进行处理
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    if (isDebug.toBoolean()) {
        compile project(':basereslib')
        compile project(':baseutilslib')
    } else {
        compile project(':carbybuyapp')
        compile project(':carbysellapp')
    }
}

完毕!!!!!!!!!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值