Android开发经验谈Android技术知识Android开发

告别传统单一模块开发,拥抱组件化开发模式

2020-07-09  本文已影响0人  躲得过初一躲不过十五

前言

该资料中包含一些组件化开发中的重要知识点,大家可以对于文章中对于的组件化开发是视频更容易上手掌握。

一丶什么是组件化?

二丶为什么一定要掌握组件化开发?

其实在讲到为什么一定要掌握组件化开发的时候,也要刨一刨单一模块开发的坑:

so,单一模块从上分析还是有很多不足的,所以在这种背景下出现了组件化开发,接下来说说组件化开发的优势(其实就是弥补了单一模块的不足)

组件化和单一模块项目结构对比


三丶组件化开发的注意事项

四丶 如何把项目组件化

如果是老项目就设计到项目迁移的问题,如果是新项目那就直接可以在创建项目的时候就进行组件化开发。具体步骤如下:

第一步:把业务模块划分好之后,创建相对应的module

最终效果如下:例子

注意: 在创建module以及Activity的时候,命名最好有自己的规则(防止类名重复以及资源名字重复)

第二步:把所有module中的版本号以及一些需要统一管理的内容进行统一管理(通过定义全局变量的方式,常用有三种方式)

1.直接定义在gradle.properties文件中,如图:


使用方式:
  android {
       compileSdkversion TAR_SDK_VERSION.toInteger()
       buildToolsverion BUILD_TOOL_VESION

       defaultConfig {
           applicationId "com.maniu.member" 
           minSdkversion MIN_SDK_VERSION.toInteger ()
           targetsdkversion TAR_SDK_VERSION.toInteger ()
           versioncode    VERSION_CODE.toInteger ()
           versionName  VERSION_NAME

           testInstrumentationRunner "android.support.test.runner.AndroidJunitRunner"
  }

注意: 定义在gradle.properties文件中的全局变量都是String类型,使用的时候请先转换为需要的类型。

2.定义在工程的build.gradle文件中,如:

  task clean(type:Delate) {
         delete rootproject.buildDir
  }
  
  ext {
        compilesdkversion = 28
        bulidToolsversion = "29.0.0"
        minsdkversion =21
        versioncode =1
        versionName = '1.0'
        APP_COMPAT = ''com.android.support:appcompat-v7:28.0.0''
  }

使用方式:

  android {
      compilesdkversion rootproject.ext.compilesdkversion
      buildToolsversion   rootproject.ext.buildToolsversion
    
      defaultconfig {
          applitcationId ''com.maniu.member''
          minsdkversion rootproject.ext.minsdkversion
          targetsdkversion rootproject.ext.targetsdkversion
          versioncode rootproject.ext.versioncode
          versionName rootproject.ext.versionName
          testinstrumentationRunner ''android.support.test.runner.AndroidJunitRunner''
  }

3.自定义gradle文件.如:

  ect {
       android = [
                    compilesdkversion  : 28,
                    buildToolsversion  : ''29.0.0'',
                    minsdkversion      :21,
                    targetsdkversion   :28,
                    versioncode   : 1,
                    versionName   :'1.0'
      ]
       dependencies = [
                   appcpmpatv7: ':com.android.support:appcompat-v7:28.0.0',
     ]
  }

定义好之后还需要是主工程的build.gradle进行应用定义,如:


使用方式:
  android {
      compilesdkversion  rootproject.ext.android.compilesdkversion
      buildToolsversion rootproject.ext.android.buildToolsversion

      defaultconfig {
           applicationId ''com.maniu.member''
           minsdkversion rootproject.ext.android.minsdkversion
           targetsdkversion rootproject.ext.android.targetsdkversion
           versioncode rootproject.ext.android.versioncode
           versionName rootproject.ext.android.versionName
           testInstrumentationRunner ''android.support.test.runner.AndroidJunitRunner"
  }
第三步:如何让每个module都能在Application和Library之间进行随意的切换(其实很简单,定义一个boolean类型的全局变量当做开关)


注意: 只有当module是Application的时候才具有applicationId,所以这里也要进行处理。
第四步:Application和Library所加载AndroidManifest.xml文件要区分,因为他们对AndroidManifest.xml文件的要求不一样。

处理方式很简单,直接复制一个AndroidManifest.xml文件,一份在module是Application的时候用,一份在module是Library的时候用。如图:


Library下的AndroidManifest.xml文件

在module的build.gradle文件中区分使用
  buildTypes {
       release {
          minifyEnabled false
          proguardFiles getDefaultproguardFile('proguard-android-optimize.txt'),
       }
  } 
  sourcesets {
       main {
          if(rootproject.ext.android.is_application) {
               manifest.srcFile 'src/main/AndroidMainfest.xml'
          }else{
               manifest.srcFile 'src/main/manifest/AndroidManifest.xml'
          }
      }
  }
第五步:将其他业务逻辑module注入到主module中(注意Application是不能依赖其他的Application,所以要记得判断依赖的时候,其他模块是否是Application)。

到此为止,一个组件化项目的架子就搭好了。注意:以上的操作都针对所有的业务逻辑module,所有业务逻辑module都要进行这样处理。
更多面试内容,技术干货,技术交流:
star一下我的GitHub

原创不易,点点关注

上一篇 下一篇

猜你喜欢

热点阅读