Android程序员须知的构建项目知识

一 build type 和 product flavors
1 build type是用来区分你的开发周期,如debug和release,只是两个不同的开发阶段,他们在功能上对用户来说其实并没有什么不同,实际的差别可能是debug版本会打印一些日志或者执行一些调试代码,实际上它们是同一个app。
2 product flavors用于区分你的策略,这使得它们已经是不同的app了,常见的策略如免费版本vs收费版本,多个渠道包等。

二 Android Studio 的六种依赖(Compile,Provided,APK,Test compile,Debug compile,Release compile)
1.Compile
compile是对所有的build type以及flavors 都会参与编译并且打包到最终的apk文件中。

2.Provided
Provided是对所有的build type以及flavors 只在编译时使用。

3.APK
只会打包到apk文件中,而不参与编译,所以不能再代码中直接调用jar中的类或方法,否则在编译时会报错

4.Test compile
Test compile 仅仅是针对单元测试代码的编译编译以及最终打包测试apk时有效,而对正常的debug或者release apk包不起作用。

5.Debug compile
Debug compile 仅仅针对debug模式的编译和最终的debug apk打包。

6.Release compile
Release compile 仅仅针对Release 模式的编译和最终的Release apk打包。

https://blog.csdn.net/u010090644/article/details/50955141

三 Java构建工具:Ant vs Maven vs Gradle
Make是最早的一种构建工具。当前,主流的java构建工具有:
Ant,Maven和Gradle。
1 Ant with Iv
Ant 基于过程式编程的idea。在最初的版本之后,逐渐具备了支持插件的功能。主要的不足是用XML作为脚本编写格式。 XML,本质上是层次化的,并不能很好地贴合Ant过程化编程的初衷。Ant的另外一个问题是,除非是很小的项目,否则它的XML文件很快就大得无法管理。
Ant的主要优点在于对构建过程的控制上。

2 Maven
Maven仍旧使用XML作为编写构建配置的文件格式,但是,文件结构却有巨大的变化。Ant需要码农将执行task所需的全部命令都一一列出,然而Maven依靠约定(convention)并提供现成的可调用的目标(goal)。不仅如此,有可能最重要的一个补充是,Maven具备从网络上自动下载依赖的能力(Ant后来通过Ivy也具备了这个功能),这一点革命性地改变了我们开发软件的方式。
但是,Maven也有它的问题。依赖管理不能很好地处理相同库文件不同版本之间的冲突(Ivy在这方面更好一些)。XML作为配置文件的格式有严格的结构层次和标准,定制化目标(goal)很困难。因为Maven主要聚焦于依赖管理,实际上用Maven很难写出复杂、定制化的构建脚本,甚至不如Ant。
Maven的主要优点是生命周期。只要项目基于一定之规,它的整个生命周期都能够轻松搞定,代价是牺牲了灵活性。
在对DSL(Domain Specific Languages)的热情持续高涨之时,通常的想法是设计一套能够解决特定领域问题的语言。在构建这方面,DSL的一个成功案例就是Gradle。

3 Gradle
Gradle结合了前两者的优点,在此基础之上做了很多改进。它具有Ant的强大和灵活,又有Maven的生命周期管理且易于使用。
Gradle不用XML,它使用基于Groovy的专门的DSL,从而使Gradle构建脚本变得比用Ant和Maven写的要简洁清晰。Gradle样板文件的代码很少,这是因为它的DSL被设计用于解决特定的问题:贯穿软件的生命周期,从编译,到静态检查,到测试,直到打包和部署。
它使用Apache Ivy来处理Jar包的依赖。
Gradle的成就可以概括为:约定好,灵活性也高。

https://blog.csdn.net/napolunyishi/article/details/39345995

四 Maven的Snapshot版本与Release版本

  1. Snapshot版本代表不稳定、尚处于开发中的版本

  2. Release版本则代表稳定的版本
    https://blog.csdn.net/hikvision_java_gyh/article/details/38657055

五 jar和arr
1 jar
在Java开发中,添加组件简单的以添加jar文件依赖为途径,jar有两个含义:
jar文件格式:Java Archive,就是zip文件格式,文件名后缀是jar,包含了java class,metadata,资源(文本、图片等)。
Java archive tool: JDK中的工具,用来生成jar包的工具。

jar在Android开发中的不足
在Android应用资源中,Java Source,Resouce以及所需的so文件和jar包,用jar格式可以很好的处理Java Source,但对于目录比较复杂的Android Res目录,二进制依赖so文件和jar包则显得的乏力。当你收到一个第三方SDK zip包,要添加到自己的项目中,解压后是一个jar包和一堆文件夹,不停的复制粘贴甚至解决冲突的时候,心里肯定开始不满意这血吸虫组件分发方式了。

2 arr
为了解决Android开发中组件引用的问题,引入aar格式。也是简单的zip格式。

https://yangbo.tech/2015/10/17/all-about-aar/

六、Maven的Snapshot版本与Release版本

  1. Snapshot版本代表不稳定、尚处于开发中的版本

  2. Release版本则代表稳定的版本

  3. 什么情况下该用SNAPSHOT?
    协同开发时,如果A依赖构件B,由于B会更新,B应该使用SNAPSHOT来标识自己。

未完待续

    原文作者:秋阳君
    原文地址: https://www.jianshu.com/p/f430efa1f743
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞