『网易实习』周记(二)

『网易实习』周记(二)

本周知识清单

  • gradle知识
  • Application,Acitivity,AppcompatActivity的区别
  • 组件化项目搭建

gradle指南

自己在公司看公司源码的时候,发现公司源码都是组件化的搭建,然后配置文件里面都是gradle来构建自动化,然自己之前学习并没有很深入的去学习,这次趁机去了解这个gradle了。Gradle 并不仅仅是一个语言,而是一套构建工具。在早期,软件构建只有编译和打包等简单需求,但软件开发的发展,现在的构建变得更加复杂。而构建工具就是在这一背景下衍生出来的工具链,它能够帮助开发者可重复、自动化地生成目标产物。然后对于我来说自己最近也得准备秋招,关于这些进阶的东西学习不是很深刻,以后有时间再回来恶补,关于Gradle学习推荐学习:

  • 要点提炼| Gradle指南
  • 《Android Gradle权威指南》

关于《Android Gradle权威指南》我自己也是打算去看的,等我秋招上岸,必须安排。

Application,Acitivity,AppcompatActivity的区别

Application

  • Application是维护全局状态的基类,Android系统会在启动应用进程时创建一个Application对象。application里面的对象变量是属于整个系统的。
  • 在启动程序时会创建application对象,所以Application对象诞生于其他任何组件对象之前,并且一直存活,直到应用进程结束。
  • 默认情况下系统会为每个应用分配一个进程,进程的名称就是每个项目的包名,当进程启动的时候,系统会创建application对象,并调用对象的onCreate函数。
  • application在项目运行过程中不会改变,而activity在切换过程中,会有不断的创建和销毁,服务切换也是创建和销毁,但是application不会改变
  • Application对象由Android系统管理,其回调函数都运行于UI线程即主线程,
  • 回调函数有onCreate,onConfigurationChanged即系统配置变更,包括屏幕方向变化,系统语言变化等,onLowMemory释放内存
  • application对象全局可访问,且全程陪同应用进程,适合共享全局状态,初始化全应用所需的服务。
  • 静态单例也可以实现全局状态的共享
  • 在组件化的项目中,extends Application 在他当oncreate 方法中都会做一些初始化工作

『网易实习』周记(二)_第1张图片

MainActivity extends AppCompatActivity与extends Activity的区别

public class MainActivity extends AppCompatActivity

public class MainActivity2 extends Activity

问:AppCompatActivity和Activity有什么区别,Android studio从启动到创建MainActivity的时候就自动extends AppCompatActivity,为什么不extends Activity?

答:AppCompatActivity是继承自v4包的FragmentAvtivity,并且加入了很多新特性。这个可以很好的兼容老设备。

AppCompatActivity 和 Activity 的区别主要体现在app运行后的界面(app name显示或者不显示),对程序本身没有影响。

『网易实习』周记(二)_第2张图片

继承AppCompatActivity后的运行界面

『网易实习』周记(二)_第3张图片

继承了Activity后的运行界面

差了明显的一个Label也就是项目的标签。标签的文字来源于AndroidManifest.xml中application中的android:label 如果继承的是Activity那这个标签的内容不会显示出来。

组件化项目搭建

为什么要使用组件化

  • 查找问题慢:定位问题,需要在多个代码混合的模块中寻找和跳转。
  • 开发维护成本增加:避免代码的改动影响其它业务的功能,导致开发和维护成本不断增加。
  • 编译时间长:项目工程越大,编译完整代码所花费的时间越长。
  • 开发效率低:多人协作开发时,开发风格不一,又很难将业务完全分割,大家互相影响,导致开发效率低下。
  • 代码复用性差:写过的代码很难抽离出来再次利用。

组件化的优势

组件化基于可重用的目的,将应用拆分成多个独立组件,以减少耦合:

  • 加快编译速度:每个业务功能都是一个单独的工程,可独立编译运行,拆分后代码量较少,编译自然变快。
  • 解耦:通过关注点分离的形式,将App分离成多个模块,每个模块都是一个组件。
  • 提高开发效率:多人开发中,每个组件模块由单人负责,降低了开发之间沟通的成本,减少因代码风格不一而产生的相互影响。
  • 代码复用:类似我们引用的第三方库,可以将基础组件或功能组件剥离。在新项目微调或直接使用。

组件分层

『网易实习』周记(二)_第4张图片

组件化搭建过程

1·新建一个工程

『网易实习』周记(二)_第5张图片『网易实习』周记(二)_第6张图片『网易实习』周记(二)_第7张图片

2·构建模块

『网易实习』周记(二)_第8张图片建议:

  • 第一种:module是能在library和application之间切换
  • 第二周:module只能是library

新建四个module
『网易实习』周记(二)_第9张图片

组件的依赖关系是:

『网易实习』周记(二)_第10张图片我们都知道,android的项目构建是用gradle,我们使用组件化项目,每个人开发的组件build.gradle配置就得一样,不然就得寄,当然这些模块,我们怎么改呢,很显然,我们在根的build.gradle文件配置一个ext 文件,其他的module的build.gradle就去读取根的build.gradle文件配置就大功告成

  1. 改根的build.gradle文件配置
    『网易实习』周记(二)_第11张图片

  2. 改libBase的build.gradle文件配置

    『网易实习』周记(二)_第12张图片

  3. 改login的build.gradle文件配置
    『网易实习』周记(二)_第13张图片『网易实习』周记(二)_第14张图片

  4. 改main的build.gradle文件配置(直接放配置文件)

def cfg = rootProject.ext


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

android {
    compileSdk cfg.android.compileSdkVersion

    defaultConfig {
        if (cfg.isDebug) {
            applicationId cfg.applicationId.login
        }
        minSdk cfg.android.minSdkVersion
        targetSdk cfg.android.targetSdkVersion
        versionCode cfg.android.versionCode
        versionName cfg.android.versionName

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    sourceSets {
        main {
            if (cfg.isDebug) {
                manifest.srcFile 'src/main/debug/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/main/AndroidManifest.xml'
            }
        }
    }
}

dependencies {
    implementation project(':modulesBase:libBase')
    
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
  1. 改moudlePay的build.gradle文件配置(直接放配置文件)
def cfg = rootProject.ext

apply plugin: 'com.android.library'
android {
    compileSdk cfg.android.compileSdkVersion
    
    defaultConfig {
        
        minSdk cfg.android.minSdkVersion
        targetSdk cfg.android.targetSdkVersion
        versionCode cfg.android.versionCode
        versionName cfg.android.versionName
        
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    
}

dependencies {
    
    
    implementation project(':modulesBase:libBase')
    
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

3·配置路由

Android 中的界面跳转那是相当简单,但是在组件化开发中,由于不同组件式没有相互依赖的,所以不可以直接访问彼此的类,这时候就没办法通过显式的方式实现了。
所以在这里咱们采取更加灵活的一种方式,使用 Alibaba 开源的 ARouter 来实现。

一个用于帮助 Android App 进行组件化改造的框架 —— 支持模块间的路由、通信、解耦

ext 文件已经配置了依赖
『网易实习』周记(二)_第15张图片
『网易实习』周记(二)_第16张图片
『网易实习』周记(二)_第17张图片
至此路由配置完成。
『网易实习』周记(二)_第18张图片
『网易实习』周记(二)_第19张图片

『网易实习』周记(二)_第20张图片
推荐阅读:Android 手把手带你搭建一个组件化项目架构
CSDN demo:https://download.csdn.net/download/weixin_45882303/86261212

你可能感兴趣的:(实习随笔,android,gradle,android,studio)