美文网首页组件化
Android 组件化规范

Android 组件化规范

作者: Yasin27878 | 来源:发表于2018-12-14 15:42 被阅读32次

    Android 组件化规范

    修订记录

    Date Author Version Description
    2017-11-13 wuzongbo 0.0.1 create
    2018-03-19 YasinYao 0.0.2 update

    目录

    组件设计

    设计要求

    • 组件必须支持以application方式运行
    • 每个组件最好能写写支持单元测试
    • 一定要考虑多端通用(APP1、APP2、APP3、……)

    命名规则

    • 所有module包名必须为com.xxx.widge.mg{组件名}格式
    • 所有的资源必须以“{组件名}_{资源名}”命名,防止资源ID冲突,例如mgbutton_activity_home

    组件版本

    • 每个组件统一使用gradle.properties统一管理版本
    • 初始版本为:0.0.1,不要以1.0.0开始
    • 测试版本格式:0.0.1-SNAPSHOT(SNAPSHOT 为快照版本)
    • 正式版本格式:0.0.1

    组件依赖

    • 依赖第三方组件,如果不必暴露第三方库,必须使用implementation依赖
    • 禁止组件之间的依赖(很重要!!!),如果有这种需求那你该考虑设计成interface啦

    build.gradle 实例

    apply plugin: 'com.android.library'
    
    android {
        compileSdkVersion ANDROID_BUILD_SDK_VERSION as int
    
        defaultConfig {
            minSdkVersion ANDROID_BUILD_MIN_SDK_VERSION as int
            targetSdkVersion ANDROID_BUILD_TARGET_SDK_VERSION as int
            //单个组件版本号,递增
            versionCode 1
            //组件版本名称,不可修改
            versionName VERSION
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    
        }
    
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
            //防止资源ID冲突
            resourcePrefix project.name
        }
    
    }
    
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation deps.supportAppcompatV7
        testImplementation deps.junit
    }
    
    //maven发布脚本
    apply from: '../maven.gradle'
    

    组件发布

    • 配置Maven
    • 单个组件发布命令:./gradlew :{组件名}:uploadArchives
    • 全部组件发布命令:./gradlew uploadArchives

    组件使用

    组件依赖

    1. 在工程级的build.gradle中增加如下代码
    allprojects {
        repositories {
            maven { url 'http://192.168.60.96:8082/nexus/content/repositories/android-snapshots/' }
            maven { url 'http://192.168.60.96:8082/nexus/content/repositories/android/' }
            ...
        }
    
        configurations.all {
            //每隔10分钟检查动态版本的依赖是否更新
            resolutionStrategy.cacheDynamicVersionsFor 10, 'minutes'
            //每隔24小时检查远程依赖是否存在更新
            resolutionStrategy.cacheChangingModulesFor 24, 'hours'
        }
    }
    
    1. 依赖开发阶段的组件,版本号必须为快照版本(SNAPSHOT),这样有利于快速发布
    implementation "com.xxx.widget:mgbanner:0.0.1-SNAPSHOT"
    
    1. 正式版依赖
    implementation "com.xxx.widget:mgbanner:0.0.1"
    

    常见问题

    • 如何删除Gradle缓存

      删除"/Users/wuzongbo/.gradle/caches/modules-2/files-2.1/{package}"目录,再同步Gradle文件(Sync Project with Gradle Files)

    • 如何刷新Gradle版本

      在Android studio中Terminal中输入命令:./gradlew --refresh-dependencies

    页面跳转

    • 组件之间使用路由地址跳转
    MogoRouter.getInstance().build("mogopartner:///home").open(context);
    
    • 组件内部跳转Builder跳转
    RoomDetailsActivity_Router.intent(getContext()).roomId(123).start();
    

    组件升级

    因为此工程为所有android项目所引用,所以最好能兼容老的版本调用方式就兼容方法与样式

    修改方法

    比如在有一个方法A(int arg1,int arg2),我们要增加一个参数arg3,我们是不能再原来的方法是直接增加
    必须要新增一个方法A(int arg1,int arg2,int arg3),然后再用这个老的方法去调用新的方法,并且给一个默认值

    修改前

    int  a(int arg1,int arg2){
       return arg1+arg2;
    

    修改后

    }
    int a(int arg1,int arg2){
        return a(arg1,arg2,0);
    }
    
    int a(int arg1,int arg2,int arg3){
        return arg1+arg2+arg3;
    }
    

    修改样式

    比如在有一个组件原来只是伙伴用的,颜色为蓝色, 现在要改为绿色,假设我们把这个颜色做活
    那么我们做兼容的时候就需要指定一个默认颜色为蓝色,这样就做到兼容伙伴

    相关文章

      网友评论

        本文标题:Android 组件化规范

        本文链接:https://www.haomeiwen.com/subject/dxyghqtx.html