• 『网易实习』周记(二)


    『网易实习』周记(二)

    本周知识清单

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

    gradle指南

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

    在这里插入图片描述

    MainActivity extends AppCompatActivity与extends Activity的区别

    public class MainActivity extends AppCompatActivity
    
    public class MainActivity2 extends Activity
    
    • 1
    • 2
    • 3

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

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

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

    在这里插入图片描述

    继承AppCompatActivity后的运行界面

    在这里插入图片描述

    继承了Activity后的运行界面

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

    组件化项目搭建

    为什么要使用组件化

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

    组件化的优势

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

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

    组件分层

    在这里插入图片描述

    组件化搭建过程

    1·新建一个工程

    在这里插入图片描述在这里插入图片描述在这里插入图片描述

    2·构建模块

    在这里插入图片描述建议:

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

    新建四个module
    在这里插入图片描述

    组件的依赖关系是:

    在这里插入图片描述我们都知道,android的项目构建是用gradle,我们使用组件化项目,每个人开发的组件build.gradle配置就得一样,不然就得寄,当然这些模块,我们怎么改呢,很显然,我们在根的build.gradle文件配置一个ext 文件,其他的module的build.gradle就去读取根的build.gradle文件配置就大功告成

    1. 改根的build.gradle文件配置
      在这里插入图片描述

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

      在这里插入图片描述

    3. 改login的build.gradle文件配置
      在这里插入图片描述image.png

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    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'
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    3·配置路由

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

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

    ext 文件已经配置了依赖
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    至此路由配置完成。
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    推荐阅读Android 手把手带你搭建一个组件化项目架构
    CSDN demo:https://download.csdn.net/download/weixin_45882303/86261212

  • 相关阅读:
    Java8实战-总结22
    Ubuntu 搭建 STM32 开发环境
    一个月黑风高的夜晚紧急完成gitlab服务器数据迁移
    x64dbg 基本使用技巧
    TTL反相器和CMOS
    Python Rich:美化终端显示效果
    kuiper 规则sql写法
    wordpress模板购买网站推荐
    MindSpore易点通·精讲系列–网络构建之Conv2d算子
    Spring中的ApplicationContext所体现出来的工厂模式
  • 原文地址:https://blog.csdn.net/weixin_45882303/article/details/125987400