U2020代码目录结构分析

U2020代码目录结构分析

U2020是JakeWharton在github的一个开源项目(参与人有很多,不只是JakeWharton一个人完成的),虽然代码量不少,但也只是一个Demo程序,涵盖了很多开源库的使用。

Dagger - http://square.github.io/dagger 地球人都知道
ButterKnife - http://jakewharton.github.io/butterknife 视图注入工具
Retrofit - http://square.github.io/retrofit 网络交互框架
Moshi - https://github.com/square/moshi JSON解析
Picasso - http://square.github.io/picasso 图片加载
OkHttp - http://square.github.io/okhttp 大名鼎鼎的http请求框架
RxJava - https://github.com/ReactiveX/RxJava
Timber - http://github.com/JakeWharton/timber 日志工具
Madge - http://github.com/JakeWharton/madge 测试相关
ProcessPhoenix - https://github.com/JakeWharton/ProcessPhoenix 应该是一个在程序崩溃的时候重新启动的工具
Scalpel - http://github.com/JakeWharton/scalpel 测试相关
LeakCanary - http://github.com/square/leakcanary 内存泄露检测工具

想把这个开源项目的代码基本掌握,需要先准备一下的知识点

  1. Gradle
  2. 依赖注入(Dependency Inject)这个就参照Dagger的实现就OK
  3. Android Studio开发环境的使用,说实话,U2020是我在AndroidStudio上面编译的第一个程序,对这个IDE的不熟悉,也带来了很多的麻烦
  4. 理解Java的注解

上面这四点能够理解,就能开始学习一下U2020(如果这四点都不了解,看这个代码绝对都是云里雾里一样)下面我们来看代码的目录结构:

这是在AndroidStudio中将项目选择Project输出的目录结构

怎么这么多文件夹,到底哪个是主要的文件夹,编译的时候,是每一个文件夹都参与编译??,先让我们来看build.gradle这个文件

buildscript {
  repositories {
    //maven {
    //  url 'https://oss.sonatype.org/content/repositories/snapshots/'
    //}
    mavenCentral()
  }
  dependencies {
    classpath 'com.android.tools.build:gradle:1.3.0'
    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
  }
}

  buildTypes {
    debug {
      applicationIdSuffix '.debug'
    }
  }

  productFlavors {
    internal {
      applicationId 'com.jakewharton.u2020.internal'
    }
    production {
      applicationId 'com.jakewharton.u2020'
    }
  }


    exclude 'LICENSE.txt'
  }
}

// TODO remove eventually: http://b.android.com/162285
configurations {
  internalDebugCompile
}

这里面先看productFlavors这一段

  productFlavors {
    internal { //internal这个是不是看着很眼熟
      applicationId 'com.jakewharton.u2020.internal'
    }
    production {//production这个字段看着是不是也很眼熟
      applicationId 'com.jakewharton.u2020'
    }
  }

是的这就对应上面的项目目录文件夹internal和production,productsFlavors是Gradle支持,打包配置不同的项目的自动化方法,也就是说,可以编译生成internal和production的APK文件,但是不需要堆代码做任何的变更,完全通过Gradle已经定义好的配置文件就可以完成,那么这又是怎么做到的?

其实很简单,productsFlavors中的internal就对应项目目录中的internal文件夹,production也一样,但是查看这两个 文件夹下对应的java文件,仿佛又不完整,其实main文件夹下才是整个项目的主要文件夹,所以整个目录结构是这样的

  • main文件夹:是共有的文件夹,无论是编译internal或者是production的APK文件,main都是必定要包含其中的
  • internal文件夹:编译internal的APK文件对应的文件夹 编译的目标代码 = main + internal
  • production文件夹:编译production的APK文件对应的文件夹,编译的目标代码 = mian +production

但是还有internalDebug、internalRelease、productionDebug、productionRelease这四个文件夹,是分别对应每一个productFlavor的Debug和Release版本,所以:
internal相关的release的APK编译的目标代码 = main + internal + internalRelease

每个文件夹下有可能也包括AndroidManifest文件,其中的内容都将包含在main文件夹下得AndroidManifest文件中,这样是不是很方便,每个文件夹(也可以理解为每个模块)以自己为单位,定义Activity,并将其登记在自己模块下的AndroidManifest文件中,在项目中,有很多可能需要用一版代码为Base,编程出很多变种的APK(比如带广告的,免费的,体验版本的等等),其中包含的源代码文件也不劲相同,放到不同的文件夹下,独立成一个模块,和Base程序互不干扰,在编译的时候通过Gradle配置来进行编译,就是那么的feel倍爽

其实这篇文章写的跟U2020这个开源项目没有太多的关系,只是先借着这个项目来理解一下Gradle,我在刚看这个项目的时候确实因为Gradle的不太熟悉,蒙了很长时间,以后会分析一些U2020相关的代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值